时间:2024-07-28
倪 敏
(上海辰竹仪表有限公司,上海 201612)
基于实时操作系统的智能仪表软件设计
倪 敏
(上海辰竹仪表有限公司,上海 201612)
在过程自动化(PA)和工厂自动化(FA)系统应用中,存在大量现场信号需要检测和控制。这些信号需符合安全规范要求,如防爆安全要求、ISO 13849机械安全要求等。目前,主流应用的工业仪表之间并没有真正实现安全信号的数字化传输。随着 “两化融合”的深入推广,工业仪表的数字化、网络化、智能化是必由之路。嵌入式操作系统是当今构建智能系统的重要软件基础,是一种用途广泛的系统软件,负责全部软硬件资源的分配、任务调度,控制和协调软件并发任务。主要探讨了基于μC /OS-III实时操作系统的工业智能仪表软件设计。该设计为工业仪表的数字化提供一个安全、可靠、可扩展的软件平台,为嵌入式智能仪表软件发展提供一些思路和经验。
智能仪表; 实时操作系统; 工业以太网; 两化融合; 消息队列; Modbus
在工业智能仪表模块中,一旦有信号处理超时就会带来严重后果,甚至引发事故危及生命。所以在智能仪表软件开发中,对软件处理结果的正确性和处理过程的及时性都有严格要求。
在智能仪表软件系统中[1-2],引入实时操作系统,可以协调完成对硬件资源的高效分配、任务调度,控制、协调并发活动。实时操作系统为高效、可靠的软件开发提供了基础平台。
本文主要探讨了基于μC /OS-III实时操作系统的工业智能仪表软件的设计。该设计为工业仪表的数字化提供一个安全、可靠、可扩展的软件平台,为嵌入式智能仪表软件发展提供一些思路和经验。
目前,ARM Cortex M3/M4处理器在工业安全I/O上的应用具有许多技术性的优势(相比8位、16位处理器),例如:哈佛总线架构32位寻址、低功耗、高性能、可配置的中断控制器、OS支持、软件可移植性等。
ARM Cortex M3/M4处理器在设计之初就考虑了OS应用,其多个特性确保了OS的实现和OS的高效运行,例如:影子栈指针、SysTick定时器、SVC和PendSV异常、非特权执行等级、排他访问等。
ARM Cortex M3/M4处理器中存在主堆栈指针MSP和进程堆栈指针PSP。这种设计的优点是:若应用遇到导致栈破坏的问题,OS内核使用的栈和其他任务使用的栈不会受到影响,因此可以提高系统的可靠性。
基于ARM Cotex-M处理器的嵌入式智能仪表硬件系统架构如图1所示。
图1 智能仪表硬件架构图
硬件系统以ARM Cortex M3/M4处理器为核心,通过并行数据总线,外扩SRAM、NAND FLASH,进一步扩充存储器资源。外设硬件接口涵盖了工业主流的接口配置:100 MHz以太网、RS-232、RS-485、CAN总线、USB。
随着工业以太网的兴起,网络通信接口成为了智能仪表和设备互联互通较方便的接口标准。ST公司的几款M3/M4处理器都集成以太网MAC IEEE 1588,硬件上再通过RMII/MII接口连接一块物理芯片即可实现。TCP/IP协议栈可以选择Micrium公司的μC/TCP-IP(需要商业授权)或瑞典计算机科学院推出的轻量级TCP/IP协议(LWIP)。
通过移植相应的软件协议栈,实现Modbus TCP、Modbus RTU、CANopen、DeviceNet、ProfiBus DP等主流的各类现场总线[3-4]。
其他外设还包括工业SD 卡、RTC时钟等丰富的硬件资源,可以满足工业检测与控制应用场合需求。
核心ARM处理器使用了0.65 mm BGA工艺,提高了PCB集成度,使得产品体积进一步缩小。接口电路都采用增强型EMC设计,确保在工业恶劣应用环境中也能稳定可靠运行。Cortex-M处理器[5-9]的功耗都普遍小于200 A/MHz。试验表明,CPU运行168 MHz的工作主频,温升小于5 ℃,所以无需考虑CPU主动散热。
2.1 轮询模式
对于简单的系统,CPU可以一直处于等待状态,直到有事件突然发生,再进行事件的分析和处理,处理完毕CPU继续等待。图2的轮询模式可以满足简单的应用需求。但是当应用程序变得更加复杂的时候,轮询模式的程序设计和维护变得非常困难。此外,轮询很难定义不同事件的处理优先级,会导致系统的反应迟钝。当有紧急请求事件发生时,CPU还在处理不重要的事情,直到处理完毕才能响应,系统的实时性差。
图2 轮询模式流程图
2.2 中断驱动模式
对于有功耗要求的系统,只能选择中断驱动模式。CPU在等待某个事件的时候,可以进入低功耗模式,降低CPU工作能耗。在中断驱动模式中,不同的外设被设置成不同的中断优先级(根据系统重要等级进行设计分配),优先级高的中断可以打断优先级低的中断程序,这种软件流程机制的响应是非常迅速的。在多数情况下,软件设计会将轮询模式和中断驱动模式结合起来。当某个紧急的事件需要服务的时候,采用中断驱动模式,触发一个中断请求。当中断服务子程序处理完毕后,它就会回到主程序,利用轮询的方式,进行应用程序的处理。
中断驱动模式流程图如图3所示。
图3 中断驱动模式流程图
2.3 基于实时操作系统的多任务系统
当应用程序复杂到一定程度时,轮询模式和中断驱动模式的程序架构未必能够满足处理需求。需要采用基于实时操作系统(real-time operation system,RTOS)的多任务系统。当系统中有执行时间长的任务时,也需满足系统的实时性响应需求。为满足这种应用情况下的实时性要求,需要将处理器时间划分成为多个时间片并且将时间片分给这些任务。实时操作系统RTOS的内核可以处理多任务的调度。目前可用于Cortex-M处理器的实时操作系统多达30多种,μC /OS-III最早由清华大学邵贝贝教授引入国内,是应用比较早、影响比较大的一种处理器。多任务系统通过高效的后台任务调度、时间管理、任务同步、信息传递、存储器管理等,程序结构更加标准化和健壮,使应用程序的开发更加高效。
基于RTOS的多任务系统流程如图4所示。
图4 多任务系统流程图
时间触发方式在嵌入式软件领域很重要。这种方式简单、可靠,具有很好的预测性,在一些安全关键领域得到了广泛的应用。基于这种机制设计的实时操作系统,是一个可裁剪、可剥夺的多任务系统,没有任务数量的限制,是μC/OS的第三代内核。
μC/OS-III支持先进的抢占式调度器,最高优先级的任务一旦就绪,总能得到CPU的控制权。如果中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,优先级高的那个任务开始运行。这种调度机制可以快速响应任务的调度。
通过以下实例介绍这种机制的工作原理。系统的时间节拍一般设置为1 000 Hz(节拍越快,系统开销越大,取决于系统所需要的时间精度),由硬件定时器SystemTick产生。
典型的多任务系统调度如图5所示。多任务系统有2个用户任务(任务A和任务B),还有2个最基本的μC/OS系统内部任务。①节拍任务OS_TickTask(),一般设置优先级为系统最高,是整个操作系统的时钟源,用来跟踪任务的延时和等待超时。②空闲任务OS_IdleTask()具有最低的优先级,当所有其他任务都没有就绪时,系统就会调用空闲任务。当系统对电功耗有要求时,可以在该任务回调函数中OSIdleTaskHook()中将CPU置成低功耗模式,从而降低CPU功耗,当下一个SysTick中断到来时,CPU中断触发,退出低功耗模式。
图5 多任务系统调度示意图
任务B是一个典型的长时间任务,需要8个时间片才能完成。任务A的优先级高于任务B。可以看到,任务A进入了就绪态,任务A立刻剥夺了CPU的使用权,在2个时间片内完成工作后,将CPU使用权交还给了优先级低的任务B。当任务B完成所有工作后,系统会自动调用空闲任务中,等待其他任务对CPU资源的调用。
μC/OS-III是一个可剥夺型的内核,总是运行当前任务就绪表中优先级最高的那个任务。实时内核负责管理这些任务(或者叫做线程),多任务的有效管理,实现了对CPU资源的高效利用。μC/OS-III还具有其他许多特性,如信号量和消息传递等,有助于实现应用程序的模块化开发、团队合作,以及更为复杂的实时应用系统。
利用μC/OS-III消息传递服务,实现Modbus通信。数据帧的接收:使用直接内存存取(direct memory access,DMA)传输将串行总线外设接收到的数据直接复制到内存地址空间。无需CPU的干预,通过DMA数据可以快速地移动数据。这就节省了CPU的资源来进行其他操作。DMA同样可以实现串口数据从内存区的自动发送,不需要CPU的仲裁。相比传统的采用USART接收和发送字节中断来实现串口数据的转发,软件效率得到极大提高。串行数据接收示意图如图6所示。
图6 串行数据接收示意图
Modbus 通信时,规定主机发送完一组命令必须间隔3.5个字符再发送下一组新命令。这3.5个字符的主要作用是告诉其他设备这次命令(数据)已结束。ARM Cortex-M处理器USART的Idle Line Detect,最适合对一个完整串行通信帧进行侦测。当UASRT总线空闲超过3.5个字符时间,硬件产生中断,启动解析USART接收缓冲区中的数据。通用Modbus帧如图7所示。
图7 通用Modbus帧示意图
Modbus数据帧接收示意图如图8所示。
图8 Modbus数据帧接收示意图
RTOS的消息包含:指向数据的指针、表明数据长度的变量和记录消息发布时刻的时间戳。指针指向的可以是一块数据区或者是一个函数,消息的内容必须一直保持可见,因为发布数据采用的引用传递是指针而不是值传递。发布的数据本身不产生数据拷贝,因此当数据量很大时发布的速度是很快的。
OSTaskCreate()函数建立Modbus帧解析任务。μC/OS-III已经支持通过任务自身内建的消息队列接收数据(无需再申请消息队列变量)。中断服务子程序使用OSQPost()函数发布消息。μC/OS-III对消息队列的读取可以采用先进先出FIFO的方式,也可以采用后进先出LIFO的方式。Modbus通信采用先进先出FIFO的方式。主任务(Modbus帧解析任务)一直处于等待消息队列OSQPend()。当消息队列接收到Modbus数据帧,该任务马上被μC/OS调度器唤醒,进入就绪态;没有高优先级的任务时,转为运行此任务,进行数据帧的解析:地址的配对、数据帧差错校验。然后根据不同功能码、数据内容进行Modbus通信应答。最后调用串口DMA发送,将应答数据帧发送出去。
对于嵌入式软件的架构设计来说,消息队列是一个至关重要的组件,可以给智能软件开发带来的好处如下。
①扩展性增强。消息队列在处理过程中间插入了一个数据的接口层,扩展或修改两边的处理过程变得非常方便。
②数据安全冗余。消息队列将数据进行保存直到被完全处理,通过这一方式规避了数据丢失风险。
③数据的保证送达。消息队列提供的冗余机制保证了消息能被实际的处理,只要一个用户任务(进程)读取了该队列即可。
RTOS是构建智能软件体系非常重要的基础平台,内容非常丰富。
软件是智能仪表的“魂”,是核心关键基础技术。智能仪表核心软件的发展趋势是依赖RTOS。RTOS负责调度可利用的资源完成实时任务,并控制和协调好所有实时任务的运行,提高了软件系统的及时响应和高可靠性。在智能仪表的软件开发中,使用RTOS技术可以将软件系统以足够快的速度予以运行,运行的结果又可以在规定的时间内对处理系统作出快速响应。
μC/OS-III只是众多RTOS家族中的一员,是一个开源的系统,可以给相关技术人员提供一些嵌入式智能仪表开发的思路。
[1] 温宗周,钱佳佳,豆朋达,等.基于嵌入式的智能热能表系统设计[J].自动化仪表,2016,37(12):45-49.
[2] 刘东波,吕方,陈玉娟,等.现场总线和智能仪表与核电厂DCS的接口分析及应用[J].自动化仪表,2015,36(11):41-44.
[3] 谭浩强.C程序设计[M].2版.北京:清华大学出版社,1999:13-37.
[4] 阳宪惠.现场总线技术及其应用[M].2版.北京:清华大学出版社,2008:15-37.
[5] 郇极,刘艳强.工业以太网现场总线EtherCAT驱动程序设计及应用[M].北京:北京航空航天大学出版社,2010:5-27.
[6] JEAN J.嵌入式实时操作系统μC/OS-III[M].北京:北京航空航天大学出版社,2012:100-230.
[7] JOSEPH Y.ARM Cortex-M3 Cortex-M4权威指南[M].3版.北京:清华大学出版社,2015:80-355.
[8] 廖义奎.ARM Cortex-M4嵌入式实战开发精解:基于STM32F4[M].北京:北京航空航天大学出版社,2013:13-27.
[9] 彭刚,秦志强.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子工业出版社,2011:1-29.
Design of the Intelligent Instrument Software Based on Real Time Operating System
NI Min
(Shanghai Chenzhu Instrument Co.,Ltd.,Shanghai 201612,China)
There are a large number of field signals need to be detected and controlled in the applications of process automation (PA) and factory automation (FA) systems,and some of these should meet the requirements of safety regulations,e.g.,ISO 13849 explosion-proof safety requirements of mechanical safety requirements,etc. At present,there is no true realization of digital transmission of safety signals amongmainstream applicable industrial instrumentation. With the in-depth promotion of the “Integration of Informatization and Industrialization”,the digitization,networking and intellectualization of the industrial instrumentation are the only way.The embedded operating system is an important foundation for constructing today’s intelligent systems;it is widely used system software responsible for resource allocation,task scheduling,control and coordination of the whole software and hardware. The design of the application of μC /OS-III RTOS in industrial intelligent instrument is investigated;it provides a safety,reliable and scalable software platform for digitizing industrial instruments,and certain concept for developing embedded intelligent instrument software.
Intelligent instrument; Real time operating system; Industrial ethernet; Integration of informatization and industrialization; Message queue; Modbus
倪敏(1984—),男,学士,工程师,主要从事智能安全控制器的研发。E-mail:nimin@chenzhu-inst.com。
TH7;TP2
A
10.16086/j.cnki.issn1000-0380.201708022
修改稿收到日期:2017-06-23
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!