一、can和canopen介绍
can(controller area network)通讯以其高效率高稳定的特性,被广泛应用在汽车电子、工业自动化以及物联网通讯系统中。canopen是基于can的通讯子协议,是一种为用于产品部件内部网络通讯而开发的系统。其子协议cia401,规范了数字量输入、数字量输出和模拟量采集相关的使用方法。智嵌物联zqwl研发的带有can通讯接口的采集控制终端模块均实现了canopen cia401协议,可以非常方便的接入现有的can控制网络系统,缩短了开发周期,节省了开发费用。本文以智嵌物联zqwl所研发的产品zqwl-io-1dara8a为例,介绍canopen如何在智嵌物联can产品中应用的。
先准备好产品1dara8和usb-can调试器(zqwl-ucan-5c111):
该模块支持标准的canopen(cia401)协议,用户通过简单配置后可以直接将其接入canopen通讯网络或替代原有的canopen设备。模块主要功能包括:
●1个tpdo,用于传送开关量输入状态(di)。
●1个rpdo,用于接收开关量输出状态(do)。
●nmt服务器功能,处理nmt主机发来的命令。
●sdo功能,配置和读取canopen字典。
●di极性控制、全局中断控制、单个di中断控制以及di的电平触发方式控制(任意变化触发、low to high触发或者high to low触发)。
●do极性控制;设备故障或收到stop命令后的do状态可配置。
●can波特率可配置。
●保存整部对象字典到flash和恢复整部对象字典到出厂值。
canopen的cia401设备子协议详细描述了对象字典的定义以及功能,该模块实现了di/do部分,模块的对象字典如下表:
索引
index
子索引
subindex
名称
name
类型
type
属性
attr.
默认值
default
说明
description
1000 0 设备类型 u32 ro 0x00030191 支持cia401的di和do
1003 0 errors register u8 ro 0 错误寄存器
1005 0 sync cob-id u32 rw 0 同步报文cob-id
1006 0 sync period u32 rw 0 同步周期
1008 0 manufacturer string ro zqwl 制造商
1009 0 hard version string ro v3.0 硬件版本
100a 0 soft version string ro v3.0 软件版本
1010 0 num of subindex u8 ro 1 子索引数目
1 save all od u32 w 0x65766173 保存整部对象字典;读时,返回0x00000001
1011 0 num of subindex u8 ro 1 子索引数目
1 default all od u32 w 0x64616f6c 恢复整部对象字典;读时,返回0x00000001
1014 0 emnc cob-id u32 rw 0x80 紧急报文cob-id
1017 0 heart beat timer u16 rw 0x0bb8 心跳包周期,单位ms
1018
0 num of subindex u8 ro 4 制造商信息
1 manufacturer id u32 ro - 制造商id
2 product code u32 ro - 产品代码
3 revision number u32 ro - 修订号
4 serial number u32 ro - 序列号
1200
0 num of subindex u8 ro 2 sdo服务器信息
1 sdo rx cob-id u32 ro 0x0600+node id sdo接收cob-id
2 sdo tx cob-id u32 ro 0x0580+node id sdo发送cob-id
1400
0 num of subindex u8 ro 6 rpdo1通讯参数
1 rpdo1 cob-id u32 ro rpdo1 cob-id
2 transmission type u8 rw 0xff 通讯类型
3 inhibit time u16 rw 0 抑制时间
4 -- -- -- -- 保留
5 event timer u16 rw 0 时间定时器
6 sync start value u8 rw 0 同步初始值
1401-
15ff
0
rpdox禁用
1600 0 num of subindex u8 ro 1 rpdo1映射参数
1 rpdo1 mapping u8 ro 0x62000108 映射地址
1800
0 num of subindex u8 ro 6 tpdo1通讯参数
1 tpdo1 cob-id u32 ro tpdo1 cob-id
2 transmission type u8 rw 0xff 通讯类型
3 inhibit time u16 rw 0 抑制时间
4 -- -- -- -- 保留
5 event timer u16 rw 0 时间定时器
6 sync start value u8 rw 0 同步初始值
1801-
19ff
0
tpdox 禁用
1a00 0 num of subindex u8 ro 1 tpdo1映射参数
1 tpdo1 mapping u8 ro 0x60000108 映射地址
2000
0 num of subindex u8 ro 3 设备唯一序列号
1 serial id1 u32 ro - 序列号1
2 serial id2 u32 ro - 序列号2
3 serial id3 u32 ro - 序列号3
2001 0 num of subindex u8 ro 1 can波特率寄存器
1 can baud u8 rw 0 见can波特率对应表
6000 0 num of subindex u8 ro 1 di状态信息
1 di status u8 rw 0x00 di状态寄存器
6002 0 num of subindex u8 ro 1 di极性信息
1 di polarity u8 rw 0x00 di极性寄存器
6005 0 num of subindex u8 ro 1 di全局中断使能
1 di global interrupt bool rw true(1) di全局中断使能
6006 0 num of subindex u8 ro 1 di 任意变化中断使能
1 di any change interrupt u8 rw 0xff di 任意变化中断使能
6007 0 num of subindex u8 ro 1 di 由低到高中断使能
1 di low to high interrupt u8 rw 0x00 di 由低到高中断使能
6007 0 num of subindex u8 ro 1 di 由高到低中断使能
1 di high to low interrupt u8 rw 0x00 di 由高到低中断使能
6200 0 num of subindex u8 ro 1 do状态信息
1 do status u8 rw 0x00 do状态寄存器
6202 0 num of subindex u8 ro 1 do极性控制
1 do polarity u8 rw 0x00 do极性控制
6206 0 num of subindex u8 ro 1 do错误模式使能
1 do error mode u8 rw 0xff do错误模式使能
6207 0 num of subindex u8 ro 1 do错误模式状态值
1 do error value u8 rw 0x00 do错误模式状态值
注意下文所有的测试条件为:node id为1;can波特率以及对象字典均为默认值。
二、boot up和心跳包测试
模块上电会发出一个boot up报文:id为701 数据为 00。
该模块默认心跳时间为0x0bb8(3000ms)。模块上电后发送心跳报文如下(采用我司生产的usb-can调试器):
注意,上述修改后参数,参数并未保存到flash中,模块掉电或复位后心跳包时间仍然是原来的数值。如果用户想保存到flash中,可以利用索引1010,具体操作方法参见下文。
三、nmt命令测试
模块内置nmt服务器功能,可以根据nmt指令切换工作状态,模块上电初始化成功后自动进入到预操作模式(preoperational),这时模块会发送数据为7f、can id为701的心跳报文,如上节所述。
按照nmt命令规范,演示如下:
①进入操作模式(operational)
发送can id为00,数据为01 01 的报文:
模块进入到stop模式,心跳包数据变为04,如上图。进入stop模式时,继电器输出状态可以通过索引6206和6207共同确定,具体可参考下文。
③复位命令
发送can id为00,数据为81 01 的报文:
模块复位,发一条boot up报文;心跳包数据变为7f,模块自动进入预操作模式(preoperational),如上图。
其他模式的切换参考标准canopen通讯协议。
四、do输出命令测试
模块通过rpdo1接收数据,来控制do的输出,根据rpdo1的通讯参数可知,对端的cob-id为0x0200+node id,即0x0201。可以通过发can id为0x0201、数据长度为1字节的标准帧来控制do的状态,注意模块只有在操作模式下时该指令有效。其中1字节的数据和继电器对应关系为:
do继电器输出和数据bit对应关系
bit 7 6 5 4 3 2 1 0
do do-8 do-7 do-6 do-5 do-4 do-3 do-2 do-1
例如打开第一个继电器do,可以发送如下数据:
can帧id:0x0201;
can数据:0x01;
bit位值的含义:0为正逻辑;0为反逻辑。
索引6202(子索引01)默认值为0x00,全部为正逻辑。用户可以通过sdo命令修改do输出极性对象6202的值,来改变输出极性,如改成0xff,那么,模块收到上述数据后,将第一路继电器关闭,其余路打开。
当然也可以用sdo命令读取对象索引6200,子索引01来获取do的状态。
五、di默认参数测试
模块通过tpdo1发送di开关量输入的状态。是否触发tpdo1的发送,由以下条件决定:
①tpdo1的通讯参数配置(索引1800);
②di全局中断配置(索引6005,子索引01);
③di中断触发方式(索引6006/6007/6008);
④模块当前的工作模式;
先看第一个条件,根据对象字典的默认配置可知,rpdo1的默认通讯参数为:
tpdo1的cob-id为0x0180+node id(索引1800,子索引01),即0x0181;
tpdo1的通讯类型为0xff(索引1800,子索引02),即为事件触发模式;
tpdo1的抑制时间为0x00(索引1800,子索引03),即不抑制;
tpdo1的事件定时器为0x00(索引1800,子索引05),即不启用;
所以第一个条件即为开关量事件触发。
再看第二个条件,根据对象字典的默认配置可知,di全局中断为ture,即打开状态。
再看第三个条件,根据对象字典的默认配置可知,di中断触发方式中,di_any_change(索引6006,子索引01)的值为0xff;low_to_high(索引6007,子索引01)的值为0x00;how_to_ligh(索引6008,子索引01)的值为0x00;
再看第四个条件,只有模块在操作模式下时才能触发tpdo1。
由以上配置可知,在操作模式下,di有任意变化时,就会触发中断。
di的状态值在索引6000的对象中保存,di输入的极性在索引6002的对象中保存,下图为tpdo1的触发逻辑关系:
其中索引6003对象为禁止状态,即不对di做滤波处理,因为读取硬件输入状态时已经做了延时消抖动处理。
tpdo1的数据(索引6000,子索引01)为1个字节,其和di对应关系为
di开关量输入和数据bit对应关系
bit 7 6 5 4 3 2 1 0
di di-8 di-7 di-6 di-5 di-4 di-3 di-2 di-1
di极性控制(索引6002子索引01)与di的关系:
do开关量输入极性和对象索引6002数据bit对应关系
bit 7 6 5 4 3 2 1 0
di di-8 di-7 di-6 di-5 di-4 di-3 di-2 di-1
在默认参数条件下,di有变化时,模块输出如下:
上图,序号000001为第一路di有触发(有低电平变成了高电平);
序号000004为第一路di有触发(有高电平变成了低电平)。
当然也可以用sdo命令读取对象索引6000,子索引01来获取di的状态。
六、di定时上传设置测试
可以通过sdo命令写通讯参数对象中的事件定时器(索引1800,子索引05)来实现di状态的定时上传,例如将该对象写0x00c8(200)ms:
发送can帧id为0x0601,数据为:2b 00 18 05 c8 00 00 00
模块收到后,将按照200ms上传一次(触发tpdo1)。
也可以用同样的方式设置tpdo1的抑制时间。
七、di同步上传设置测试
可以通过sdo命令写通讯参数对象中的通讯类型(索引1800,子索引02)和对象子索引1005(同步cob-id)来实现di状态的同步上传,注意通讯类型的值value必须为1~240(十进制),其含义是模块收到value个同步帧时就触发一次tpdo1,例如value设为0x01:
发送can帧id为0x0601,数据为:2f 00 18 02 01 00 00 00
八、对象字典的恢复出厂测试
模块可以用过sdo命令操作索引1011对象来实现对整部对象字典的恢复出厂。
目前仅支持恢复整部对象字典功能。
发送:can帧id为0x0601,数据为:23 11 10 01 64 61 6f 6c;模块收到后,将整部对象字典恢复到出厂默认参数:
讯维车载应急指挥系统助力打造现代化应急机动指挥平台!
AI视觉+汽车“遍地开花”
关于特斯拉的那些事这可能是离真相最近的一篇吧
微软暂缓LinkedIn上云项目,转向自建数据中心投资
极海APM32A407车规级MCU倒车雷达记录仪应用方案
CANopen协议在智嵌物联ZQWL采集控制终端产品中的应用
西班牙电信发布网络AI架构与Fast OSS架构,建立自身的AI用例开发
自动驾驶架构在不断演化下提出算法新需求
基于机器学习的城市电梯困人故障原因预测方法研究
HRB W2~20W系列模块电源的详细介绍
电容器充电器的制作教程
详解计算机缓存Cache以及Cache Line
5G智慧医疗未来的发展会是怎样的
制造行业应该怎样从生成式AI这项新兴技术中获益呢?
工业相机编程模型和流程及SDK接口使用
在STM32平台上实现基于汽车音频总线的解决方案
区域水稻田土壤-作物系统重金属污染高光谱遥感定量估测
中频炉有源滤波器怎么选择
硅基量子点激光器与硅波导单片集成进展
全球芯片供不应求问题或将延续到2022年