3.1.1 NMT简介
NMT(Network management)网络管理是CANopen网络中的管理方式,主站通过NMT进行发号施令,保证整个网络的可靠性、可控性。因此每个CANopen从站节点都必须具备NMT惯例的相应代码,这是节点具备CANopen协议的最基本的要素。每个CANopen节点从上电开始有6种状态:
每种状态的含义如下:
初始化(Initializing):节点上电后对功能部件包括 CAN 控制器进行初始化;
应用层复位(Application Reset):节点中的应用程序复位(开始),比如开关量输 出、模拟量输出的初始值
通讯复位(Communication reset):节点中的CANopen通讯复位(开始),从这个时 刻起,此节点就可以进行CANopen通讯了。
预操作状态(Pre-operational):节点的CANopen通讯处于操作就绪状态,此时此节 点不能进行PDO通信,而可以进行SDO进行参数配置和NMT网络管理的操作;
操作状态(operational):节点收到NMT主机发来的启动命令后,CANopen通讯被 激活,PDO通信启动后,按照对象字典里面规定的规则进行传输,同样SDO也可以 对节点进行数据传输和参数修改;
停止状态(Stopped):节点收到NMT主机发来的停止命令后,节点的PDO通信被 停止,但SDO和NMT网络管理依然可以对节点进行操作。
其命令报文总结格式如下:
3.1.2 NMT命令改变IO模块运行状态
IO模块上电后,可以观察到Run指示灯处于闪烁状态,根据思泰提供的设备操作手册,可得知这是处在预操作状态的指示,参考的是CiA 303-3 V1.0子协议。
我们需要发送命令,将模块转换为操作状态后,才能进行下一步的测试操作。在PCAN-view中进行如下操作:
点击创建新消息的按钮后,弹出编辑传输消息的窗口,编辑发送内容后点击OK,即可创建报文,并在Transmit区域中可观察到该报文。其中一些参数含义如下:
在Transmit区域点击该报文,单击空格键后,即可发送该报文:
同时也可观察到Receive区域接收到了一条回应报文,这是IO模块的回应报文,指示IO模块已经切换到操作状态,模块的Run指示灯也变成了常量状态。
3.2.1 PDO简介
PDO协议是CANopen中的一种单向传输方式,用于实时数据传输,其传输形式如下:PDO分为TPDO(发送PDO)和RPDO(接收PDO),一个CANopen站点可以从自身的TPDO发送数据到另一个站点相应的RPDO之中。
CiA 301子协议已经预定义TPDO和RPDO的CAN-ID,如下图所示:
同时每个PDO在对象字典中,都有自己的通信参数描述其通信特性,举例如下图所示:
CiA 301子协议已经预定义每个PDO通信参数的对象字典索引值,上图所示的TPDO1通信参数的对象字典索引为1800h,子索引00h、01h、02h、03h、05h分别代表了不同的含义:
00h,Largest Subindex supported:最大支持的子索引个数;即1800h下有多少个子索引;
01h,COB-ID used by PDO:PDO所使用的COB-IB;
02h,Transmission Type:传输类型,其值可选,详解在下文中进行;
03h,Inhibit Time:生产禁止约束时间,单位:0.1ms;描述该PDO不可以在指定的一段时间内连续发送;
05h,Event timer:事件定时器触发的时间,单位:ms;即计数器,每隔一定时间数值+1,与02h结合,可规定PDO循环发送的时间;
3.2.2 通信测试
创建一条新报文后如下编写报文,其含义为软件向从站的RPDO1发送一条8字节数据域为全1的报文,点击报文后,单击空格,即可进行PDO报文发送:
而由于PDO的单向传输特性,仅从此次PDO传输我们无法得知接受站点是否正确收到PDO数据,只能使用另外的手段(如SDO读取、观察相应IO的行为等)得知数据是否接收到位。
3.3.1 SDO简介
SDO协议是CANopen中的一种双向传输方式,用于非实时数据传输,如配置信息的读写。具体而言又可以分为快速SDO与普通SDO,其区别在于前者能在一次来回传输完所需的信息,后者则需要分段传输所需信息。因为实际应用时几乎用不到普通SDO,所以此处以快速SDO为例,进行操作的示例。
CANopen中规定了SDO传输报文的格式,按照格式填写报文信息,即可进行SDO通信,其部分报文格式总结如下:
3.3.2 通信测试
接下来我们进行SDO读取节点对象字典内容的操作,创建报文后,如下编写报文:
其中查找厂商提供的datasheet,可以得知节点的1000h索引处的内容为设备类型号码:
点击报文,单击空格后,可以在Receive区域接收到返回的报文信息:
可以观察到582h处收到了一条信息为43 00 10 00 91 01 03 00的报文,比对报文格式,可知此次从1000h处读取并返回了4个字节的数据,且数据为00 03 01 91。
如此便完成了一次SDO读对象字典的操作,而有关SDO写对象字典的操作,将在下面几节中提到。
3.4.1 PDO映射参数简介
前面我们简要介绍了PDO传输方式,并通过报文编辑器,实现了主站向从站发送了自己填写的数据。那么问题来了,当并非通过PCAN模拟主站PDO发送,或是从站向主站发送数据时,其报文数据域里携带的是什么数据?这就涉及到了PDO的映射参数。
映射参数与通信参数类似,都是PDO所持有的,描述其自身特性的东西。映射参数的内容,是PDO所发送数据的索引值,如下图所示:
类比C语言,笔者认为映射参数与二重指针的概念十分相似。即映射参数是一个二重指针,其内容(索引值)是一个一重指针(地址),指向了真正要传输的数据。
映射参数的子索引00h,描述的是该映射参数下有效映射的个数,即余下子索引01h~08h有多少个指向的数据能够发送出去,如00h内的值为3,则01h~03h内索引指向的数据能够被该PDO发送,并且数据的排布顺序也是根据子索引的顺序排布。
同时,一条CAN报文的数据域总共只有8字节(64位),因此所有映射参数映射的内容,其总大小不能超过64位。
3.4.2 修改步骤
节点的PDO映射参数修改需要使用SDO写值到节点的对象字典当中,其修改步骤如下:
禁用该PDO的COB-ID→清零映射个数→写映射参数→填写映射个数→使能该COB-ID
我们仍以TPDO1为例,演示如何修改PDO的映射参数。
在禁用/使能COB-ID时,我们还需要提前了解COB-ID的组成和各个位的功能:
valid:0表示PDO存在或有效;1表示PDO不存在或无效;
RTR:0表示此PDO允许RTR;1表示此PDO不允许RTR;
frame:0表示11位CAN-ID有效;1表示29位CAN-ID有效;
CAN-ID:功能码;
在禁用/使能COB-ID时,我们只需使用SDO,将valid的第一位翻转即可。
在PCAN中,编辑如下报文:
报文含义即,向索引1800h 01h处写入4字节数据80 00 01 82 h,数据将valid位置1,禁用了该COB-ID。点击该报文,单击空格发送,PCAN Receive区域582h收到写成功响应,即成功禁用该COB-ID。
在PCAN中,编辑如下报文:
报文含义即,向索引1A00h 00h处写入1字节数据00 h,数据将映射个数置零。点击该报文,单击空格发送,PCAN Receive区域582h收到写成功响应,即成功清零映射个数。
在PCAN中,编辑如下报文:
报文含义即,向索引1A00h 01h处读取数据。点击该报文,单击空格发送,PCAN Receive区域582h收到读成功响应,为4字节数据60 00 01 08 h,即发送数据的索引值为6000h 01h,长度为8位(1字节),结合设备的datasheet,可以了解到该处数据的含义,即模块0~7号输入口的输入情况:
现在我们改为在该TPDO发送8-15号输入口的输入情况,编辑如下报文:
报文含义即,向索引1A01h 01h处写入4字节数据60 00 02 08 h,映射参数改为映射至索引 6000h 02h处的8位数据,即8-15号输入口的输入情况。点击该报文,单击空格发送,PCAN Receive区域582h收到写成功响应,即成功写入。
再次读取该处数据,可观察到映射参数已经改变:
在PCAN中,编辑如下报文:
报文含义即,向索引1A00h 00h处写入1字节数据01 h,数据将映射个数置1。点击该报文,单击空格发送,PCAN Receive区域582h收到写成功响应,即成功将映射个数置1。
在PCAN中,编辑如下报文:
报文含义即,向索引1800h 01h处写入4字节数据80 00 01 82 h,数据将valid位置0,使能了该COB-ID。点击该报文,单击空格发送,PCAN Receive区域582h收到写成功响应,即成功使能该COB-ID。
如此便完成了PDO映射参数的修改,当该设备节点通过该PDO发送数据时,发送的便是修改后的索引值处的数据内容。
3.5.1 PDO传输模式简介
上文简要介绍了PDO通信参数各部分的含义,其中就包含传输模式(Transmission Type)。而关于TPDO传输模式的具体含义,CiA 301中做出了如下的解释:
其含义为,当该值处于:
00 h:非同步传输模式;
01 h~F0 h:参照PDO通信参数下的同步起始值,收到(同步起始值×该值)数量的同步报文后,进行一次传输;
FC h:同步传输模式(远程帧专用);
FD h:事件触发传输模式(远程帧专用);
FE h:事件触发传输模式(制造商特定事件);
FF h:事件触发传输模式(设备子协议CiA 401特定事件);即利用设备自身内部的定时器,定时发送报文。
结合厂商的datasheet,该IO模块没有子索引06h,即同步设定值,因此只能进行事件触发的循环通信测试。
3.5.2操作步骤
执行TPDO事件驱动循环传输测试的操作步骤如下:
禁用该COB-ID→写传输模式、驱动时间→启用该COB-ID
使能/禁用COB-ID的操作与上文相同,在此不再赘述。
在PCAN中,编辑如下报文:
报文含义即,向索引1800h 02h处写入1字节数据FF h,将TPDO1的传输模式改变为事件触发模式; 向索引1800h 05h处写入2字节数据10 00h,设定定时器触发时间为256ms,即每隔256ms传输一次报文。
使能该COB-ID后,即可观察到数据以256ms左右的间隔(存在抖动)源源不断地输送至182h处:
关于虹科:
虹科是一家在工业自动化领域,特别是工业总线通讯行业经验超过10年的高科技公司。虹科工业通讯事业部与世界知名的工业通讯专家【PEAK-System,Hilscher,Kunbus,SYS TEC,Koenig-Pa,Port,Copa-data,TenAsys,SoC-e、RELYUM】等深度合作,提供业内顶尖水平的工业总线协议软硬件解决方案,协议类型包含【CAN、CANopen、EtherCAT、Profibus、Profinet、Ethernet/IP、TSN】等,产品类型包含代码、软件、芯片、板卡、模块等。虹科工业通讯以客户需求为导向,以技术能力为基础,为国内企业提供最适合的产品和最满意的服务。特别是在工业4.0的大环境下,虹科工业通讯与时俱进,推出了TSN(时间敏感网络)的解决方案,后者将在推动万物互联的潮流中扮演着如高速公路般的连接作用。
如果你想获取更多详细的技术资料请联系:[email protected]或者关注公众号(FieldBus-Hongke)
若需要更多帮助,欢迎联系我们。
作者:虹科工业通讯---梁桦圳
排版:虹科工业通讯---黄怡