网络管理(NMT)
NMT管理涉及到一个CANopen节点从上电开始的6种状态:
初始化:节点上电后,对功能部件包括CAN控制器进行初始化;
应用层复位:节点中的应用程序复位(开始),比如开关量输出,模拟量输出的初始值;
通讯复位:节点中的CANopen通讯复位(开始),从这个时刻起,此节点就可以进行CANopen通讯了。
预操作状态:节点的CANopen通讯处于操作就绪状态,此时此节点不能进行PDO通信,而可以进行SDO,进行SDO参数配置以及NMT网络管理操作。
操作状态:节点收到NMT主机发来的启动命令后,CANopen通讯被激活。PDO通信启动后,按照对象字典里面规定的规则进行传输,同样SDO也可以对节点进行数据传输和参数修改。
停止状态:节点收到NMT主机发来的停止命令后,节点的PDO通信被停止,但SDO和NMT网络管理依然可以对节点进行操作。
NMT节点状态切换命令
格式:CANID------》000h,具备最高的CAN优先级。数据为2个字节
第一个字节------》命令类型
01h为启动命令(让节点进入操作状态)
02h为停止命令(让节点进入停止状态)
80h为进入预操作状态(让节点进入预操作状态)
81h为复位节点应用层(让节点的应用恢复初始状态,比如列车车门都恢复打开状态)
82h为复位节点通讯(让节点的CAN 和CANopen通讯重新初始化,一般用于总线受到干扰,导致节点总线错误,或者总线关闭)
第二个字节-------》被控制的节点Node-ID
如果要对整个网络所有节点同时进行控制,则这个数值为0即可。
过程数据对象PDO(Process data object)
PDO属于过程数据,用来传输实时数据,即单向传输,无需接收节点回应CAN报文来确认,从通信术语上来说是属于“生产消费”模型。
PDO的CAN-ID(COB-ID)范围
PDO通信比较灵活,广义上只要符合PDO范围内的所有CANID都可以作为节点自身的TPDO或者RPDO使用,也称为COB-ID,不受功能码和Node-ID限制。
PDO传输形式
同步传输
通过同步报文让所有节点能在同一时刻进行上传数据或者执行下达的应用指令。
周期传输:通过接收同步对象(SYNC)来实现,可以设置1~240个同步对象触发。
非周期传输:由远程帧预测触发或者由设备子协议中规定的特定事件预触发传送。
异步传输(由特定事件触发,目前均采用第一种)
第一种:由设备子协议中规定的对象特定事件来触发。
第二种:通过发送与PDO的COB-ID相同的远程帧来触发PDO的发送。
PDO的通信参数
定义了该设备所使用的COB-ID、传输类型和定时周期等。RPDO通讯参数位于对象字典索引的1400h to 15FFh,TPDO通信参数位于对象字典索引的1800h to 19FFh。
PDO的映射参数
RPDO通信参数1400h to 15FFh,映射参数1600h to 17FFh,数据存放在2000h 之后厂商自定义区域;TPDO通讯参数1800h to 19FFh,映射参数1A00h to 1BFFh,数据存放在2000h之后厂商定义区域。
服务数据对象SDO(Service data object)
SDO主要用于CANopen主站对从节点的参数配置,服务确认是SDO最大的特点,为每一个消息都生成一个应答,确保数据传输的准确性。在一个CANopen系统中,通常CANopen从节点作为SDO服务器,CANopen主节点作为客户端(称为CS通讯)。
通讯原则
发送方(客户端)发送CAN-ID为600h + Node-ID的报文,其中Node-ID为接收方(服务器)的节点地址,数据长度均未8字节
接收方(服务器)成功接收后,回应CAN-ID为580h+Node-ID的报文。这里的Node-ID依然是接收方(服务器)的节点地址,数据长度均为8字节。
快速SDO协议
所谓快速就是1次来回搞定,前提是读取和写入的值不能大于32位。命令中直接包含了要读写的索引、子索引、数据。
CS命令符:
写命令符
2Fh:写一个字节
2Bh:写两个字节
27h:写三个字节
23h:写四个字节
60h:写成功应答
读命令符
40h:读取
4Fh:读响应一个字节
4Bh:读响应两个字节
47h:读响应三个字节
43h:读响应四个字节
80h错误响应
普通SDO协议
同步协议
同步(SYNC),该报文对象主要实现整个网络的同步传输。每个节点都以该同步报文作为PDO触发参数,因此该同步报文的COB-ID具有比较高的优先级以及最短的传输时间。一般选用80h作为同步报文的CAN-ID。
约束条件
同步窗口时间:索引1007h约束了同步帧发送后,从节点发送PDO的时效,即在这个时间内发送的PDO才有效,超过时间的PDO将被丢弃。
通信循环周期:索引1006h规定了同步帧的循环周期。
时间戳协议应答
时间戳协议采用广播方式,无需节点,CAN-ID为100h,数据长度为6,数据为当前时刻与1984年1月1日0时的时间差。节点收到后,将此时间存储到对象字典1012h的索引中。
紧急报文协议
紧急事件对象(Emergency),是当设备内部发送错误,触发该对象,发送设备内部错误代码,提示NMT主站。紧急报文属于诊断性报文,一般不会影响CANopen通信,其CAN-ID存储在1014h的索引中,一般会定义为080h+node-ID,数据包含8个字节。
与PDO的生产禁止时间类似,紧急报文也有生产禁止时间,存储在对象字典的1015h中,为了限制节点不断发送紧急报文,导致总线负载过大。