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()