1'''
2DIO - DO_write_pins.py with synchronous mode.
3
4This example illustrates the process of writing a high or low signal to a DO pin from STEM.
5
6To begin with, it demonstrates the steps required to open the DO pin.
7Next, voltage output is written to the DO pin.
8Lastly, it concludes by closing the DO pin.
9
10If your product is "STEM", please invoke the function `Sys_setDIOMode`.
11
12The DIO ports 0 to 1 are assigned to slot 1, while ports 2 to 3 are assigned to slot 2.
13---------------------------
14| Slot 1 port 1 & 0 |
15| Slot 2 port 3 & 2 |
16| Slot 3 port 5 & 4 |
17| Slot 4 port 7 & 6 |
18---------------------------
19
20-------------------------------------------------------------------------------------
21Please change correct serial number or IP and port number BEFORE you run example code.
22
23For other examples please check:
24 https://github.com/WPC-Systems-Ltd/WPC_Python_driver_release/tree/main/examples
25See README.md file to get detailed usage of this example.
26
27Copyright (c) 2022-2025 WPC Systems Ltd. All rights reserved.
28'''
29
30## WPC
31from wpcsys import pywpc
32
33## Python
34import time
35
36
37def main():
38 ## Get Python driver version
39 print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
40
41 ## Create device handle
42 dev = pywpc.STEM()
43
44 ## Connect to device
45 try:
46 dev.connect("192.168.1.110") ## Depend on your device
47 except Exception as err:
48 pywpc.printGenericError(err)
49 ## Release device handle
50 dev.close()
51 return
52
53 try:
54 ## Parameters setting
55 port = 0 ## Depend on your device
56 pin_index = [0, 1, 2, 3]
57 DO_value = [1, 0, 1, 0]
58 timeout = 3 ## [sec]
59
60 ## Get firmware model & version
61 driver_info = dev.Sys_getDriverInfo(timeout)
62 print(f"Model name: {driver_info[0]}, Firmware version: {driver_info[-1]} ")
63
64 ## Open pins with digital output
65 err = dev.DO_openPins(port, pin_index, timeout)
66 print(f"DO_openPins in port {port}, status: {err}")
67
68 ## Write pins to high or low
69 err = dev.DO_writePins(port, pin_index, DO_value, timeout)
70 print(f"DO_writePins in port {port}, status: {err}")
71
72 ## Wait for seconds to see led status
73 time.sleep(3) ## delay [sec]
74
75 ## Close pins with digital output
76 err = dev.DO_closePins(port, pin_index, timeout)
77 print(f"DO_closePins in port {port}, status: {err}")
78 except Exception as err:
79 pywpc.printGenericError(err)
80
81 finally:
82 ## Disconnect device
83 dev.disconnect()
84
85 ## Release device handle
86 dev.close()
87
88
89if __name__ == '__main__':
90 main()