LX-CAN通讯帧传输协议
LX_CAN 通讯帧传输协议定义了 LX_CAN 协议规范中的通讯模式,以及LX_CAN 网络中各个节点按照数据传输协议实现相互之间的数据交换。通过 LX_CAN 通讯帧传输协议能够保证LX_CAN 网络中通讯数据传输的确定性和可靠性。
1.1 LX_CAN协议通讯模式
LX_CAN 协议采用灵活的通讯模式,支持主从方式通讯模式和事件触发通讯模式。生产者消费者通讯模式用于 LX_CAN 网络中的生产者对于消费者的访问。
1.1.1 生产消费者模式
LX_CAN协议的CAN网络中,最常用的是生产消费者通讯模式。通讯网络中,某个模块负责产生数据,这些数据由另一个模块来负责处理,产生数据的模块,就称为生产者;而处理数据的模块,就称为消费者。在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式。就够如图:
生产者消费者模式在LX_CAN协议中有三种方式:
1.广播方式
所有的消费者必须接受广播方式命令帧。地址0xFF用于识别广播通信。在广播报文中目标节点地址为0xFF,如下:
2.组地址(一对多)
LX_CAN协议中,组地址方式是一种一对多的模式,即一个组地址多个不同的地址号和通信对象。如下图:
3.物理地址(点对点)
LX_CAN协议中,生产者消费之模式下的物理地址的方式是一对一的点对点方式。如下图:
1.2 LX_CAN协议报文处理过程
生产者根据应用软件所需要的操作确定消费者源地址、功能码、以及所要的操作资源节点和数据参数,按LX_CAN报文格式封装发送到LX_CAN网络节点上。
消费者接收到生产者的报文后,需要根据报文中的目标节点、功能码、资源节点以及数据参数进行判断,以决定该报文是否为合法的报文。如果为合法的报文则执行相应的操作,并返回正常的响应报文;如果为非法的报文,则丢弃接收的报文,返回异常响应报文,并根据错误在异常响应报文中指明错误代码,以供消费者决定下一个操作。LX_CAN协议报文处理过程,如下:
1.3 LX_CAN报文传输协议
1.3.1 LX_CAN 帧格式
1.命令帧
在CAN网络的源节点负责发起通讯,主控节点一般是命令帧。命令帧格式如下:
优先级 |
源地址 |
目的地址 |
ACK=0 |
重复位 |
保留 |
分段码 |
0-7个数据 |
ACK表示需要目标节点应答,当目的地址=0XFF时命令帧为广播帧时,广播帧可以设置ACK=1。
2.正常响应帧
如果LX_CAN的网络节点收到命令帧,并成功处理后,目标节点发送“正常响应帧”至网络。
正常响应帧格式如下:
优先级 |
源地址 |
目的地址 |
ACK=1 |
重复位 |
保留 |
分段码 |
0-7个数据 |
ACK=1 表示为响应帧,无需应答。功能码 与“命令帧”的 功能码 相同,表示本帧为正常响应。
3.异常响应帧
如果 LX_CAN 网络的目标节点在收到“命令帧”后,无法对该命令帧进行处理(例如功能码不支持、参数错误时等) ,则发送“异常响应帧”至网络。
异常响应帧的格式如下:
优先级 |
源地址 |
目的地址 |
ACK=1 |
重复位 |
保留 |
分段=0x00 |
0-7个数据 |
ACK=1 表示为响应帧,无需应答。分段码=0x0F 表示本帧为回应错误代码。错误码如下:
错误码 |
描述 |
01 |
功能码不存在 |
02 |
资源不存在 |
03 |
命令不支持 |
04 |
参数非法 |
05 |
操作无效 |
1.3.2 LX_CAN分段帧格式
在LX_CAN命令/响应帧中,最多传送7字节数据,为了实现更多字节数据地传输,LX_CAN协议规范定义了分段传输协议。
1.LX_CAN分段帧格式
“命令帧”格式:
优先级 |
源地址 |
目的地址 |
ACK=0 |
重复位 |
保留 |
分段码 |
0-7个数据 |
“响应帧”格式:
优先级 |
源地址 |
目的地址 |
ACK=1 |
重复位 |
保留 |
分段码 |
0-7个数据 |
LX_CAN 协议使用 CAN 报文数据部分的第 1 字节用于指示分段传输,该字节的格式定义如下:
分段码 |
|||||||
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
Segpolo |
SegNum |
SegPolo 表示分段标志,SegNum 表示分段编号,SegPolo的位定义如下:
DD |
含义 |
00 |
未分段 |
01 |
分段数据第一段 |
10 |
分段数据中间段 |
11 |
分段数据结尾段 |
采用分段传输时,第 1 分段的 SegFlag=0x40,最后的分段 SegFlag=0xC0 值。当报文分段传输时,接收节点(目标节点)只在接收完最后分段后才做出响应。
2.LX_CAN分段传输规则
在传送大于 7 个字节长度的数据时, 需要采用分段传输报文的方法。 当命令报文使用分段传输时,从站在接收完所有的分帧报文后才向主站回送响应报文。