摘要:PDO为生成者消费者模式,消息发出后不需要等待回复,一条消息可以有多个消费者。从站进入操作模式后会按照配置的通讯参数周期发送PDO消息或事件触发发送PDO。如果配置了SYNC功能,收到指定个数的同步帧后发送PDO。当然主站也可发送PDO消息。如下图所示:
CANOpen有两种通讯方式:SDO和PDO。SDO通常由主站发送用于读取从站信息或配置从站PDO运行方式,从站接收到消息后需要应答,如下图所示。
PDO为生成者消费者模式,消息发出后不需要等待回复,一条消息可以有多个消费者。从站进入操作模式后会按照配置的通讯参数周期发送PDO消息或事件触发发送PDO。如果配置了SYNC功能,收到指定个数的同步帧后发送PDO。当然主站也可发送PDO消息。如下图所示:
拨动广成的CANOpen IO设备的拨码开关,将节点号设置为2,波特率设置为10k。如下图所示:
设备上电后会向主站先后发送两条帧ID为0x700+NOD_ID,数据为00(设备处于初始化状态)和7F(设备处于预操作状态)的消息,如下图所示:
此时设备处于预操作状态,在ECAN Tools选择CANOpen选项,点击添加从站ID为2。选择NMT功能选项,选择“start remoteb node”后点击NMT,如下图所示:
此时上位机会发送一条帧ID为000,数据为01(运行状态)02(节点2,如果广播则为00)的数据。此时节点2的IO设备会开始通过PDO(生产者消费者模式)发送帧ID为182,数据长度为2字节的消息,其两字节数据对应16个DI口,若DI有输入对应位置1。注意此功能为广成自定义,并非标准cia301协议。效果如下图所示:
当然使用CAN工具手动发送数据也是一样的效果,如下图所示:
阅读EDS文件可知索引2000h子索引01h可知设置其中的值可以改变TPDO1的inhibit time(禁止时间)。禁止时间的作用是设置PDO发送的最小间隔。这里使用手动发送SOD(一问一答模式)进行演示。
手动发送时将帧ID设置为602(600代表是SDO功能+节点号2),第一个数据2B代表写入两字节。注意后面的数据低字节在前,所以2000h索引写做0020h,写入的数据1FF写做01FF。发送后从站返回帧ID为582数据头为60的一条消息,代表刚才的写入成功。重新进入操作状态后,观察此时的从站发送的PDO数据的时间戳,变为了511us即1FF。但是要注意的是标准的cia301协议中,禁止时间的单位是100us。如何使用SDO读取和写入长度超过4字节的数据见详细文档。
想要配置DO口的输出状态需要从站在操作状态下,主站向从站发送帧ID为0X200+NOD_ID长度为2字节的PDO消息。如下图所示,发送数据为0F 00此时0-3DO口全部打开(低字节在前)。
由于广成的此产品PDO功能不全,接下来用举例子的方式解释如何使用SDO配置PDO功能。刚才说过2000索引01字索引中的数据可以改变DI数据的PDO发送最小间隔,现在假设这个数据是可以映射的。下图是各个TPDO和RPOD的COB-ID、通讯参数、映射参数的数值。
观察上图COB-ID,可知RPDO1被用来读取数据,配置DO口的输出状态,因为刚才就是使用主站控制发送帧ID为202的PDO数据来控制DO口状态的。现在我们使用从站的RPDO2来读取主站发送的帧ID为302的TPDO数据,从而控制从站TPDO1数据(即DI口输入情况)的返回速率。
通讯对象的可配置参数如下图所示,注意RPDO和TPDO的通讯对象可配置的参数范围和意义不完全相同,详情见详细文档和cia301文档。
这里作为简单演示,我们只用修改1401索引01字索引中COB-ID数据,使用SDO的方法将其配置为302。其它子索引中的数据假设合理能正常通讯,其具体含义和作用见详细文档和cia301文档。映射对象1601索引中的数据构成很简单,1601索引00子索引中存放的值代表:除了00子索引外还有多少子索引,有多个子索引的00子索引中存放的值都是这个意义。
由于要修改的数据只有一处,且存放在2000索引01子索引数据为16位,所以只需要使用SDO向1601索引01子索引写入 0x20000110(最后的10代表存放16位数据,如果是08代表8位数据,20代表32位数据)即可,然后向1601 00索引写入01。如果要存入的数据有多个地址继续增加1601的子索引个数,并将00子索引的值改为对应个数即可。但是要注意所以映射索引存储的数据加起来不能超过8字节。
为了系统的稳定性,对通讯对象和映射对象进行修改时,要先使能对应PDO(01子索引最高位置1)和清空映射对象00子索引的值。
602 22 01 14 01 02 03 00 80 (将COB-ID设置为302并失能该PDO)
602 22 01 16 00 00 00 00 00 (情况映射对象个数数据)
602 22 01 16 01 10 01 00 20 (10 格式标识16位,01子索引2000索引)
602 22 01 16 00 01 00 00 00 (1个参数)
602 22 01 14 01 02 03 00 00 (使能PDO)
配置完成后使用上位机发送帧ID为302的PDO信息,从站就会将其存入RPDO2的映射索引2000 01中,从而改变发送DI状态的速率。
打开SYNC功能,主站会按照设置的时间周期性地发送帧ID为80没有数据的信号,该信号可触发从站发送PDO信息,由于此设备PDO功能不全无法演示,具体效果和配置方法见详细文档和cia301文档。
EMCY功能是当从站发送错误时返回的报文,也无法演示。
节点保护服务的原理是NMT主站可向相应的从站发送包含CAN-ID 700h +节点ID的RTR消息。随后从站必须发送消息进行响应;从站回复的消息结构如下。其中位7在每次传送时都会进行交替,从而能够确定消息是否丢失。在位6到0中输入从站当前的NMT状态。如下图所示:
从站等待主站发送RTR消息的时间为100Ch:00(守护时间)*100D:00(生存因素),配置完成后在上位机打开节点保护,效果如下图所示:
如果激活心跳,从站将自发循环地将其NMT状态发送至CAN总线。可通过将对象1017h:00h中的创建心跳时间设为非零值,从而激活该服务。如下图所示,将1017h:00h设置为不为0的数后从站周期性地返回心跳。
来源:亿佰特物联网应用