Jump to content

DAQman

MCC Staff
  • Posts

    1,703
  • Joined

  • Last visited

Reputation Activity

  1. Like
    DAQman got a reaction from bjorn_tt in Measurement Computing USB-TC, calibration date remains at 2015 after InstaCal A/D calibration just now (2022)   
    Hello,
    Inside the USB-TC is a known millivolt reference. During calibration the channels are first connected to ground to measure offset. Then they are connected to the millivolt reference and with the two values, gain and offset coefficients are calculate and stored. This allows it to measure the thermcouple voltage accuractely. 
    During operation, it measures the thermcouple voltage, the CJC sensor and from these to values it determines temperature for the particular thermcouple type.
    As for the calibration date, 11/26/15 is the last factory calibration date, which happens to be the manufactured data. I check, and this particular USB-TC has never been sent in for a factory calibration. One thing to keep in mind, the millivolt reference used in the self calibration does eventually drift. The factory calibration reset the reference so that future self calibration are accurate. The current price for a calibration is $62.75 plus shipping. Email your contact info and model/serial number to info@mccdaq.com to receive a quote.
    Best regards,
    John
     
  2. Like
    DAQman got a reaction from Sam Darr in USB-1616HS-4 DIO for SSR   
    Hey Sam,
    There is no canned solution that we offer. The digital outputs are 3.3 volt compatible and can only source about 1mA. They work well when interfaced to 3.3 volt logic.
    You could try using the output as a switch to ground. Connect the SSR (+) control line to (+) Power (external power supply) and the (-) to the USB-1616HS-4 output. Connect (-) Power to the USB-1616HS-4 ground. When the output is set high, the SSR will be off but when it is set low current will flow from (+) Power down through the output to ground, which is (-) Power and this turns on the SSR. Test the output with a load on the SSR output because they need some current to flow to stay on.
    Best regards,
    John
  3. Like
    DAQman got a reaction from Anna.Gardner in .XML Hardware Error?   
    Hello,
    Fixing the .XML error simple, just make sure DASYLab is configured to run as an administrator. This is because the default IOtech XML hardware file is kept in the DASYLab folder which under Program Files (x86) and that requires permission to read/write. After you correct the XML error, if the remaining errors are the Action modules check if you have DASYLab FULL or PrO. You need at least FULL to use Action modules. For this run the DASYLab Configurator utility. There should be listed a serial number which is a 26 character string. If you provide the last six digits, I can use it to investigate to see if it is FULL/PRO version.
    Best regards,
    John
     
  4. Like
    DAQman got a reaction from e_reed in Continuous scan for thermocouple inputs   
    Hello @e_reed
    t_in and t_in_scan are polling functions, in fact t_in_scan calls t_in for each in the list.
    However, the USB-1616HS series has another function called DaqInScan that can scan both thermocouple and voltage inputs. For an example of how it works, take a look at the C# example DaqInScan03. In this example, you can see how to setup the channel arrays and how to convert the data. There is a DaqInScan Python example but it doesn't include thermocouples so you would need to modify. Once you have it working you could make the whole operation run in the background with the BACKGROUND|CONTINUOUS option.
    Best regards,
    John
  5. Like
    DAQman got a reaction from Ariel in 3D Model for DAQ   
    Hello @Ariel
    Nothing for the USB-CTR04-OEM but it's the same size as our USB-1808-OEM and I do have a file for it - see attached zip file.
    Best regards,
    John
    1808_OEM_Drawings.zip
  6. Like
    DAQman got a reaction from JColvin in fuzziness around traces for noisy signals in waveforms analog scope display   
    Select the Options (Gear/Cog) and on the menu uncheck Acquire Noise

  7. Like
    DAQman got a reaction from Bartłomiej Sikora in USB-1208HS-4AO / ULx LabVIEW PID control - internal/external clock synchronization   
    Hello,
    I've looked into your application further and using the ULx Timing VI to achieve higher throughput will not work in PID applications. This is because the underlying resources were designed to stream waveforms not single values. The waveform output works by first preloading the output buffer using the ULx Write Vi. For a clock rate of 1000, the buffer must be at least 5000 otherwise an error will occur. The buffer is not directly accessible and all additional ULx Writes get appended to the end.
    Take a look at the ULx Cont Gen Voltage Wfm-Int Clk-Non Regeneration.vi for an example of this. It is located in the \National Instruments\LabVIEW 2021\Examples\ULx\Analog Out\Generate Voltage.llb library.
    regards,
     
  8. Like
    DAQman got a reaction from Bartłomiej Sikora in USB-1208HS-4AO / ULx LabVIEW PID control - internal/external clock synchronization   
    Hello,
    First, see if you can get your PID control to work using single sample input/output which doesn't require the ULx Timing VI's. Instead, the timing will be control by the while loop speed. Below is an example of what I'm describing - it uses a 10mS delay to control the loop speed. 
    regards...

    pid_ctrl_example2.vi
  9. Like
    DAQman got a reaction from chessicfo in Request for help with long term fast data aquisition for USB-205   
    Hello, 
    The following Python for Windows program demonstrates how to collect data with a USB-205. The while...loop that reads the data controls how long it will run. It does not write to a file but it does print one row of data from each buffer read - this is done for simplicity. Use your Python skills to modify it adding a routine that can write a List along with a timestamp to the file. Do take note, there is very little memory used because you do not need a bigger buffer to continuously read data. Copy this example (attached) to the Console example program folder. 
    best regards,
    John
     
     
    from __future__ import absolute_import, division, print_function
    import time
    from builtins import *  # @UnusedWildImport
    from time import sleep
    from ctypes import cast, POINTER, c_double, c_ushort, c_ulong
    from mcculw import ul
    from mcculw.enums import ScanOptions, FunctionType, Status
    from mcculw.ul import ULError, a_input_mode
    from mcculw.enums import InterfaceType
    from mcculw.enums import ULRange
    from mcculw.enums import AnalogInputMode
    use_device_detection = True

    def run_example():
        board_num = 0
        board_index = 0
        find_device = "USB-205"
        if use_device_detection:
            board_num = -1
            ul.ignore_instacal()
            dev_list = ul.get_daq_device_inventory(InterfaceType.USB)
            if len(dev_list) > 0:
                for device in dev_list:
                    if str(device) == find_device:
                        print(f"Found {find_device} board number = {board_index}")
                        print(f"Serial number: {device.unique_id}")
                        print(f"Product type: {hex(device.product_id)}")
                        board_num = board_index
                        ul.create_daq_device(board_num, device)
                    board_index = board_index + 1
                if board_num == -1:
                    print(f"Device {find_device} not found")
                    return
            else:
                print("No devices detected")
                return
        # **********End of Discovery************
        rate = 10000
        # buffer sized to hold one second of data. Make larger if your data handling requires more.
        points_per_channel = 10000
        low_chan = 0
        high_chan = 3
        num_chans = 4
        total_count = points_per_channel * num_chans
        half_count = int(total_count / 2)
        # The SCALEDATA option, returns volts instead of A/D counts
        scan_options = ScanOptions.CONTINUOUS | ScanOptions.BACKGROUND | ScanOptions.SCALEDATA
        memhandle = ul.scaled_win_buf_alloc(total_count)
        buf_data = cast(memhandle, POINTER(c_double))
        # Check if the buffer was successfully allocated
        if not memhandle:
            print("Failed to allocate memory.")
            return
        try:
            # Start the scan
            ul.a_in_scan(
                board_num, low_chan, high_chan, total_count,
                rate, ULRange.BIP10VOLTS, memhandle, scan_options)
            # Create a format string that aligns the data in columns
            # plus two for curr_index and curr_count
            row_format = "{:8}" * (num_chans + 3)
            # Print the channel name headers
            labels = []
            for ch_num in range(low_chan, high_chan + 1):
                labels.append("CH" + str(ch_num) + "\t")
            labels.append("index\t")
            labels.append("count\t")
            labels.append("diff")
            print(row_format.format(*labels))
            # boolean flag used to toggle reading upper and lower buffer
            read_lower = True
            # Start updating the displayed values
            status, curr_count, curr_index = ul.get_status(
                board_num, FunctionType.AIFUNCTION)
            last = 0
            diff = 0
            while status != Status.IDLE and curr_count < 200000:
                # Make sure a data point is available for display.
                if curr_count > 0:
                    # curr_index points to the start of the last completed
                    # channel scan that was transferred between the board and
                    # the data buffer. Display the latest value for each
                    # channel.
                    # display_data = []
                    if (curr_index > half_count) and (read_lower == True):
                        diff = curr_count - last
                        ul.scaled_win_buf_to_array(memhandle, buf_data, 0, int(half_count))
                        print(
                            '{:.3f}\t {:.3f}\t {:.3f}\t {:.3f}\t {:d}\t {:d}'.format(buf_data[0], buf_data[1],
                                                                                            buf_data[2],
                                                                                            buf_data[3],
                                                                                            curr_index,
                                                                                            curr_count))
                        read_lower = False
                    elif (curr_index < half_count) and (read_lower == False):
                        diff = curr_count - last
                        ul.scaled_win_buf_to_array(memhandle, buf_data, int(half_count), int(half_count))
                        print(
                            '{:.3f}\t {:.3f}\t {:.3f}\t {:.3f}\t {:d}\t {:d}'.format(buf_data[0], buf_data[1],
                                                                                            buf_data[2],
                                                                                            buf_data[3],
                                                                                            curr_index,
                                                                                            curr_count))
                        read_lower = True
                sleep(0.1)
                status, curr_count, curr_index = ul.get_status(board_num, FunctionType.AIFUNCTION)
            # Stop the background operation (this is required even if the
            # scan completes successfully)
            ul.stop_background(board_num, FunctionType.AIFUNCTION)
            print("Scan completed successfully.")
        except ULError as e:
            print(e.message)
        finally:
            # Free the buffer in a finally block to prevent errors from causing
            # a memory leak.
            ul.win_buf_free(memhandle)
            if use_device_detection:
                ul.release_daq_device(board_num)

    if __name__ == '__main__':
        run_example()
     
    a_in_scan_USB200.py
  10. Like
    DAQman got a reaction from RohanK123 in Issue with USB-Temp and TC Series with Windows 11   
    Hello,
    You must have InstaCal 6.73 install on Windows 11 for it to work. The first time you run InstaCal with the USB-TEMP/TC you should get a window indicating you must perform an update. After running the update, either restart Windows or repower the device by plugging it back in. Run InstaCal again and it should recognize your device and allow  you to configure it. 
    If you do not have InstaCal 6.73, download our latest DAQ Software CD using the following:
    https://www.mccdaq.com/downloads/MCCDaqCD/mccdaq.exe
    Regards,
    John
  11. Like
    DAQman got a reaction from Gb7384 in Trouble installing ULx for LabVIEW 2021   
    Hi Marcel,
    See if you have a ULx folder in \National Instruments\Shared\ and in \National Instruments\LabVIEW 2021\Examples\. If the ULx folders are present the support is install. However, the menu file somehow vanished. The following KB article addresses this topic:
    https://kb.mccdaq.com/KnowledgebaseArticle50382.aspx
    The help file should be in C:\Program Files (x86)\National Instruments\Shared\ULx. If it is there, you could make your own shortcut.
    Best regards,
    John
  12. Like
    DAQman got a reaction from Alexandre_Borali in JTAG-SMT3-NC different ranges of temperatures.   
    Hello Alexandre,
    It makes no sense that the storage temperature is less than the operating temperature. Therefore, I am thinking that the storage specification is incorrect. From what I can tell, it uses the FT232HQ chip and its specification lists a storage temperature of -65 to 150 Degrees C - see below.
    Here is a link to the data sheet I found: https://ftdichip.com/products/ft232hq/

    Best regards,
    John
×
×
  • Create New...