CAN总线协议转换网关案例

Can转RTU网关can转modbus网关
点击:672发布时间:2023-07-17

竖图

YC-CAN-RTU 是一CAN-Modbus 现场线RS-232 总线RS-485 总线之间据转换的协议型转换,支持标Modbus      RTU 协议。集1 RS-232 通道1 RS-485 通道1 CAN-Modbus 通道可以方便地嵌入使用 RS-232 接口和 RS-485 接口的节点上,在不需要改变原有硬件结构的前提下使设备获得CAN-Modbus 通讯接口实现 RS-232 RS-485 设备与 CAN-Modbus 网络之间的连接及数据通讯

透明传输

串行帧到CAN 通道

设备以 PC 端软件配置好的 CAN 帧类型和 ID 作为 CAN 发送的类型和 ID, 不断转发 RS-232 接口接收到的数据。

image1

当 232 接口收到连续 8 个字节或者不够 8 个字节但一帧结束会立即转发到

CAN 总线,即如果一帧串口数据多于 8 个字节则每次发送 8 个字节直到最后一

段不足 8 个字节,如果一帧串口数据少于 8 个字节则一次发完。

image2

串行帧转 CAN 帧信息用户不用管,里面包含了帧信息(标准帧还是扩展帧) 以及数据字节长度;帧 ID 是由用户在软件配置的,下次配置之前永远保持不变。

CAN 通道到串行帧

当 CAN 总线收到一帧 CAN 信息(一帧 CAN 数据小于等于 8 个字节)会立即转发到 232 接口。如果使能了“CAN 帧信息发送到串行帧”则会把帧信息填充在第一个字节,如果使能了“CAN 帧 ID 发送到串行帧”则会把帧信息填充在之后的 2(标准帧)或 4(扩展帧)个字节,之后填充数据。

image4

image3 

带标志转换

串行帧到CAN 通道

带标志转换可以通过配置软件指定 CAN 发送时的 ID 类型,在串行帧第几个字节开始(从 0 开始)、ID 长度是多少(1-4)。

232 接口收到一帧串行数据会根据上述配置取出ID 的并以此作为CAN 发送

ID 发送这一帧串行数据。

带标志转换同样是边收边转发,只要 232 接口收到这帧已经包含的完整 ID

并且数据够了 8 个字节或一帧结束就立即转发。

串行帧

 

 

 

 

 

帧信息

帧信息


帧信息

帧信息

数据 1

帧 ID

ID


ID

ID

数据 2

 

 

 

 

 

 

数据域

数据 1


数据 11

数据 3 ID

数据 2


数据 12

数据 4 ID

数据 5


数据 13

数据 5

数据 6


数据 14

数据 7


数据 15

数据 n-2

数据 8


数据 16

数据 n-1

数据 n-1

数据 9


数据 n

数据 n

数据 10



如上表格:配置为带标志转换模式,以标准帧发送,ID 长度为 2,ID 从第

2 字节开始(从 0 开始计数)。只要 232 接口收到前 4 个字节就确定了 ID,收完了

前 10 个字节就开始发送了,之后每收 8 个字节就发送,直到这一帧发完。下一帧串行帧收到 4 个字节之后重新设置发送 ID。

注意事项:串行帧中 ID 长度与 CAN 发送 ID 对应关系

串行帧中 ID 长度与 CAN 发送 ID 对应关系

ID 长度

标准帧

扩展帧

1

ID 低 8 位

ID 最低 8 位(7-0)

2

ID 高 3 位,ID 低 8 位

ID 15-8 位,ID 7-0 位

 

3

 

空字节,ID 高 3 位,ID 低 8 位

ID 23-16 位,ID 15-8 位,ID

7-0 位

 

4

 

空字节,空字节,ID 高 3 位,ID 低 8 位

ID 最高五位,ID 23-16 位,

ID 15-8 位,ID 7-0 位

CAN 通道到串行帧

当CAN 收到一帧数据也会立即转发到232 接口,同时会在相应位置填充CAN 帧 ID,因为串行帧格式原因,所以务必保证软件配置的CAN 信息(CAN 类型、

ID 长度)与 CAN 网络一致。

