CANALYST-II的linux版本通信解析程序
我们解析程序的先后顺便为:
- open,打开can卡;
- initcan,对can卡进行初始化;
- start,启动can通道;
- 就可以接收recive和发送transmit了。
open函数
DWORD __stdcall VCI_OpenDevice(DWORD DevType,DWORD DevIndex,DWORD Reserved)
其中形参第一个DevType为设备类型,第二个 DevIndex为索引号,通常为0,第三个Reserved为保留参数,通常为 0。
初始化函数
DWORD __stdcall VCI_InitCAN(DWORD DevType, DWORD DevIndex, DWORD CANIndex,
PVCI_INIT_CONFIG pInitConfig)
其中形参第一个DevType为设备类型;第二个 DevIndex为索引号,通常为0;第三个CANIndex为CAN通道的索引,若使用can1,则为0,若使用can2,则为1;最后为初始化结构参数
//example
VCI_INIT_CONFIG vci_conf;
vci_conf.AccCode=0;
vci_conf.AccMask=0xFFFFFFFF;
vci_conf.Filter=1;//接收所有帧
启动CAN通道
DWORD __stdcall VCI_StartCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex)
根初始化函数类似,型参为设备类型,索引号以及CAN通道索引
接收函数
DWORD __stdcall VCI_Receive(DWORD DevType, DWORD DevIndex, DWORD CANIndex,
PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime);
其形参前三个跟start相同,但第四个形参 pReceive是用来接收的帧结构体VCI_CAN_OBJ数组的首指针。第五个len为用来接收的帧结构体数组的长度,最后 WaitTime为保留参数。
注:
- pReceive数组大小一定要比len大,否则会出现内参读写错误
- len为可接收的最大长度,实际的接收长度都比此长度小
- waittime保留参数一般设置为100
- 函数的返回实际读取的帧数, 若=-1表示USB-CAN设备不存在或USB掉线。
发送函数
DWORD __stdcall VCI_Transmit(DWORD DeviceType,DWORD DeviceInd,DWORD
CANInd,PVCI_CAN_OBJ pSend,DWORD Length);
发送函数跟接收函数类似,psend为发送结构体的首指针,length为发送帧的长度。
注:
- length一般为1,单帧的发送,发送效率较高
接收函数一般为时间触发,每多少毫秒接收一次,发送函数一般为事件触发,有内容才发送
初始化成功
跟windows下的CANtest传输
ubuntu接收,windows发送
ubuntu发送,windows接收
成功!!
详细代码见
链接: ROS-CAN通信协议程序.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)