1'''
2AI - AI_N_samples_once.py with synchronous mode.
3
4This example demonstrates the process of obtaining AI data in N-sample mode.
5Additionally, it gets AI data with points in once from STEM.
6
7To begin with, it demonstrates the steps to open the AI and configure the AI parameters.
8Next, it outlines the procedure for reading the streaming AI data.
9Finally, it concludes by explaining how to close the AI.
10
11If your product is "STEM", please invoke the function `Sys_setAIOMode`and `AI_enableCS`.
12Example: AI_enableCS is {0, 2}
13Subsequently, the returned value of AI_readOnDemand and AI_readStreaming will be displayed as follows.
14data:
15 CH0, CH1, CH2, CH3, CH4, CH5, CH6, CH7, CH0, CH1, CH2, CH3, CH4, CH5, CH6, CH7
16 | | |
17 |---------------- CS0-----------------|---------------- CS2------------------|
18[sample0]
19[sample1]
20 .
21 .
22 .
23[sampleN]
24
25-------------------------------------------------------------------------------------
26Please change correct serial number or IP and port number BEFORE you run example code.
27
28For other examples please check:
29 https://github.com/WPC-Systems-Ltd/WPC_Python_driver_release/tree/main/examples
30See README.md file to get detailed usage of this example.
31
32Copyright (c) 2022-2025 WPC Systems Ltd. All rights reserved.
33'''
34
35## WPC
36from wpcsys import pywpc
37
38
39def main():
40 ## Get Python driver version
41 print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
42
43 ## Create device handle
44 dev = pywpc.STEM()
45
46 ## Connect to device
47 try:
48 dev.connect("192.168.1.110") ## Depend on your device
49 except Exception as err:
50 pywpc.printGenericError(err)
51 ## Release device handle
52 dev.close()
53 return
54
55 try:
56 ## Parameters setting
57 slot = 1 ## Connect AIO module to slot
58 mode = 1 ## 0: On demand, 1: N-samples, 2: Continuous
59 sampling_rate = 1000
60 samples = 200
61 read_points = 200
62 read_delay = 0.5 ## [sec]
63 timeout = 3 ## [sec]
64 chip_select = [0, 1]
65
66 ## Get firmware model & version
67 driver_info = dev.Sys_getDriverInfo(timeout)
68 print(f"Model name: {driver_info[0]}, Firmware version: {driver_info[-1]} ")
69
70 ## Get slot mode
71 slot_mode = dev.Sys_getMode(slot, timeout)
72 print("Slot mode:", slot_mode)
73
74 ## If the slot mode is not set to "AIO", set the slot mode to "AIO"
75 if slot_mode != "AIO":
76 err = dev.Sys_setAIOMode(slot, timeout)
77 print(f"Sys_setAIOMode in slot {slot}, status: {err}")
78
79 ## Get slot mode
80 slot_mode = dev.Sys_getMode(slot, timeout)
81 print("Slot mode:", slot_mode)
82
83 ## Open AI
84 err = dev.AI_open(slot, timeout)
85 print(f"AI_open in slot {slot}, status: {err}")
86
87 ## Enable CS
88 err = dev.AI_enableCS(slot, chip_select, timeout)
89 print(f"AI_enableCS in slot {slot}, status: {err}")
90
91 ## Set AI acquisition mode to N-samples mode (1)
92 err = dev.AI_setMode(slot, mode, timeout)
93 print(f"AI_setMode {mode} in slot {slot}, status: {err}")
94
95 ## Set AI sampling rate
96 err = dev.AI_setSamplingRate(slot, sampling_rate, timeout)
97 print(f"AI_setSamplingRate {sampling_rate} in slot {slot}, status: {err}")
98
99 ## Set AI # of samples
100 err = dev.AI_setNumSamples(slot, samples, timeout)
101 print(f"AI_setNumSamples {samples} in slot {slot}, status: {err}")
102
103 ## Open AI streaming
104 err = dev.AI_openStreaming(slot, timeout)
105 print(f"AI_openStreaming in slot {slot}, status: {err}")
106
107 ## Start AI streaming
108 err = dev.AI_startStreaming(slot, timeout)
109 print(f"AI_startStreaming in slot {slot}, status: {err}")
110
111 ## Read AI data
112 ai_2Dlist = dev.AI_readStreaming(slot, read_points, read_delay)
113 print(f"number of samples = {len(ai_2Dlist)}")
114
115 ok = True
116 for i, ai_list in enumerate(ai_2Dlist):
117 ## Check for any missing data
118 if len(ai_list) != len(chip_select) * 8:
119 print(i, ai_list)
120 ok = False
121 if ok:
122 print('OK')
123 else:
124 print('NG')
125
126 ## Close AI streaming
127 err = dev.AI_closeStreaming(slot, timeout)
128 print(f"AI_closeStreaming in slot {slot}, status: {err}")
129
130 ## Close AI
131 err = dev.AI_close(slot, timeout)
132 print(f"AI_close in slot {slot}, status: {err}")
133 except Exception as err:
134 pywpc.printGenericError(err)
135
136 finally:
137 ## Disconnect device
138 dev.disconnect()
139
140 ## Release device handle
141 dev.close()
142
143
144if __name__ == '__main__':
145 main()