1'''
2CAN - CAN_read.py with synchronous mode.
3
4This example demonstrates how to read data from another device with CAN interface from USBDAQF1CD.
5
6First, it shows how to open CAN port and configure CAN parameters.
7Second, read bytes from another device.
8Last, stop and close CAN port.
9
10-------------------------------------------------------------------------------------
11Please change correct serial number or IP and port number BEFORE you run example code.
12
13For other examples please check:
14 https://github.com/WPC-Systems-Ltd/WPC_Python_driver_release/tree/main/examples
15See README.md file to get detailed usage of this example.
16
17Copyright (c) 2022-2025 WPC Systems Ltd. All rights reserved.
18'''
19
20## WPC
21from wpcsys import pywpc
22
23## Python
24import time
25
26
27def main():
28 ## Get python driver version
29 print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
30
31 ## Create device handle
32 dev = pywpc.USBDAQF1CD()
33
34 ## Connect to device
35 try:
36 dev.connect("default") ## Depend on your device
37 except Exception as err:
38 pywpc.printGenericError(err)
39 ## Release device handle
40 dev.close()
41 return
42
43 try:
44 ## Parameters setting
45 port = 1 ## Depend on your device
46 speed = 0 ## 0: 125 KHz, 1: 250 kHz, 2: 500 kHz, 3: 1 MHz
47 delay = 0.005 ## [sec]
48 timeout = 3 ## [sec]
49
50 ## Get firmware model & version
51 driver_info = dev.Sys_getDriverInfo(timeout)
52 print(f"Model name: {driver_info[0]}, Firmware version: {driver_info[-1]} ")
53
54 ## Open CAN
55 err = dev.CAN_open(port, timeout)
56 print(f"CAN_open in port {port}, status: {err}")
57
58 ## Set CAN port and set speed to 0
59 err = dev.CAN_setSpeed(port, speed, timeout)
60 print(f"CAN_setSpeed in port {port}, status: {err}")
61
62 ## Set CAN port and start CAN
63 err = dev.CAN_start(port, timeout)
64 print(f"CAN_start in port {port}, status: {err}")
65
66 ## Read 5 frames for 1000 times
67 for i in range(1000):
68 frame_list = dev.CAN_read(port, 5, delay=delay)
69 if len(frame_list) > 0:
70 for frame in frame_list:
71 print(frame)
72 else:
73 ## Wait for 0.01 seconds
74 time.sleep(0.01) ## delay [sec]
75
76 ## Set CAN port and stop CAN
77 err = dev.CAN_stop(port, timeout)
78 print(f"CAN_stop in port {port}, status: {err}")
79
80 ## Close CAN
81 err = dev.CAN_close(port, timeout)
82 print(f"CAN_close in port {port}, status: {err}")
83 except Exception as err:
84 pywpc.printGenericError(err)
85
86 finally:
87 ## Disconnect device
88 dev.disconnect()
89
90 ## Release device handle
91 dev.close()
92
93
94if __name__ == '__main__':
95 main()