AI N samples once

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