AI continuous with logger

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