1、 NMT报文
1.1、NMT模块控制(NMT Module Control)
只有NMT-Master节点能够传送NMT ModuleControl报文。所有从设备必须支持NMT模块控制服务。NMT Module Control消息不需要应答。NMT消息格式如下:
NMT-Master→NMT Slave
当Node-ID=0,则所有的NMT从设备被寻址。CS是命令字,可以取如下值:
1.2、MNT节点保护(NMT Node Guarding)
通过节点保护服务,MNT主节点可以检查每个节点的当前状态,当这些节点没有数据传送时这种服务尤其有意义。
NMT-Master节点发送远程帧(无数据)如下:
NMT-Master→NMT Slave
NMT-Slave节点发送如下报文应答:
NMT Slave→NMT-Master
数据部分包括一个触发位(bit7),触发位必须在每次节点保护应答中交替置“”或者“1”。触发位在第一次节点保护请求时置为“”。位到位6(bits0~6)表示节点状态,可为下表中的数值。
注意:带*号的状态只有支持扩展boot-up的节点才提供。注意状态从不在节点保护应答中出现,因为一个节点在这个状态时并不应答节点保护报文。
或者,一个节点可被配置为产生周期性的被称作心跳报文(Heartbeat)的报文。
HeartbeatProducer→Consumer(s)
状态可为下表种的数值:
当一个Heartbeat节点启动后它的Boot-up报文是其第一个Heartbeat报文。Heartbeat消费者通常是NMT-Master节点,它为每个Heartbeat节点设定一个超时值,当超时发生时采取相应动作。
一个节点不能够同时支持Node Guarding和Heartbeat协议。
1.3、NMT Boot-up
NMT-slave节点发布Boot-up报文通知NMT-Master节点它已经从initialising状态进入pre-operational状态。
NMT Slave→NMT-Master
2、过程数据对象(PDO)
作为一个例子,假定第二个transmit-PDO映射如下(在CANopen中用对象字典索引0x1A01描述):
在CANopen I/O模块的设备子协议(CiA DSP-401)定义中,对象0x6000子索引2是节点的第2组8位数字量输入,对象0x6401子索引0x01是节点的第1组16位模拟量输入。
这个PDO报文如果被发送(可能由输入改变,定时器中断或者远程请求帧等方式触发,和PDO的传输类型相一致,可以在对象0x1801子索引2中查找),则由3字节数据组成,格式如下:
PDO-producer→PDO-consumer(s)
通过改变对象0x1A01的内容,PDO的内容可被改变(如果节点支持(可变PDO映射))。
注意在CANopen中多字节参数总是先发送LSB(little endian)。
不允许超过8个字节的数据映射到某一个PDO中。
在CANopen Application Layer andCommunication Profile(CiA DS 301 V 4.02)中定义了MPDO(multiplexorPDO),允许一个PDO传输大量变量,通过在报文数据字节中包含源或目的节点ID、OD中的索引和子索引来实现。举个例子:如果没有这个机制,当一个节点有64个16位的模拟通道时,就需要16个不同的Transmit-PDOs来传送数据,
3、服务数据对象(SDO)
SDO用来访问一个设备的对象字典。访问者被称作客户(client),对象字典被访问且提供所请求服务的CANopen设备别称作服务器(server)。客户的CAN报文和服务器的应答CAN报文总是包含8字节数据(尽管不是所有的数据字节都一定有意义)。一个客户的请求一定有来自服务器的应答。
SDO有2种传送机制:
◆加速传送(Expedited transfer):最多传输4字节数据
◆分段传送(Segmented transfer):传输数据长度大于4字节
SDO的基本结构如下:
Client→Server /Server→Client
(**最大4字节数据(expeditedtransfer)或4字节字节计数器(segmented transfer)或关于blocktransfer参数)
或者
Client→Server /Server→Client
SDO命令字包含如下信息:
◆下载/上传(Download / upload)
◆请求/应答(Request /response)
◆分段/加速传送(Segmented / expedited transfer)
◆CAN帧数据字节长度
◆用于后续每个分段的交替清零和置位的触发位(toggle bit)
SDO中实现了5个请求/应答协议:启动域下载(Initiate Domain Download),域分段下载(DownloadDomain Segment),启动域上传(Initiate Domain Upload),域分段上传(Upload Domain Segment)和域传送中止(Abort Domain Transfer)。
在CANopen通讯协议的最新版本中,引入了一种新的SDO传送机制:
块传送(Block transfer):当传送数据长度大于4字节时,多个分段只由1个确认报文应答(如果是下载,则由服务器启动传送,如果是上传,则由客户启动传送)以增加总线吞吐量。
相应的协议为:启动块下载(Initiate Block Download),块分段下载(Download Block Segment),块下载结束(End BlockDownload),启动块上传(Initiate Block Upload),块分段上传(UploadBlock Segment)和块上传结束(End Block Upload)。
下载(Download)是指对对象字典进行写操作,上传(Upload)指对对象字典进行读操作。
下面给出几个例子说明如何使用SDO来访问一个节点的对象字典。
使用下面的SDO消息,值0x3FE将写到节点ID为2的对象字典中索引为0x1801,子索引为3的对象中去,使用启动域下载协议,加速传输(2字节数据)
Client→Server (节点#2)
使用下面的SDO消息,同样的对象字典中索引为0x1801,子索引为3的对象将被读出,使用启动域上传协议,服务器使用加速传输方式应答(2字节数据):
Client→Server(节点#2)
4、应急指示对象(EmergencyObject)
应急指示报文由设备内部出现的致命错误触发,由相关应用设备已最高优先级发送到其它设备。适用于中断类型的错误报警信号。
一个应急报文由8字节组成,格式如下:
sender→receiver(s)
6进制的应急错误代码如下表3-5所示。应急错误代码中‘xx’部分由相应的设备子协议定义。
应急错误代码(16进制)
错误寄存器(Error Register)在设备的对象字典(索引0x1001)中,表3-6说明了错误寄存器的位定义。设备可以将内部错误映射到这个状态字节中,并可以快速查看当前错误
制造商特定错误区域可能包含与设备相关的其它的错误信息
领取专属 10元无门槛券
私享最新 技术干货