CAN 帧

 

 

 

 

 

 

 

串行帧

 

帧信息

标准帧 0x00+数据字节长度

扩展帧 0x80+数据字节长度

 

数据 1

帧 ID

标准帧 11 位,扩展帧 29 位

数据 2

 

 

 

 

 

 

数据域

数据 1

ID 高 3 位

数据 2

ID 低 8 位

数据 3

数据 3

数据 4

数据 4

数据 5

数据 5

数据 6

数据 6

数据 7

数据 7

数据 8

数据 8

注意事项:CAN 发送 ID 填充到串行帧规则

CAN 发送 ID 填充到串行帧规则


串行帧 ID 长度

填充规则

 

 

 

标准帧

1

ID 低 8 位

2

ID 高 3 位,ID 低 8 位

3

空字节,ID 高 3 位,ID 低 8 位

4

空字节,空字节,ID 高 3 位,ID 低 8 位

 

 

 

扩展帧

1

ID 最低 8 位(7-0)

2

ID 15-8 位,ID 7-0 位

3

ID 23-16 位,ID 15-8 位,ID 7-0 位

4

ID 最高五位,ID 23-16 位,ID 15-8 位,ID 7-0 位

Modbus 转换

Modbus 转 CAN 模式中设备并不作为 Modbus 主站或者从站,只负责把

Modbus 帧通过 CAN 发送出去,另一个使用相同协议的设备还原 Modbus 并把应答 Modbus 帧发到 CAN 网络。

RS-485 采用标准 Modbus RTU 协议,所以用户在软件配置时务必确保设置是否符合 Modbus RTU 协议。

Modbus RTU 协议对规定,数据格式为 1 位起始位,8 位数据位,1 位停止位,偶校验(也可以奇校验或者无校验,如果无校验则把停止位设为两位),

CRC16Modbus 校验,Modbus 一帧最长为 256 字节。

设备收到完整一帧 Modbus 会进行 CRC 校验, 如果没有错误会把这条

Modbus 帧通过 CAN 发送到 CAN 网络,但不会发送最后两个字节的 CRC,因为

CAN 可靠性非常高,出错概率极低。当设备从 CAN 通道收到完整一帧 Modbus

之后会自动加上 CRC 校验然后通过 RS-485 发送出去。

RS-485 通道到CAN 通道

Modbus 转CAN 与前两种转换方式不同,只有在收到完整一帧 Modbus 之后, 设备才会把 Modbus 第一字节(地址字节)作为 CAN 发送 ID,通过如下分段方式进行拆包然后完成 CAN 通道的转发。因为一帧 CAN 帧最多携带 8 个数据, 为了能在另一端正确地完成对一帧 Modbus 的拼接故参考 DeviceNet(一个 CAN 应用层协议)分段报文传送协议进行拆包,然后通过 CAN 通道发送,在另一端按此协议重组。

因为 Modbus 转换模式下只有在收到完整一帧 Modbus 数据才会转发,且根据 Modbus 协议,Modbus 是“问答”型协议,所以要等待另一端响应之后才能发送下一阵 Modbus 数据,或者超时无应答也可以再次发送。如果发送频率过快,


“问完没答”就发下一针可能造成数据丢失或数据错误。分段拆包格式如下:


7

6

5

4

3

2

1

0

帧信息


ID1


数据 1

分段标记

分段类型

分段计数器

数据 2

数据 1

数据 3

数据 2

数据 4

数据 3

数据 5

数据 4

数据 6

数据 5

数据 7

数据 6

数据 8

数据 7











分段标记:0 单独报文,1 分段报文中的一段;

分段类型:0 第一个分段,1 中间分段,2 最后分段

分段计数器:每一段的标志,该段在整个报文中的序号 0-31

CAN 通道到RS-485 通道

设备把 CAN 通道收上来的 CAN 帧按拆包规则逆向组合,之后在最后加上两个字节 CRC 之后通过 RS-485 通道发送出去

分享到: