AO waveform generation

  1
  2'''
  3AO - AO_waveform_gen.py with synchronous mode.
  4
  5This example demonstrates the process of writing AO signal of USBDAQF1AOD.
  6To begin with, it demonstrates the steps to open AO and configure the AO parameters.
  7Next, it outlines the procedure for AO streaming.
  8Finally, it concludes by explaining how to close AO.
  9
 10-------------------------------------------------------------------------------------
 11Please change correct serial number or IP and port number BEFORE you run example code.
 12
 13For other examples please check:
 14    https://github.com/WPC-Systems-Ltd/WPC_Python_driver_release/tree/main/examples
 15See README.md file to get detailed usage of this example.
 16
 17Copyright (c) 2022-2025 WPC Systems Ltd. All rights reserved.
 18'''
 19
 20## WPC
 21from wpcsys import pywpc
 22
 23## Python
 24import time
 25
 26
 27def main():
 28    ## Get Python driver version
 29    print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
 30
 31    ## Create device handle
 32    dev = pywpc.USBDAQF1AOD()
 33
 34    ## Connect to device
 35    try:
 36        dev.connect("default")  ## Depend on your device
 37    except Exception as err:
 38        pywpc.printGenericError(err)
 39        ## Release device handle
 40        dev.close()
 41        return
 42
 43    try:
 44        ## Parameters setting
 45        port = 0  ## Depend on your device
 46        mode = 2  ## 0: on demand, 1: N-samples, 2: Continuous
 47        sampling_rate = 1000
 48        number_of_sample = 1000
 49        form_mode = 3  ## 0: DC voltage, 1: retangular, 2: triangular, 3: sine
 50        amplitude = 1
 51        offset = 0.1
 52        freq_0 = 10
 53        freq_1 = 20
 54        timeout = 3  ## [sec]
 55
 56        ## Get firmware model & version
 57        driver_info = dev.Sys_getDriverInfo(timeout)
 58        print(f"Model name: {driver_info[0]}, Firmware version: {driver_info[-1]} ")
 59
 60        ## Open AO
 61        err = dev.AO_open(port, timeout)
 62        print(f"AO_open in port {port}, status: {err}")
 63
 64        ## Set AO generation mode
 65        err = dev.AO_setMode(port, mode, timeout)
 66        print(f"AO_setMode in port {port}, status: {err}")
 67
 68        ## Set AO sampling rate to 10k (Hz)
 69        err = dev.AO_setSamplingRate(port, sampling_rate, timeout)
 70        print(f"AO_setSamplingRate in port {port}, status: {err}")
 71
 72        ## Set AO NumSamples to 10000
 73        err = dev.AO_setNumSamples(port, number_of_sample, timeout)
 74        print(f"AO_setNumSamples in port {port}, status: {err}")
 75
 76        ## Set AO enabled channels
 77        err = dev.AO_setEnableChannels(port, [0, 1], timeout)
 78        print(f"AO_setEnableChannels in port {port}, status: {err}")
 79
 80        ## Set AO form in channel 0
 81        err = dev.AO_setForm(port, 0, form_mode, timeout)
 82        print(f"AO_setForm in channel 0 in port {port}, status: {err}")
 83
 84        ## Set AO form in channel 1
 85        err = dev.AO_setForm(port, 1, form_mode, timeout)
 86        print(f"AO_setForm in channel 1 in port {port}, status: {err}")
 87
 88        ## Set Channel 0 form parameters
 89        err = dev.AO_setFormParam(port, 0, amplitude, offset, freq_0, timeout)
 90        print(f"AO_setFormParam in channel 0 in port {port}, status: {err}")
 91
 92        ## Set Channel 1 form parameters
 93        err = dev.AO_setFormParam(port, 1, amplitude, offset, freq_1, timeout)
 94        print(f"AO_setFormParam in channel 1 in port {port}, status: {err}")
 95
 96        ## Open AO streaming
 97        info = dev.AO_openStreaming(port, timeout)
 98        print(f"Mode {info[0]}, sampling rate {info[1]}")
 99
100        ## Start AO streaming
101        err = dev.AO_startStreaming(port)
102        print(f"AO_startStreaming in port {port}, status: {err}")
103
104        ## Wait for 10 seconds to generate form
105        time.sleep(10)  ## delay [sec]
106
107        ## Close AO streaming
108        err = dev.AO_closeStreaming(port, timeout)
109        print(f"AO_closeStreaming in port {port}, status: {err}")
110
111        ## Close AO
112        err = dev.AO_close(port)
113        print(f"AO_close in port {port}, status: {err}")
114    except Exception as err:
115        pywpc.printGenericError(err)
116
117    finally:
118        ## Disconnect device
119        dev.disconnect()
120
121        ## Release device handle
122        dev.close()
123
124
125if __name__ == '__main__':
126    main()