摘要:
本文首先基于CANopen高层协议,分析CANopen设备模型和CANopen应用系统,并描述基于HMI的CANopen系统,最后,通过组态软件CAN驱动,实现CANopen设备的人机界面接入。文章以人机界面为核心,描述HMI系统现场总线设备数据采集模型,分析HMI系统关注的CANopen协议的内容,阐述了符合CANopen通信协议的设备在现场总线上的应用,并给出了具体的应用模型。
1. 系统概述
组态软件建立工业自动化领域的各种标准之上的,详细架构请见图1.1。
nload=resizeObj(this);>
HMI(Human Machine Interface)系统已经成为工业现场的一类应用核心。软硬一体,符合工业标准。
通过组态软件驱动接口,组态软件采集现场总线设备的数据,将现场数据转给组态软件实时数据库,并通过标准控件显示数据信息,通过标准存盘接口完成历史存储,以及其他功能,比如报警、逻辑、用户管理等,最后,通过实时数据库和组态驱动接口,还可以实现总线系统中PLC、智能仪表和其他总线设备的控制。
在系统中,现场总线设备是信息的源头,连接采集传感器信号,并参与控制执行单元,比如通过输入部分,采集温湿度、高度信号等模拟量采集(AI)和开关量输入(DI)信号;通过计算和控制部分,实现数据转换、报警判断等计算和逻辑控制;最后,经由输出部分,通过电压和电流的模拟量输出(AO)和开关量输出(DO)执行控制结果。
nload=resizeObj(this);>
图1.2形象的描述了现场总线设备内部构造。工业自动化领域设备内部结构有规律可循,并可以标准化,为现场总线高层协议设备模型的标准化提供了事实依据和保障。
2. CANopen设备
2.1. CANopen协议
nload=resizeObj(this);>
图2.1[1] CAN、CANopen标准在OSI网络模型中的关系框图
CANopen协议是CiA(CAN-in-Automation)组织定义的标准之一。CANopen协议已得到广泛的认可,并成为CAN总线在工业自动化领域的主导标准。
基于OSI通讯模型,CAN总线协议仅仅定义了物理层和数据链路层标准,而CANopen协议是在CAN2.0A协议基础上的应用层协议。
通过图2.1,我们可以清楚地看到CANopen协议和CAN协议的关系。也可以说,CAN协议是固化在CAN控制器芯片中的,比如我们选用飞利浦SJA1000CAN控制器,则CAN标准协议已经在控制器中实例化或固化;CANopen协议是应用层协议,也就是需要我们在软件编程实现。
所以,CANopen协议也体现了总线设备在应用软件中的映射关系或设备轮廓描述(Device Profile)。
2.2. CANopen设备模型
现场总线的作用就是将接近执行层面总线设备的信息发送给总线系统的管理层面主站系统。CAN协议决定了CAN总线支持多主的通讯方式,使上层系统可以更多种的方式获取总线设备的信息。基于CAN2.0A协议,CANopen协议定义了工业自动化领域的总线设备模型,明确了总线网络的管理,定义了总线设备内的各种信息对象,而且规定了设备设置的具体方法。
根据自动化现场的要求,CANopen设备下面接入信号I/O,采集现场数据,上部连接CAN总线,向高层传送设备信息。CANopen协议为总线设备定义了应用程序软件、对象字典和CAN-bus通讯,如图2.2说明了三者间的关系。
nload=resizeObj(this);>
图2.2 [1] CANopen设备模型中应用软件、对象字典和通讯部分的关系图
Communication Interface(通信接口):
提供CAN总线上收发数据报文的服务。规定了四类CANopen数据报文:管理报文(Administrative message:包括LMT、NMT和DBT服务报文)、SDO(Service Data Object:设备配置相关,优先级较低的报文)、PDO(Process Data Object:8字节数据快速传送报文)和特殊报文(Predefined messages or Special Function Objects:包括SYNC、Time Stamp等报文)。设备间的通信都是通过交换通信对象完成的。
CANopen Object Directory(对象字典):
对象字典描述设备的各项参数和其网络性能,以特定的方式描述总线设备包含的报文对象(过程数据对象PDO或配置服务数据对象SDO),从而实现了设备的功能性描述。这些对象通过一个16位的索引和一个附加的8位子索引来访问。对象字典位于CAN总线设备通信部分和应用部分之间,向应用程序提供接口,应用程序对对象字典进行操作就可以实现CANopen通信。
Application(应用程序):
应用程序部分由用户编写或者配置,包括功能部分和通信部分。通信部分通过对对象字典进行操作实现CANopen通信,而功能部分由用户根据应用要求实现。比如CAN控制器,应用程序部分则为过程控制或数据处理逻辑,需要用户编写。
各个厂家提供的CANopen设备都必须遵循协议的标准,我们查找设备厂家提供的资料或技术手册的时候,都可以找到类似Beckhoff公司的总线设备描述(参见图2.3)。
nload=resizeObj(this);>
图2.3 [1] Beckhoff公司CANopen设备描述
2.3. CANopen系统应用
CANopen协议应用可以分为下面2个层面:
操作应用层面:现场操作人员、现场设备检查人员等关注,关注可控性、易操作性和操作效率。
目标:监测控制,生产操作。 特点:关注CANopen协议的相关内容。
系统设置层面:系统集成技术人员、设备维护和改造人员等关注,通过最佳的方案,实现应用系统。
目标:工程实施、系统集成。 特点:关注CANopen协议整体。
nload=resizeObj(this);>
从操作应用层面看,技术操作人员主要是通过已经形成的生产线,依靠CANopen系统完成既定的生产工作,也就是通过采集的信号的内容展示和分析结果,关注的是通过设备完成的生产操作。也就是,操作人员关注通过正确的操作方法,顺利完成生产任务。这个层面的用户是人机界面系统的最终使用者。工业人机界面系统的设计必须考虑这个层面应用的需求。
如图2.4所示,现场总线系统中,人机界面部分往往是体现操作应用层面。
从系统设置层面看,技术人员要对现场设备进行装配、设置,甚至编程。技术人员可以根据设备的说明文档,依据现场工程的需求,进行装配和设置。一般来说,每种设备都有测试或者配置软件,尤其逻辑控制设备,都配置编程软件,比如PLC,CANopen设备也是如此!首先,这些软件都已经非常成熟,然后,编程通讯往往有很多不开放的技术,所以,我们必须借助于设备厂商提供的软件。这个层面的技术人员工作,往往是针对确定的I/O部分,依照明确的工艺需求,进行设备组态、系统集成等工作,关注系统集成部分,也就是根据操作应用层面的具体需求进行系统集成。
如图2.4所示,现场总线系统中,编码调试设备和软件往往体现系统设置层面。
对于人机界面的组态,我们主要是考虑操作应用层面的需求,也就是关注I/O状态、控制有关的参数设置、运行结果的记录等。这些为基于HMI的现场总线控制平台的协议通讯模式的实现提供了依据。
HMI组态关注的数据对象主要是过程数据对象(PDO)用于在CANopen节点间传送过程数据,如I/O模块的I/O状态的读取和设定、模拟量采集和模拟量输出等等。
Node节点-->HMI平台(TxPDO:发送过程数据对象)
Node节点<--HMI平台(RxPDO:接收过程数据对象)
系统配置关注的数据对象主要是服务数据对象(SDO:Server Data Object)服务用于读写节点的对象字典(Object Dictionary)用来在设备之间传输大的低优先级数据,实现信息的下载/上传、请求/应答、分段/加速传送等操作,用来配置CANopen网络上的设备。
其他的数据对象,比如管理报文、预定义报文、特殊报文,系统配置时,一般会使用。而根据控制工艺,在操作应用层面,较少使用这些数据对象。
2.4. CANopen标识符和数据对象
为了减少简单网络的组态工作量,CANopen定义了强制性的缺省标识符(CAN-ID)分配表。这些标志符在预操作状态下可用,通过动态分配还可修改他们。CANopen设备必须向它所支持的通讯对象的提供相应的标识符。
缺省ID分配表是基于11位CAN-ID,包含一个4位的功能码部分和一个7位的节点ID(Node-ID)部分。如图4所示。
nload=resizeObj(this);>
图2.5 [1] PDO数据对象11位ID的预定义格式
Node-ID:对应CANopen设备,由系统集成商定义,例如通过设备上的拨码开关设置。Node-ID范围是1~127(0不允许被使用)。
Function Code:确定CAN帧的类型,比如:PDO 和SDO:对应CANopen设备的寄存器。在CANopen设备中,常用的PDO为0x180+Node-ID。其中0x180就是指Functon Code。SDO 是用来在设备之间传输大的低优先级数据的服务数据对象,典型的功能是配置CANopen网络上的设备。
比如,PDO 用来传输8字节或更少数据,没有其它协议预设定(意味着数据内容已预先定义)。 比如:某倾角传感器上传的为7个字符,因此它有8个PDO数据需要传到现场总线上。标识符的格式为TPDO=0x180+NODE_ID,因此发送的PDO可以表示为表3.1的描述。
nload=resizeObj(this);>
表3.1 CANopen设备的PDO
3. 组态软件通讯
3.1. PC-based的CAN总线接入
组态软件与硬件设备组成的CAN总线系统,详细组成请见图3.1。
nload=resizeObj(this);>
图3.1 CAN总线系统
3.2. 基于HMI的CANopen系统描述
1)、简单系统:HMI + CANopen模块。
人机界面产品可以直接连接CAN从站模块,如图3.2所示。CAN从站模块主要是I/O模块,可以采集模拟量I/O数据或者控制数字量I/O,并通过总线方式扩展。比如,带CAN接口的HMI设备HMITECH TPC-CAN,直接连接芬兰Axiomatic单轴和双轴倾角传感器。
nload=resizeObj(this);>
人机界面产品也可以直接连接CAN主站模块,如图3.3所示。CAN主站模块可以是现场总线通讯的可编程控制器,可以扩展直接I/O模块,也可以连接控制总线扩展模块。比如,HMITECH TPC-CAN连接EPEC 2020控制模块。
nload=resizeObj(this);>
2)、复杂系统:HMI系统+CANopen站模块+诊断和配置节点。
HMI主要完成CANopen系统监视和存储、分析功能。人机界面的优势是友好的人机交互。所以,同人机交互相关的CAN系统信息界面显示、总线数据存储、数据的初步分析等是CAN系统中人机界面所关注的重点。
nload=resizeObj(this);>
CAN主站控制器注重实时性,HMI系统注重友好显示和数据存储。虽然,CAN主站控制器的逻辑也可以部分转移到HMI系统,但是,我们还是建议客户根据控制工艺的要求,慎重考虑,合理的配置系统。
4. 组态软件CAN驱动
4.1. 组态软件CAN驱动特定
nload=resizeObj(this);>
图4.1 组态软件CAN驱动
组态软件的CAN驱动程序,如图4.1所示,是人机界面和组态软件的接口,其功能和特点是:
CAN总线数据传递给组态软件的接口:
驱动要借助系统的设备驱动接口,读取CAN总线数据,并通过组态软件的标准形式,传递给组态软件的实时数据库。
可以通过多种形式保证数据发送和接收成功:
1)、驱动内部,判断CAN控制器发送错误信息;
2)、通过写入设备寄存器,然后,读取判断寄存器写是否成功。
关注CANopen协议操作应用层面:
驱动程序中,并不需要整合CANopen整个协议栈,支持CAN2.0协议就足够。然后,CANopen协议部分通过组态逻辑解决。
可以通过多种形式保障数据的完整性和实时性:
实时性就是最新发送总线数据,能够在规定的延时内,进入组态软件的实时数据库。完整性就是能够将所有的数据报文抓取到组态软件,并进行完整的数据处理和存储。根据控制工艺的要求,我们可以设置总线数据上发的频率,通过HMI嵌入的CAN控制器设置屏蔽减少非目标数据,也可以通过组态软件对CAN控制器和驱动缓冲区的处理数据收发性能。
4.2. HMIBuilder软件CAN驱动映射关系
4.2.1. HMIBuilder组态软件
HMIBuilder组态软件是北京昆仑纵横科技发展有限公司()推出的分布式组态软件。现场总线是HMIBuilder软件关注的重点之一。
4.2.2. HMIBuilder设备站参数对应PCI1680U的一个Port口
针对研华PCI-1680U板卡,在设备站参数设置中,其端口、设备号可以选择(见图4.2),波特率可以设定,比如Port1,设备号为0,波特率:250K。这些对应Advantech Device Magnager中的HardwareSetting(见图4.3)。其协议类型和远程帧方式对应测试程序中对CAN卡的进一步设置(详见图4.4),其中在安装研华Demo后目录中,如C:\Program Files\Advantech\CAN\CAN Examples\Examples\VC\CanMEx)。
nload=resizeObj(this); border=0>
图4.2 站参数选择
nload=resizeObj(this); border=0>
图4.3 HardwareSetting
nload=resizeObj(this); border=0>
图4.4 CanMEx
4.2.3. HMIBuilder模拟量CANopen帧的数据域
在图4.5中,其中Message内容为数据域的ASCII码形式解码。在HMIBuilder中,PCI1680U对应的点参数的设置方法如图4.5。其中,ID可以CANopen设备的PDO。如果要读PDO数据域的第一个Byte数据。那么设置如下:416:0:U8:R。也就是416表示设备ID,0表示偏移量,U8-表示8位无符号整形。也就是说,起始偏移为数据域按照字节的偏移,取值为0到7。如果按照F32数据类型,起始偏移取值为0和1。
nload=resizeObj(this); border=0>
图4.5 点参数的设置
注意:本驱动的解码方法包括8位无符号数据、8位带符号整数、16位无符号整数、带符号整数、16位BCD整数、32位无符号整数、32位带符号整数、32位BCD整数、32位浮点数。
5.应用实例
下面,我们针对芬兰Axiomatic公司MVINC-CO-x-range型号倾角传感器,实现CANopen模块的人机界面接入。
1、物理连接
准备首先正确接线,连接研华的PCI-1680U板卡;然后用研华的随机测试软件进行测试。如果测试通讯完成后,再进行下一步,连接带CAN通讯的下一级设备,在这里我们测试Axiomatic公司MVINC-CO-x-range型号倾角传感器。
2、倾角传感器分析
通过阅读传感器的技术说明文档,我们的目标是通过组态软件可以控制倾角传感器的启动和停止,同时采集传感器的倾角信息。模块的启动和停止可以通过NMT指令实现。模块的倾角信息通过TPDO1数据对象周期上传。我们也知道通过SDO,可以配置对象字典,通过层设置服务(LSS:Layer setting service)可以设置模块的Node-ID和波特率等,但是,这些不是本文的目标,也就是,这些不是操作应用层面关注的,而是系统设置层面关注的。
3、HMIBuilder站参数组态
设置一个站,选择驱动程序。如下:
nload=resizeObj(this); border=0>
图5.1 站参数设置
配置协议,参数设置如下:
用PCI-1680U板卡的第一个端口接收数据,所以在设备中选择Port1,设备号选择第一个设备,波特率选择250k(和传感器波特率相同),屏蔽码为255。
nload=resizeObj(this); border=0>
图5.2 通信设置
4、倾角传感器的NMT对象组态
nload=resizeObj(this); border=0>
表5.1 [3] 网络管理对象(NMT)数据报文格式
CAN-ID如果为0x00,表示总线上所有节点都执行相关命令操作。
命令分类为:
nload=resizeObj(this); border=0>
表5.2 [3] CAN模块命令
在HMIBuilder数据组态中,我们设置启动CAN模块2个模拟量参数如图,要求ID都为0,偏移地址连续,而其分别为0和1。
nload=resizeObj(this); border=0>
图5.3 模拟量参数设置
注意:
地址为0,偏移量为0
nload=resizeObj(this); border=0>
图5.4 地址无偏移
地址为0,偏移量为1.
nload=resizeObj(this); border=0>
图5.5 地址偏移一位
5、倾角传感器TPDO1对象组态
通过倾角传感器相关技术文档,我们可以察看设备定义的数据对象字典,确定数据报文的数据域的内容。比如TPDO1,对于MVINC-CO-2-180模块,CAN数据报文发送7个字节数据,数据的定义为:
Sub1为纬度角(Latitude angle),16Bits;
Sub2为经度角(Longitude angle),16Bits;
Sub3为温度(temperature),8Bits;
Sub4为辅助输入(Auxiliary Input),16Bits;
nload=resizeObj(this); border=0>
表5.3 [3]MVINC-CO-2-180模块的TPDO1对象的数据字典内容
倾角传感器上传数据的格式:
nload=resizeObj(this); border=0>
表5.4 TPDO1对象的数据报文
如果我们读取CAN模块7个模拟量参数,需要在组态软件中做如下设置:
nload=resizeObj(this); border=0>
图5.6 模拟量参数设置
地址设置如下:
nload=resizeObj(this); border=0>
图5.7 采集上来的数据
图5.7 地址设置 偏移0.对应D0:416:0:U8:R
nload=resizeObj(this); border=0>
图5.8地址设置 偏移1对应D1:416:1:U8:R
注意:
读上的数据为7位,ID不变。设置偏移为0…6
6、HMIBuilder组态完成
配置启动画面
nload=resizeObj(this); border=0>
图5.9 启动画面
运行情况:
nload=resizeObj(this); border=0>
图5.10 运行结
果
6.结束语
通过HMIBuilder组态软件的CAN总线通信设置,实现了对倾角传感器数据的采集。进一步,我们可以看到:HMI系统中,我们主要关注CANopen协议的数据对象PDO部分,同时,其他数据对象也可以根据现场工艺的要求在组态软件中实现。
7.参考文献
[1] CANopenn:high-level protocol for CAN-bus, nbrood, NIKHEF, Amsterdam, March 20,2000
[2] 《HMIBuilder功能手册》 北京昆仑纵横科技发展科技有限公司
[3] MVINC-CO-X_user_manual_2_08,Author:JKA,Modified:25.07.2007 14:28