赵启杰,尹震宇,高岩
(1.中国科学院大学,北京 100049; 2.中国科学院 沈阳计算技术研究所,沈阳 110168)
数控系统现场总线协议分析系统设计与实现*
赵启杰1,2,尹震宇2,高岩1,2
(1.中国科学院大学,北京 100049; 2.中国科学院 沈阳计算技术研究所,沈阳 110168)
目前数控系统现场总线标准繁多,在设计和开发中,缺少适用的分析和检测工具。针对上述问题文章给出了一种数控现场总线协议分析系统设计与实现方案,可兼容多种总线标准。系统模型基于简化的4层通信模型,面向基于以太网的数控现场总线,对数据链路层的数据进行解析。系统由软硬件两部分组成,文中主要介绍了软件部分的设计与实现。系统借助XML文件配置帧结构,可兼容多种总线协议。系统采用中断方式工作,应用RTAI实时接口,采用Netlink进行用户空间与内核空间的通信。在基于NCSF的数控系统上进行测试,系统可稳定运行。
数控系统现场总线;协议分析;XML;RTAI
数控系统现场总线作为高档数控机床的重要组成部分,具有高可靠性、抗干扰性等优点。目前国内外数控系统现场总线标准种类繁多,例如国外的EtherCAT,POWERLINK,PROFINET,SERCOSⅢ等,国内的NCUC,NCSF等。这些总线技术大多基于以太网技术,在数控和伺服产品中得到广泛的应用。
目前国外各总线标准都有自己专用的协议分析设备。例如:针对EtherCAT总线标准的Twincat系统,主要是面向伺服控制、I/O控制等具体行规层及用户指令控制的分析的;安川针对MⅢ总线的专门测试工具,只能测试安川的产品。Fluke的Optiview虽然是有针对以太网物理层和IP层的协议分析工具,只能对数据包进行简单的解析,无法进行面向数控系统总线的分析。
针对上述问题,本文描述了多协议现场总线协议分析系统的设计与实现过程。系统通过配置帧结构文件,可兼容NCUC,EtherCAT,NCSF等多种总线协议。系统采用中断式工作方式,应用RTAI实时接口,以提高响应速度,采用Netlink进行用户空间与内核空间的通信,界面友好,使用方便,帮助技术人员轻松完成数控系统的测试与诊断工作。
目前常见的数控系统现场总线基于实时以太网技术。实时以太网(RTE,Real Time Ethernet),是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。将计算机网络中的以太网技术应用于工业自动化领域构成了工业控制以太网,是当前工业控制现场总线技术的一个重要发展方向[1]。
Twincat是Beckhoff公司开发的系统软件,可通过多 PLC 系统、NC 轴控制系统、编程环境和操作站,将任何兼容 PC“改造”成为一台实时控制器。包含总线测试功能。Fluke公司的便携式 OptiView 网络分析仪可在网络中的任何地方提供有线或无线分析,允许用户在线监控和捕获最终用户的体验。它是一种便于携带的网络管理工具,能够帮助网络专业人士在处理日常工作时节省时间。
RTAI是实时应用接口Real Time Application Interface的缩写。它在Linux上定义了实时硬件抽象层RTHAL(Real Time Hardware Abstraction Layer),RTHAL将所有需要的Linux内部数据和函数的指针集合到一个Rthal的结构中。Rthal结构用于截取Linux硬件操作,在双内核结构工作时,它们可以被RTAI重定向,以取代Linux中原有的函数;同时RTAI只是用此程序接口与Linux进行沟通[2]。
XML(Extensible Markup Language)是可扩展标记语言,作为一种“元数据标准”用于结构化信息,XML文档有相同的基本结构,其特有的树形结构特别适合描述通信协议中数据帧的格式。XML在互联网,电力,电子商务,工业控制等诸多领域都有广泛的应用[3]。
2.1 总体结构
系统总体结构如图1所示。系统由软件部分和硬件部分组成。
硬件部分有两个职责,一是负责整个系统与现场总线的物理连接,担负物理层上数据的接收和发送功能;二是与软件部分进行交互,将接收到的数据向上交付给软件部分,并从软件部分接收数据,通过总线发送出去。可见硬件部分实际上只做以太网数据帧的接收和发送,不做其他任何处理,其余所有的工作都交由软件部分进行处理。
图1 总体结构图
软件部分负责数据帧的解析,与用户进行交互等。软件运行平台基于定制的Linux操作系统,为保证数据处理的实时性,采用了RTAI硬实时扩展。板卡驱动作为Linux内核模块,负责从硬件中获取数据,以及将用户请求转化成硬件指令发送给硬件设备。软件部分整体上采用MVC设计的模式,核心处理模块负责数据帧的解析以及模拟报文的合成;用户界面只负责和与用户进行交互,将核心处理模块处理得到的结果显示给用户,并将用户的请求返回给核心处理模块,转化成相应的请求,以便发送给板卡驱动。
2.2 硬件结构
硬件部分采用FPGA(Field-Programmable Gate Array)实现,设计如图2所示。硬件部分集成了处理器,内存,闪存,构成了完整的软件运行环境。带有两个RJ45端口,每个端口额外增加一个备份缓冲区,当有数据帧通过端口时,将数据复制一份放入备份缓冲区。备份缓冲区只能保存最后一次写入的值,当数据到来时,必须及时将数据读出来,否则数据会被覆盖。以太网适配器负责以太网通信,包括帧定界,类型识别,时间戳,CRC校验等。FLASH用于保存FPGA的上电初始化配置信息。
图2 硬件结构图
2.3 软件结构
软件部分基本结构如图3所示。软件部分按层级结构进行设计,可分成如下几个部分:板卡驱动,内核接口层,用户接口层,核心处理模块,图形用户界面。
系统将硬件部分整体视为一个PCI设备,板卡驱动作为内核模块,负责设备的启动、初始化、内存地址映射和数据帧的接收和发送。
内核接口层负责与用户空间进行通信,将数据帧传送到用户空间,并接收用户空间传递过来的命令和仿真报文。
图3 软件架构图
用户接口层负责用户空间中与内核空间交互的任务,功能与内核接口层类似。
核心处理模块是软件的核心部分,主要功能包括数据帧的解析,仿真报文的封装,以及将用户操作转换成对硬件的指令,是整个系统的核心,协调系统各部分正常运行。
用户界面将核心处理模块得到的硬件状态,报文等信息等,显示给用户,并与用户进行交互。
用户空间与内核空间的通信通过用户接口层和内核接口层进行。构建共享内存队列,实现内核空间与用户空间的高效传输。
3.1 实现环境
系统实现环境见表1。
表1 实现环境信息表
3.2 系统流程
图4 系统流程图
系统工作流程如图4所示。首先进行内核空间的初始化工作,加载内核模块,进行初始化,配置板卡,进行内存映射,初始化RTAI实时运行环境,分配共享内存,初始化Netlink套接字,注册RTAI中断处理函数,内核部分初始化完毕。然后进行用户空间的初始化工作,启动图形用户界面,读取协议结构配置文件,初始化Netlink套接字,从内核空间获取共享内存起始地址和长度,初始化共享内存,等待用户操作。
用户空间进程将用户操作封装成Netlink消息,通过Netlink套接字发送到内核空间。内核空间接收到命令后,由板卡驱动执行响应操作。
板卡收到数据时,触发中断函数,中断函数清除中断位,查看监听功能是否开启,从缓冲区获取数据,通过Netlink发送到用户空间,然后重新开启中断。
3.3 驱动模块的实现
驱动模块主要负责数据的采集与发送工作。为保证数据处理的实时性,驱动程序用到了RTAI实时接口。使用RTAI函数之前需要对RTAI初始化。
驱动模块负责以下工作:
(1)加载实时运行环境;
(2)注册PCI设备驱动;
(3)进行寄存器地址映射;
(4)通过RTAI注册设备中断响应函数;
(5)初始化内核接口层。
中断响应函数负责数据帧的获取和同步数据的发送。数据帧的获取和发送流程见图5。
向控制寄存器写入启动接收命令需要将控制寄存器置0一段时间后再置1,为防止中断响应函数执行时间过长,将写控制寄存器等操作放入工作队列中,提高中断响应速度。
由于网络字节序为大端格式而主机字节序为小端格式,因此要进行字节序的转换。
图5 数据帧的获取和发送流程
3.4 用户空间与内核空间通信的实现
用户空间与内核空间的通信采用Netlink与共享内存相结合的机制。共享内存通过内存块循环队列的方式进行管理,用户接口层和内核接口层封装了用户空间和内核空间对Netlink与共享内存队列的复杂操作。
内核接口层负责申请共享内存,RTAI的内存管理模块提供了一组API用于进程之间共享内存,rt_named_malloc和rt_shm_free分别进行共享内存的分配和释放。
共享内存通过循环队列结构进行管理,队列数据结构存放在共享内存起始位置,由用户空间进程与内核空间进程共同维护。系统维护报文的接收和发送两个共享内存队列。发送方从队列申请内存块,接收方负责释放内存块,一个访问队列头部指针,一个访问队列尾部指针,因此内核线程与用户线程在共享内存上不存在访问冲突,不会破坏队列结构的一致性。
//共享内存块
typedef struct shm_addr {
char * mem_addr; //起始地址
uint32_t mem_size; //地址长度
uint32_t page_cnt; //内存页数
uint16_t order; //2^order == size
}SHM_ADDR;
//共享内存队列
typedef struct shm_queue{
SHM_BLOCK * mem_addr; //起始地址
uint32_t block_sum; //地址块数
uint32_t enter; //队列入口
uint32_t exit; //队列出口
}SHM_QUEUE;
Netlink用于内核空间与用户空间的消息传递。内核接口层发送的消息类型包括:收到数据,共享内存,寄存器值;用户接口层发送的消息类型包括:请求获取共享内存信息,发送数据帧,启动总线监听,停止总线监听,获取寄存器值,设置控制寄存器值,开始周期发送,停止周期发送。消息关联的数据被封装到NETLINK_MSG结构体中,随消息一同发送。
//Netlink消息结构体
typedef struct nl_msg{
uint32_t shm_index; //消息的存储位置
uint32_t msg_length; //消息的长度
uint32_t reg; //寄存器
struct time_valtime; //数据到达时间
}NETLINK_MSG;
/*内核消息定义*/
#define NL_RECVED_PACK 1
#define NL_SHM_ADDR 2
#define NL_REGS 3
/*用户空间消息定义*/
#define NL_GET_SHM_ADDR 12
#define NL_SEND_PACK 13
#define NL_PERIODIC_SEND 14
#define NL_PERIODIC_SEND_STOP 15
#define NL_BEGIN_MONITOR 16
#define NL_STOP_MONITOR 17
#define NL_GET_REGS 18
#define NL_SET_CTRL_REGS 19
3.5 协议结构文件
为使系统能解析多种现场总线协议,对已有报文描述方式进行改进,设计了基于XML的协议报文描述方式[4]。
根据XML文件的特点与工业以太网报文结构的特点,将报文的层次结构映射成XML文件中标签的树形结构,如图6所示[4]。
图6 报文与XML文件映射关系
针对工业以太网帧结构的复杂性,为XML标签提供如下8种属性,分别为name,length,type,description,value,repeat,condition,offset。
name属性表示字段名,length属性表示字段的长度,单位是byte,description属性存放对本字段的描述,用于报文解析后显示。
type属性有4种取值,分别是:block,表示本字段是一个块,不直接存储数据,包含子节点;byte,表示本字段直接存储数据;bit表示本字段是父节点的某几位的集合,此时offset表示最低位在父节点中的位置,length的单位是bit;option,表示父节点的取值只能在本节点和本节点的兄弟节点中选择,本节点的value属性不能为空。
condition属性代表本字段的存在条件,如果本字段不为空,其格式必须是“name=value”,如果从帧数据中取出名为“name”的数据,与“value”相等,则认为此帧数据是包含本字段的,否则认为此帧不包含本字段。
repeat属性的值为某一字段名,如果属性值不为空,则repeat属性的值应当是本字段之前的某个非option类型的字段名,其字段值表示本字段重复出现的次数。通常工业以太网数据帧中伺服从站的数据格式都是一样的,从站数据段重复出现的次数由头部某一字段决定。
图7 XML报文描述示例图
报文描述示例见图7。用户空间进程启动时,协议解析模块读取并解析XML文件,对每一个协议生成一个协议结构类(ProtocolStruct),以树形结构存储。
//协议字段类
class ProtocolNode {
int offset;
int length;
int is_selection;
int is_repeat;
int condition_value;
int option_value;
ProtocolNode *parent;//指向父节点
QString type;
QString name;
QString description;
QString condition_name;
QList
//存储子节点指针
};
//协议结构类
class ProtocolStruct{
QString protocol_name;
QList
};
为方便用户管理协议结构文件,系统自带了协议结构文件编辑器,方便用户对协议结构文件进行修改。
系统在基于NCSF的数控系统现场总线上进行测试。实验中,系统能够稳定工作,正确执行预期功能。在测试平台上对10万个数据包进行测试,受平台发包速率限制,耗时40s,捕获数据包96842个。其他性能测试指标见表2。
运行效果如图8所示。
表2 性能测试指标
图8 系统运行效果图
表3为图中帧的解析结果。
表3 报文解析示例
实验中系统采集到的数据完全是按照协议配置文件中的协议格式解析的,与代码无关,实现了协议与程序的分离,体现了系统良好的扩展性。
单个数据包的处理时间可以维持在60μs以内,远小于2ms,能够完成对大部分总线协议的实时处理。通过大量数据(10万数据包)长时间通信测试,看出系统工作状态比较稳定。
针对数控系统现场总线的高实时要求,设计并实现了一款基于Linux平台的监测系统。经过测试,该系统工作稳定,能够实时检测总线通信,希望能够数控系统开发和维护过程中发挥重要作用。在中断响应与内核数据传输的处理上耗费的时间较长,还有待进一步优化,系统的工作效率还存在改进空间。
[1] 郇极, 刘艳强. 工业以太网现场总线 EtherCAT 驱动程序设计及应用[M].北京:北京航空航天大学出版社,2010.
[2] 刘鑫,陆文娟,范海涛.基于RTAI嵌入式Linux硬实时性能研究与实现[J].嵌入式操作系统应用,2006,22(11-2):46-48.
[3] 佘名高,王丽,杨亦,等.基于XML实现工业过程中实时数据的动态发布[J].自动化技术与应用,2005(10):10-12.
[4] 刘喆,郇极,刘艳强.基于XML的EtherCAT工业以太网协议解析技术[J].北京航空航天大学学报,2011,37(9):1086-1090.
[5] 郑子辉,杨东升,尹震宇.数控系统现场总线NCSF监测分析系统的设计与实现[J].组合机床与自动化加工技术,2011(5):46-50.
[6] 邵新龙,尹震宇,杨东升,等.基于SoC的NCSF总线系统的研究与设计[J].组合机床与自动化加工技术,2013(1):49-53.
[7] Network Analyzer ( Sample Version ) User 's Manual of MECHATROLINK-III[Z].2008.
[8] 王国兴,何方.基于以太网的现场总线设计与实现[J].组合机床与自动化加工技术,2010(4):60-64.
(编辑 李秀敏)
Design and Implementation of Protocol Analysis System for NC Field-bus
ZHAO Qi-jie1,2,YIN Zhen-yu2,GAO Yan1,2
(1. University of Chinese Academy of Sciences, Beijing 100049, China; 2. Shenyang Institute of Computing Technology, Chinese Academy of Science, Shenyang 110168,China)
There are varieties of CNC fieldbus standards lacking of appropriate analyzing and testing tools that can be used in the design and development process. This paper presents a fieldbus analyzing and testing system. This paper introduces the design and implement of software and hardware. The software analyzes data-link layer data captured by the hardware. The system model based on the simplified 4-level communication model. The system can analyze protocol data according to XML files and compatible with various fieldbus protocols. The system is work in the interrupt-mode. Use real-time application interface to reduce the response time. Use Netlink to exchange data between user space and kernel space. Tested on the CNC system based on NCSF, the system is stable and effective.
NC field-bus; protocol analysis; XML; RTAI
1001-2265(2014)05-0078-05
10.13462/j.cnki.mmtamt.2014.05.020
2013-09-05;
2013-09-22
"高档数控机床、数控系统及功能部件关键技术标准与测试平台研究"(2012ZX04010-021)
赵启杰(1989—),男,山东青岛人,中国科学院研究生院硕士研究生,研究领域为数控系统现场总线,(E-mail)q838324835@163.com。
TH166;TG65
A