设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
控制专题
›
『数控/电机控制/运动控制/工业总线』
›
CANopen 基本原理及其应用(四)——CANopen报文语法 ...
返回列表
发新帖
CANopen 基本原理及其应用(四)——CANopen报文语法
[复制链接]
74967
|
0
|
2024-1-9 09:19:02
|
显示全部楼层
|
阅读模式
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),触发位必须在每次节点保护应答中交替置“0”或者“1”。触发位在第一次节点保护请求时置为“0”。位0到位6(bits0~6)表示节点状态,可为下表中的数值。
注意:带*号的状态只有支持扩展boot-up的节点才提供。注意状态0从不在节点保护应答中出现,因为一个节点在这个状态时并不应答节点保护报文。
或者,一个节点可被配置为产生周期性的被称作心跳报文(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说明了错误寄存器的位定义。设备可以将内部错误映射到这个状态字节中,并可以快速查看当前错误
制造商特定错误区域可能包含与设备相关的其它的错误信息
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
asdf1982
回复楼主
返回列表
『数控/电机控制/运动控制/工业总线』
『机器视觉/AI/IoT/机器人论坛』
『高级语言/组态软件/触摸屏』
『操作系统xp/xin7/win10/linux』