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接口接收到的数据。
当 232接口收到连续 8个字节或者不够 8个字节但一帧结束会立即转发到
CAN总线,即如果一帧串口数据多于 8个字节则每次发送 8个字节直到最后一
段不足 8个字节,如果一帧串口数据少于 8个字节则一次发完。
串行帧转 CAN帧信息用户不用管,里面包含了帧信息(标准帧还是扩展帧) 以及数据字节长度;帧 ID是由用户在软件配置的,下次配置之前永远保持不变。
CAN通道到串行帧
当 CAN总线收到一帧 CAN信息(一帧 CAN数据小于等于 8个字节)会立即转发到 232接口。如果使能了“CAN帧信息发送到串行帧”则会把帧信息填充在第一个字节,如果使能了“CAN帧 ID发送到串行帧”则会把帧信息填充在之后的 2(标准帧)或 4(扩展帧)个字节,之后填充数据。
带标志转换
串行帧到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 通道发送出去
审核编辑 黄宇
-
CAN
+关注
关注
57文章
2694浏览量
463123 -
网关
+关注
关注
9文章
4251浏览量
50842 -
RTU
+关注
关注
0文章
403浏览量
28596
发布评论请先 登录
相关推荐
评论