2024-04-26
MACH网关 SENT-ETH数据读取与控制(CAN通讯)
作者:Triv 点击:116
Mach SAE J2716 SENT 网关模块,厂家的软件只支持了canlib32.dll,但是网关开放的通讯协议可以让其他CAN卡通过CAN报文顺利地使用它。
如果使用厂家软件,可以通过Kvaser进行连接,需要注意的是记住配置的连接参数,如CAN连接,需知道通道是CAN还是CANFD,波特率,TX和RXID等;亦或者用USB连接,需要知道串口的波特率。
Ethernet连接就简单很多,在浏览器输入设置的IP即可(前提是PC网口需与网关设置IP在同一网段)。
当然本文的重点不是用软件如何使用该工具,使用软件可以快捷的去修改设备EEROM中的CAN通道设置,如果是SENT-CAN型号或者没有Kvaser就只能根据通讯协议用CAN报文修改相关参数了。如果配置CAN后忘记参数,就只能用利用设备上的RESET按键了。
用厂家软件配置好后,通过SENT仿真功能发送SENT,然后断开与软件连接,使用CANKing查看CAN报文(网关不具备终端电阻,如果有错误帧试着并个120Ω电阻),注意四通道SENT-ETH使用CAN接收SENT数据就不能用USB连接PC(通过Vin供电),否则仅有串口数据。
根据通讯协议可知,byte0 = 0x95是网关接收端的数据;byte0 = 0x99是网关发送端的数据(这里收发都使用的SENT-ETH网关模拟)。
byte1 = 0x01代表SENT2,0x02代表SENT3,也就是SENT3作为发送端,SENT2作为接收端。
byte2 = 0x60中的6(7-4bit)是数据长度(即6个半字节),0x0代表状态。
当不勾选,即Swap fast data nibbles = 0时
60代表status=0,DataNibbleCount=6
22为CRC=2,CRCCalculated=2
注意:Swap fast data nibbles = 0(上图中CAN的btye3-5数据由此方法解读),
21(十六进制)代表DATANibble0 = 1,DATA1Nibble1 = 2
43(十六进制)代表DATANibble2 = 3,DATANibble3 = 4
65(十六进制)代表DATANibble4 = 5,DATANibble5 = 6
即21 43 65为SENT的数据,正确读取顺序为0~5 ==> 1 2 3 4 5 6(从左到右数据字节升高)
当勾选,即Swap fast data nibbles = 1时
60代表status=0,DataNibbleCount=6
22为CRC=2,CRCCalculated=2
注意:Swap fast data nibbles = 1,
21(十六进制)代表DATANibble0 = 2,DATA1Nibble1 = 1
43(十六进制)代表DATANibble2 = 4,DATANibble3 = 3
65(十六进制)代表DATANibble4 = 6,DATANibble5 = 5
即21 43 65为SENT的数据,正确读取顺序为0~5 ==> 2 1 4 3 6 5(从左到右数据字节升高)
其他CAN设备(发送CAN报文讲解)
如果使用其他CAN卡,仅能使用通讯协议进行设备控制。这里偷个懒,将非官方推荐的CAN卡并在网关与Kvaser之间监控厂家软件的控制指令。可以看到厂家软件中的各种实现也都是根据通讯协议实现。下面以发送SENT数据的控制报文进行讲解。
由于MessageId占用一个字节,所以发送数据的CAN控制报文中,ID=CANID_RX(可进行配置);byte0 = 0x90。
byte1=0x02即控制通道SENT3(SENT1为0x00),若设置的SENT通道CRC不是SW模式就可忽略该参数,其余参数解释同上节。
最后得出
ID=0x321,Data={0x99 0x02 0x60 0xA1 0x00 0x00 0x88}