生活随笔
收集整理的這篇文章主要介紹了
Python调用周立功CAN接口卡接口库函数(接收数据)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上篇博文《Python調用周立功CAN接口卡接口庫函數》僅做了發送數據例程,有網友在測試接收時出現了問題,在此給出自己的接收數據代碼。
在此需要強調的是,因為經濟水平有限,自己所使用的CAN接口卡為第三方兼容周立功函數庫的接口卡,經測試,第三方CAN接口卡VCI_Receive接收函數其參數WaitTime是無效的,即使該值為-1,也不會阻塞等待數據,若使用周立功原版接口卡則無此問題。
以USBCAN-2E-U接口卡,1000k波特率,接收一幀數據并打印為例,代碼如下:
import platform
import time
from ctypes
import *class _VCI_INIT_CONFIG(Structure
):_fields_
= [('AccCode', c_ulong
),('AccMask', c_ulong
),('Reserved', c_ulong
),('Filter', c_ubyte
),('Timing0', c_ubyte
),('Timing1', c_ubyte
),('Mode', c_ubyte
)]class _VCI_CAN_OBJ(Structure
):_fields_
= [('ID', c_uint
),('TimeStamp', c_uint
),('TimeFlag', c_byte
),('SendType', c_byte
),('RemoteFlag', c_byte
),('ExternFlag', c_byte
),('DataLen', c_byte
),('Data', c_byte
*8),('Reserved', c_byte
*3)]vic
= _VCI_INIT_CONFIG
()
vic
.AccCode
= 0x00000000
vic
.AccMask
= 0xffffffff
vic
.Filter
= 0
vic
.Timing0
= 0x00
vic
.Timing1
= 0x1c
vic
.Mode
= 0vco
= _VCI_CAN_OBJ
()
vco
.ID
= 0x00000001
vco
.SendType
= 0
vco
.RemoteFlag
= 0
vco
.ExternFlag
= 0
vco
.DataLen
= 8
vco
.Data
= (1, 2, 3, 4, 5, 6, 7, 8)canLib
= windll
.LoadLibrary
('.\\CAN_Lib\\'+platform
.architecture
()[0]+'\\ControlCAN.dll')
print('打開設備: %d' % (canLib
.VCI_OpenDevice
(21, 0, 0)))
print('設置波特率: %d' % (canLib
.VCI_SetReference
(21, 0, 0, 0, pointer
(c_int
(0x060003)))))
print('初始化: %d' % (canLib
.VCI_InitCAN
(21, 0, 0, pointer
(vic
))))
print('啟動: %d' % (canLib
.VCI_StartCAN
(21, 0, 0)))
print('清空緩沖區: %d' % (canLib
.VCI_ClearBuffer
(21, 0, 0)))while canLib
.VCI_Receive
(3, 0, 0, pointer
(vco
), 1, 50) == 0:pass
else:for d
in vco
.Data
:print(d
)
總結
以上是生活随笔為你收集整理的Python调用周立功CAN接口卡接口库函数(接收数据)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。