ROS-CAN通信解析程序分析(ROS中进行CAN通信)

CANALYST-II的linux版本通信解析程序
ROS-CAN通信解析程序分析(ROS中进行CAN通信)_第1张图片

我们解析程序的先后顺便为:

  1. open,打开can卡;
  2. initcan,对can卡进行初始化;
  3. start,启动can通道;
  4. 就可以接收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为保留参数。
注:

  1. pReceive数组大小一定要比len大,否则会出现内参读写错误
  2. len为可接收的最大长度,实际的接收长度都比此长度小
  3. waittime保留参数一般设置为100
  4. 函数的返回实际读取的帧数, 若=-1表示USB-CAN设备不存在或USB掉线。

发送函数

DWORD __stdcall VCI_Transmit(DWORD DeviceType,DWORD DeviceInd,DWORD
CANInd,PVCI_CAN_OBJ pSend,DWORD Length);

发送函数跟接收函数类似,psend为发送结构体的首指针,length为发送帧的长度。
注:

  1. length一般为1,单帧的发送,发送效率较高

接收函数一般为时间触发,每多少毫秒接收一次,发送函数一般为事件触发,有内容才发送

初始化成功

ROS-CAN通信解析程序分析(ROS中进行CAN通信)_第2张图片

跟windows下的CANtest传输

ubuntu接收,windows发送

ROS-CAN通信解析程序分析(ROS中进行CAN通信)_第3张图片

ROS-CAN通信解析程序分析(ROS中进行CAN通信)_第4张图片

ubuntu发送,windows接收

ROS-CAN通信解析程序分析(ROS中进行CAN通信)_第5张图片
ROS-CAN通信解析程序分析(ROS中进行CAN通信)_第6张图片
成功!!
详细代码见
链接: ROS-CAN通信协议程序.

你可能感兴趣的:(ubuntu,can,串口通信)