1'''
2AI - AI_continuous_with_logger.py with synchronous mode.
3
4This example demonstrates the process of obtaining AI data in continuous mode with 8 channels from STEM.
5Then, save data into CSV file.
6
7To begin with, it demonstrates the steps to open the AI and configure the AI parameters.
8Next, it outlines the procedure for reading and saving 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-2024 WPC Systems Ltd. All rights reserved.
33'''
34
35## Python
36import time
37
38## WPC
39
40from wpcsys import pywpc
41
42
43def main():
44 ## Get Python driver version
45 print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
46
47 ## Create device handle
48 dev = pywpc.STEM()
49
50 ## Connect to device
51 try:
52 dev.connect("192.168.1.110") ## Depend on your device
53 except Exception as err:
54 pywpc.printGenericError(err)
55 ## Release device handle
56 dev.close()
57 return
58
59 try:
60 ## Parameters setting
61 slot = 1 ## Connect AIO module to slot
62 mode = 2 ## 0 : On demand, 1 : N-samples, 2 : Continuous.
63 sampling_rate = 200
64 read_points = 200
65 read_delay = 0.2 ## second
66 timeout = 3 ## second
67 chip_select = [0, 1]
68
69 ## Get firmware model & version
70 driver_info = dev.Sys_getDriverInfo(timeout)
71 print("Model name: " + driver_info[0])
72 print("Firmware version: " + driver_info[-1])
73
74 ## Open file with WPC_test.csv
75 err = dev.Logger_openFile("WPC_test.csv")
76 print(f"Logger_openFile, status: {err}")
77
78 ## Write header into CSV file
79 err = dev.Logger_writeHeader(["CH0","CH1","CH2","CH3","CH4","CH5","CH6","CH7"])
80 print(f"Logger_writeHeader, status: {err}")
81
82 ## Get slot mode
83 slot_mode = dev.Sys_getMode(slot, timeout)
84 print("Slot mode:", slot_mode)
85
86 ## If the slot mode is not set to "AIO", set the slot mode to "AIO"
87 if slot_mode != "AIO":
88 err = dev.Sys_setAIOMode(slot, timeout)
89 print(f"Sys_setAIOMode in slot {slot}, status: {err}")
90
91 ## Get slot mode
92 slot_mode = dev.Sys_getMode(slot, timeout)
93 print("Slot mode:", slot_mode)
94
95 ## Open AI
96 err = dev.AI_open(slot, timeout)
97 print(f"AI_open in slot {slot}, status: {err}")
98
99 ## Enable CS
100 err = dev.AI_enableCS(slot, chip_select, timeout)
101 print(f"AI_enableCS in slot {slot}, status: {err}")
102
103 ## Set AI acquisition mode to continuous mode (2)
104 err = dev.AI_setMode(slot, mode, timeout)
105 print(f"AI_setMode {mode} in slot {slot}, status: {err}")
106
107 ## Set AI sampling rate
108 err = dev.AI_setSamplingRate(slot, sampling_rate, timeout)
109 print(f"AI_setSamplingRate {sampling_rate} in slot {slot}, status: {err}")
110
111 ## Open AI streaming
112 err = dev.AI_openStreaming(slot, timeout)
113 print(f"AI_openStreaming in slot {slot}, status: {err}")
114
115 ## Start AI streaming
116 err = dev.AI_startStreaming(slot, timeout)
117 print(f"AI_startStreaming in slot {slot}, status: {err}")
118
119 ## Wait a while for data acquisition
120 time.sleep(1) ## delay [s]
121
122 ## Close AI streaming
123 err = dev.AI_closeStreaming(slot, timeout)
124 print(f"AI_closeStreaming in slot {slot}, status: {err}")
125
126 data_len = 1
127 while data_len > 0:
128 ## Read data acquisition
129 ai_2Dlist = dev.AI_readStreaming(slot, read_points, read_delay)
130 print(f"number of samples = {len(ai_2Dlist)}" )
131
132 ## Write data into CSV file
133 dev.Logger_write2DList(ai_2Dlist)
134
135 ## Update data len
136 data_len = len(ai_2Dlist)
137
138 ## Close AI
139 err = dev.AI_close(slot, timeout)
140 print(f"AI_close in slot {slot}, status: {err}")
141 except Exception as err:
142 pywpc.printGenericError(err)
143
144 ## Disconnect device
145 dev.disconnect()
146
147 ## Release device handle
148 dev.close()
149 return
150
151if __name__ == '__main__':
152 main()