面向数控系统现场总线的通信分析单元的设计与实现
2019-07-09尹震宇于皓宇
马 跃,李 岳,尹震宇,谷 艾,于皓宇
(中国科学院大学,北京 100049)(中国科学院 沈阳计算技术研究所,沈阳 110168)
1 概 述
数控系统现场总线(Computer numerical control fieldbus,CNC-Fieldbus)是数控系统的重要组成部分,是控制系统与从站设备之间进行数据交换的通信线路.在工业制造环境中,通常需要考虑高速率的传感器采集数据的上传以及工业控制指令的下发要求在极短的时间延迟内实时、准确地完成[1],因此,在数控系统现场总线通信系统的研发中,主要技术难点在于如何降低传输过程中的通信时延,以及如何缩短通信消息发送的时间周期,从而确保现场总线的通信性能能够满足数控系统的实时性要求.在现场总线的安装、配置以及维护等环节中,仅能通过数控系统主站显示的数值推测主站发送的控制指令的一部分内容.当通信故障发生时,从站设备接收到的数据帧内容以及反馈的数据帧内容对于检修人员是不可见的,因此需要通过外部设备对现场总线进行监控.由于工业现场环境对于检修设备的便携性以及可移动性要求较高,要求使用基于ARM处理器的小型嵌入式设备.该类设备的主要设计难点在于,受限于嵌入式ARM处理器的低处理性能,如何满足现场总线的高实时性要求.
针对上述问题,本文设计并实现了一种在满足现场总线通信实时性要求的基础上,可以对已建立的数控系统现场总线进行全面的通信分析,同时适合实地调试的小型便携嵌入式设备.目前各数控系统制造厂商通常采用适配于自身系统的不同现场总线通信协议,其通信数据帧格式有所不同,可通过帧头部中所标识的协议版本号进行格式匹配并解析.本文所建立的实验室测试环境采用SSB-III数控系统现场总线作为示例,该总线协议由沈阳高精数控智能技术股份有限公司自主研发,并在GJ310等数控系统成品中得到了广泛应用.为实现对现场总线上传输的数据帧的实时转发及抓包分析,本文通过在嵌入式ARM-Linux系统中安装配置Preempt-RT实时内核补丁,以硬实时的方式捕获数据链路层传输的智能设备帧,可得到用以诊断总线通信状态和设备运行状态的全部数据.
不同于已有的依赖于pc机上的硬件采集卡进行抓包分析的数控系统现场总线分析工具,本文实现的面向数控系统现场总线的通信分析单元可独立于pc机完成数据的抓包、解析以及显示,方便检修人员在复杂的现场环境中通过更换接入位置对多个设备之间的多段连接进行快速的测试及排查,便于安装,提高效率.在检修过程中,通信分析单元对数控系统发送及从站设备反馈的数据帧进行实时转发,对通信两端保持完全透明,不改变通信两端的工作状态.在用户界面上,检修人员可以快速定位待查询数据帧的特定字段来获取所需信息,同时也可以查看一段时间内所捕获数据帧的数量、传递方向以及准确率等宏观特征来整体了解通信情况.
2 关键技术
2.1 数控系统现场总线技术
对于高精度数控系统与自动化数控装备组建的工业局域网,尽管各现场设备可能用于处理适用于各自工作任务的异步数据,在通信方面首先需要确保的是设备之间的精确时间同步,其次需要保证通信在测量与控制上的准确性,因而在目前高精数控系统的通信设计上通常采用现场总线方案.相较于传统的数控系统通信,现场总线以数字通信取代了模拟信号传输,避免了在运动控制器上加装数字-模拟信号转换器,在保持低延时、高可靠的前提下提高了传输效率并且提升了系统的可扩展性.
在现场总线通信体系中,主站在每个时间周期发送包含控制指令及位置值等数据的智能设备帧,在数据链路层直接完成通信,而传统OSI模型的以太网架构中网络层及以上层面中路由选择或端到端流控等机制不被现场总线通信所采用,从而避免了常规以太网通信中必然发生的通信延迟.现场总线网络拓扑结构相对简化,主站与从站设备以串联方式组网,现场总线通信分析单元针对现场总线的技术特点,接入到任意设备之间的现场总线上,通过实时地抓取并转发特定格式的智能设备帧实现对现场总线通信性能的分析,并通过分析现场总线上传输的错误消息间接地对数控装备运行故障进行诊断和处理.
2.2 硬实时处理技术
在现场总线通信分析单元所基于的操作系统层面,对于实时性的实现程度区分为硬实时和软实时,其最关键的差别在于:相对于软实时仅能提供统计意义上的实时,硬实时要求确立一个刚性的、不可变的时限,确保了最坏情况下的服务时间不可超出该时限,若执行任务时超出该时限则会被严格得确定为超时错误.举例来说,在软实时操作系统中,应用可能要求在98%的情况下能够在某时限内完成必要的操作,而能够容忍偶然的超时处理,只需在宏观上满足实时性要求,少量的超时仅会影响系统的性能;而在硬实时操作系统中,任何一例超时错误都是不可接受的,所有响应均会在截止时限之前完成,否则会带来导致系统无法继续运行的故障.因此,对于实时性要求较高的数控系统需要架设在硬实时操作系统上.同时,为保证本文所实现的设备能够在对原现场总线完全透明的前提下进行数据帧的实时转发,本设备同样需架设在硬实时操作系统上.
目前原生的Linux操作系统仅能满足软实时的实时性要求,不能满足数控系统对于实现硬实时的要求.以Linux为基础实现的实时操作系统主要包括以下几种:RTAI、Xenomai、Xtratu和安装了以Preempt-RT为代表的各类实时抢占补丁的Linux扩展系统[2].经测试对比,通过安装实时补丁对软实时Linux操作系统内核进行优化后,系统的实时性能达到了硬实时操作系统的要求[3].由于添加了实时抢占补丁的扩展型实时操作系统符合POSIX(Portable Operating System Interface of UNIX)标准,对于驱动程序以及用户层面的各类应用程序有较好的支持,在硬实时处理能力与其他实时操作系统没有明显差异的前提下具有更高的可移植性,对硬件平台本身的依赖性和特异性较小,因此在实践中具有显著的优势.
3 系统设计
3.1 整体设计
现场总线通信分析单元总体设计如图1所示,由底层FPGA部分、中间层arm-linux内核模块部分和上层Qt用户界面部分共计三部分构成.通信分析单元串联地接入原有的现场总线中,根据实际需要位于任意进行通信分析的位置,物理接口A与B分别连接原现场总线两端设备,接口支持全双工.
图1 现场总线通信分析单元总体设计Fig.1 Overall design of the fieldbus communication analysis unit
3.2 工作流程
现场总线通信分析单元的整体工作流程如图2所示,底层FPGA部分负责同总线的连接,完成总线物理通信的接收与转发,同时将接收的数据帧存入缓冲区,供中间层提取;中间层内核模块提取数据后,将其存入操作系统中的共享内存段以供上层应用进程读取;上层进程读取共享内存中存放的数据内容后,通过识别数据帧头部的版本号确定数据帧的协议类型,并将数据按照协议格式解析出相应字段内容并进行列表显示.
图2 现场总线通信分析单元流程图Fig.2 Flow chart of the fieldbus communication analysis unit
4 具体实现
4.1 实现环境
现场总线通信分析单元的具体实现环境如表1所示.
表1 现场总线通信分析单元实现环境
Table 1 Implementation environment of the fieldbus communication analysis unit
硬件设备TQ3358处理器ARMv7Processorrev2(v7l)FPGA开发板xilinxxc3s500e操作系统LinuxEmbedSky内核版本3.2.0编译工具arm-linux-gcc用户界面Qt4.5
4.2 底层FPGA实现
FPGA(field-programmable gate array)是近年来发展起来的大规模可编程逻辑器件,为并行工作方式,其时钟延迟可达纳秒级,集成度高、开发周期短、开发成本低,在嵌入式开发领域上有广阔的应用前景.本文中实现的FPGA底层硬件部分采用xilinx xc3s500e开发板,该部分集成了处理器、内存、闪存,为上层提供了完整的软件运行环境.网络接口方面,底板上配备A、B两个RJ45全双工端口,可以双向地接收或发送数据,两端串联地接在现场总线中,在任意数据帧进入端口时向另一端口进行实时转发以免影响总线通信正常工作,并将数据复制一份置入端口上配置的缓冲区中.FPGA底板上经过修改的网络适配器负责总线通信适配,实现包括类型识别、无效帧丢弃、时间同步等功能.板上搭载的FLASH中保存上电初始化配置信息,在底板上电时读取并进行相关配置.
4.3 Preempt-RT硬实时内核补丁安装与配置
本文所采用的Preempt-RT补丁是在Linux社区kernel的基础之上进行改进,进而解决了其在spinlock、irq上下文方面无法抢占,导致自高优先级任务被唤醒至开始执行的时长不稳定的问题.通过打Preempt-RT补丁并编译内核,Linux系统本身增加了具有高时间分辨率的通用时钟事件层以及硬实时能力.
安装配置之前,首先获取与内核版本相对应的Preempt-RT补丁,并执行patch -p1 <(补丁文件所在路径),随后在内核路径下通过make menuconfig进行内核配置,并在“Processor type and features”中选择“Complete Preemption(Real-Time)”选项,以确保内核具备完全的实时抢占能力.配置完成后对内核进行编译,随后在grub.cfg中找到Linux原有的一段配置文件,并且在引导选项的img等文件后添加-rt等必要参数以使内核成功启用[4].上述工作完成后即可重启选择进入系统,通过安装基准测试程序,测试经过扩展后系统的时间精度以及实时性,可以发现实时内核的实时性远远超出原生系统,已经符合本文中设备开发所需要的系统环境要求[5].
4.4 arm-linux内核模块实现
内核模块交叉编译产生后缀ko文件,通过运行自启动脚本在设备上电后插入系统内核中,脚本同时完成在启动之后在/dev中注册pci设备,并完成检测硬件是否正常工作、连接是否建立等工作;随后模块将相对应的硬件缓冲区的物理地址映射到内核的虚拟地址空间,从而按长度从硬件缓冲区中读取数据帧并完成帧定界.
该部分调用内核模块的中间层程序为sniffer_app.c,在设备上电之后自启动并保持工作状态.在底层FPGA板上有两块缓冲区,分别为缓冲区A以及缓冲区B,对应FPGA模块中A、B两个物理连接端口.当其中任意缓冲区获取到数据时,其相应的状态寄存器的值会被改变,程序从状态寄存器中取出已到达数据长度,以此长度申请共享内存空间,将读取的数据帧按照协议格式以结构体为单位通过
4.5 上层用户界面实现
用户界面基于Qt,通过sniffer_hmi.cpp实现,采用分页方式,系统功能整体分为3页.
首页是整体控制页面,如图3所示,左侧放置“开始抓包”以及“停止抓包”按钮,当用户点击“开始抓包”时清空共享内存段、清空所有页面的数据显示并将全局标志位变量修改为正在抓包状态;当用户点击“停止抓包”按钮时,读取共享内存段中的数据并将全局标志位变量修改为暂停状态,并且将全部页面内容按照解析结果进行更新.首页同时包括当前网络连接状态以及异常状态提示标签,当连接出现异常时进行相应的显示.首页右侧为抓包整体信息标签页,包含抓取的数据帧总数、正确数据帧总数及正确率、错误数据帧及碎片数据帧总数及错误率、CRC错误帧总数及错误率、WDG错误及错误率、同步周期、同步抖动值等.
图3 用户界面首页Fig.3 Home page of user interface
第2页是数据显示页面,如图4所示,上半部分整体为一个列表控件,按照抓取的时间顺序排列,每行为一帧数据,其行号与帧在内存块中的序号一一对应.在列表中每列对应一个有效字段,包含发送方向、数据长度、CRC校验、帧类型、从站设备类型、控制指令中下发的位置值、反馈指令中上传的码盘位置值、时间戳等,每帧数据按照其不同类型在相应列显示字段内容,不包含的字段处缺省显示“-”.
图4 用户界面第2页Fig.4 Second page of user interface
第2页下半部分包含一个数据表格、一个文本框和一个树形控件.当用户在点击列表中任意一行时,触发slot_click_table槽函数,传入所点击的行数对应的帧编号参数,将该数据帧内容以字节为单位在数据表格中全部显示,每格显示为两个十六进制数,共16列.在树形控件中显示帧头部格式,用户点击帧头部中不同字段时,文本框中显示该数据帧头部中经解析得到的信息,包含CRC校验情况及传输方向等.
第3页是版本信息页面,包含本设备的当前软件开发版本以及驱动模块、FPGA固件、显示模组版本信息,同时说明了可识别的协议类型.
4.6 协议格式解析
在sniffer_hmi进程中,从底层传递上来的完整帧内容依据协议格式按位解析关键字内容[6,7].以SSB-III协议为例,每个智能设备的数据帧部分都由50个字组成,每字大小4字节,主要用于应用对象间的实时通信.50个字的具体含义详见下面的结构体,帧格式如图5所示.对于其他较为主流的现场总线通信协议,仅需对结构体进行简单的修改使其匹配相应的协议格式即可实现解析.
其中,addr_s字段与addr_m字段分别代表通信从站与通信主站地址,sts_com为通信状态,err_count为出错数目,time_delay为从站通信延迟时间,watchdog为通信监视看门狗,wd_feed_value为看门狗反馈值,reserve数组为保留字段.rcv和snd两个结构体分比为接收数据及发送数据,其中len字段为数据长度,而buf数组为接收/发送数据缓冲区,其中包含位置值、时间戳等内容,按数据帧类型的不同有所区分.
图5 SSB-III智能设备帧格式Fig.5 Standard format of SSB-III frames
5 实验结果
组装完成的样机外观如图6所示,正面为触摸屏幕,具备一个电源接口、双RJ45网口、一个USB扩展口以及一个DB9串口.
图6 现场总线通信分析单元样机Fig.6 Sample device of the fieldbus communication analysis unit
将样机接入到由数控系统控制主站、X/Y/Z三轴共计三个伺服电机组成的总线网络中进行测试实验,实验环境如图7所示.所使用的数控系统控制主站型号为蓝天数控GJ301,发送数据帧周期为典型场景下的2ms.首先测试了初次上电场景下的抓包分析,样机显示时间同步帧Status为Ready,代表通信成功建立.随后测试了使能状态下的抓包分析,伺服电机按照主站位置值进行了精确定位,在样机上显示Status为Run代表设备正常运转,捕获的数据帧中位置值与主站显示一一对应.最后,通过使用外力强制旋转伺服电机轴,使得码盘反馈值与指令值错位等方式制造多种故障场景,抓包结果显示Status为相对应的故障代码,同时终止了使能状态.
图7 现场总线通信分析单元实验环境Fig.7 Experimental environment of the fieldbus communication analysis unit
实验中样机能够准确地抓取总线上传输的数据帧,样机所独立抓取的数据帧中解析出的位置值与数控系统控制台上所显示数值对应无误.经过对大量数据传输、长时间运行等实际应用场景进行反复压力测试,验证了样机能够以稳定的工作状态实现预期功能,满足设计要求.
表2 样机性能指标
Table 2 Performance specifications of the sample device
同步数据帧周期2ms同步数据帧抖动0.4μs响应时间80μs数据帧捕获率100%CRC校验正确率100%WDG正确率100%
实验结果显示,样机可以实现对数据帧进行无遗漏地采集与处理,并且能够测量数据帧之间的同步抖动时间,达到预期的实时性要求,顺利通过了专项验收.总体性能指标如表2所示.
6 结束语
本文设计了一种便于携带的嵌入式数控系统现场总线通信分析设备,并分层次地介绍了该设备设计与实现的全部过程.与现有的数控系统总线通信采集分析工具相比,本设备采用基于嵌入式平台的设计方案,体积小、成本低,在可保持长时间、复杂环境中工作的同时,可灵活部署,便于技术人员对工业制造现场中的总线网络进行多点测试,能够在今后数控系统的安装、维护与检修工作中发挥重要作用,具有实际意义.