首页 >> 新闻中心 >> 公司新闻 >>CANopen协议在智嵌物联采集控制终端产品中的应用

CANopen协议在智嵌物联采集控制终端产品中的应用

一、CANCANopen介绍

CAN(Controller Area Network)通讯以其高效率高稳定的特性,被广泛应用在汽车电子、工业自动化以及物联网通讯系统中。CANopen是基于CAN的通讯子协议,是一种为用于产品部件内部网络通讯而开发的系统。其子协议CiA401,规范了数字量输入、数字量输出和模拟量采集相关的使用方法。智嵌物联ZQWL研发的带有CAN通讯接口的采集控制终端模块均实现了CANopen CiA401协议,可以非常方便的接入现有的CAN控制网络系统,缩短了开发周期,节省了开发费用。本文以智嵌物联ZQWL所研发的产品ZQWL-IO-1DARA8A为例,介绍CANopen如何在智嵌物联CAN产品中应用的。

先准备好产品1DARA8USB-CAN调试器(ZQWL-UCAN-5C111:

该模块支持标准的CANopenCiA401)协议,用户通过简单配置后可以直接将其接入CANopen通讯网络或替代原有的CANopen设备。模块主要功能包括:

1TPDO,用于传送开关量输入状态(DI)。

1RPDO,用于接收开关量输出状态(DO)。

NMT服务器功能,处理NMT主机发来的命令。

SDO功能,配置和读取CANopen字典。

DI极性控制、全局中断控制、单个DI中断控制以及DI的电平触发方式控制(任意变化触发、Low to High触发或者High to Low触发)。

DO极性控制;设备故障或收到stop命令后的DO状态可配置。

CAN波特率可配置。

保存整部对象字典到flash和恢复整部对象字典到出厂值。

CANopenCiA401设备子协议详细描述了对象字典的定义以及功能,该模块实现了DI/DO部分,模块的对象字典如下表:


索引

Index

子索引

Subindex

名称

name

类型

Type

属性

Attr.

默认值

default

说明

description

1000

0

设备类型

u32

RO

0x00030191 

支持CiA401DIDO

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 ID1CAN波特率以及对象字典均为默认值。

二、Boot up和心跳包测

模块上电会发出一个Boot up报文:id701 数据为 00

该模块默认心跳时间为0X0BB8(3000ms)。模块上电后发送心跳报文如下(采用我司生产的usb-can调试器):


注意,上述修改后参数,参数并未保存到flash中,模块掉电或复位后心跳包时间仍然是原来的数值。如果用户想保存到flash中,可以利用索引1010,具体操作方法参见下文。

三、NMT命令测试

模块内置NMT服务器功能,可以根据NMT指令切换工作状态,模块上电初始化成功后自动进入到预操作模式(PreOperational),这时模块会发送数据为7fCAN id701的心跳报文,如上节所述。

按照NMT命令规范,演示如下:

进入操作模式(Operational

发送can id00,数据为01 01 的报文:

模块进入到stop模式,心跳包数据变为04,如上图。进入stop模式时,继电器输出状态可以通过索引62066207共同确定,具体可参考下文。

复位命令

发送can id00,数据为81 01 的报文:

模块复位,发一条Boot up报文;心跳包数据变为7f,模块自动进入预操作模式(PreOperational),如上图。

其他模式的切换参考标准CANopen通讯协议。

四、DO输出命令测

模块通过RPDO1接收数据,来控制DO的输出,根据RPDO1的通讯参数可知,对端的COB-ID0x0200+Node ID,即0x0201。可以通过发can id0x0201、数据长度为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,可以发送如下数据:

CANID:0x0201;

CAN数据:0x01;

索引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的默认通讯参数为:

TPDO1COB-ID0x0180+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)的值为0xFFLow_to_High(索引6007,子索引01)的值为0x00How_to_Ligh(索引6008,子索引01)的值为0x00

再看第四个条件,只有模块在操作模式下时才能触发TPDO1

由以上配置可知,在操作模式下,DI有任意变化时,就会触发中断。

DI的状态值在索引6000的对象中保存,DI输入的极性在索引6002的对象中保存,下图为TPDO1的触发逻辑关系:

    其中索引6003对象为禁止状态,即不对DI做滤波处理,因为读取硬件输入状态时已经做了延时消抖动处理。

        TPDO1的数据(索引6000,子索引01)1个字节,其和DI对应关系为

                DI极性控制(索引6002子索引01)与DI的关系:   

    在默认参数条件下,DI有变化时,模块输出如下:



  • 133 1087 6102

关于我们

网站地图粤ICP备16010445号-3
版权所有 深圳智嵌物联网电子技术有限公司 Copyright © 2022 JSST All Rights Reserved