基于LINUX和CAN总线的工业嵌入式控制系统研究
扫描二维码
随时随地手机看文章
1.引言
基于现场总线的控制系统在工业控制中已经得到广泛的应用,现场总线是根据国际电工委员会的IEC61158标准的定义而应用于生产现场,在现场设备之间、现场设备与控制装置之间实行双向、串行、多节点通信的通信网络,也被称为开放式、数字化、多点通信的底层控制网络。现场总线具有系统的开放性;互操作性与互用性;现场设备的智能化与功能自治性;系统结构的高度分散性;对现场环境的适应性的优点,因此,现场总线成为当今自动化领域技术发展的热点之一。近年来已经设计出与现场总线相适应的控制模块,其功耗小、可靠性高、易开发等的优点已经成为嵌入式系统的主要成员。所谓嵌入式应用技术,是指将一个具有完整功能的小型或微型机装置作为一个部件或子系统,与载体有机地构成一个更可靠的技术稳定性的功能更强大和完善的系统。工业嵌入式系统的主要指标要求就是:实时性、高效率、安全稳定性与可靠性以及结构紧凑、易于剪裁、良好的开放性。实时性就是事件驱动能力与时间驱动能力,其基础是内核的结构模式与进程管理机制;高效率包括系统的启动速度与运行速度及消息传递效率等;而稳定性与可靠性包括稳定性、安全性与容错能力等有关的性能指标。以前的大部分工业嵌入式操作系统都是建立在DOS之上,但是DOS系统无论在实时性、安全性、分布式网络支持、可视化编程还是在易用性等诸多方面都不能满足工业应用要求,可供嵌入式应用的图形操作系统有多种,比如Windows CE、Palm OS、Black berry和EPOC等,而Palm OS、Black berry和EPOC一般只应用在手持设备上。适合工业环境应用(过程)标准的系统,目前有Windows CE和Linux等几种。本文的所介绍的嵌入式控制系统是基于Linux图形操作系统。
2.嵌入式控制系统
一般性定义,广义上的嵌入式控制系统是指非PC系统,有计算机功能但又不称之为计算机的设备和器材;狭义的嵌入式控制系统是把PLC功能、测量功能、PID调节(如温度)功能、人机+界面功能、现场总线通讯功能和高级语言编程及库函数集成的结合体。此系统包括控制面板和相关支持硬件(微处理器、IO端口等外设器件、扩展模块、存储器等)及应用软件。
2.1 控制面板(以德国EPIS公司产品为例)设计多样化,用户可以选用已有的控制器面板,也可以订制面板,使其与其设备或系统环境相匹配。显示器类型是LCD显示器,同时配有点阵式显示和图形显示。整个系统面板从144*72mm到255*183mm,适合在各种设备上应用。
2.2 相关支持硬件
嵌入式微处理器是嵌入式系统的核心。它对实时和多任务有很强的支持能力,能完成多任务并有较短的中断响应时间,使内部的代码和实时操作系统的执行时间减少到最低限度;具有强大功能的存储区保护和扩展功能;可扩展的处理器结构,能更方便、迅速地扩展出满足于应用的高性能配置;嵌入式微处理器的低功耗。
IO端口 数字输入口和输出口数量可选择,各端口最多可扩展到512路。输入电压是24VDC,分为标准速度口(从高变低为3.5ms,从低变高为2.8ms)和快速输入口(响应速度为20μs),同时配有高速输入口,额定电压是5V或24V,响应时间为1.1μs。数字输出口采用24V光电隔离结构,每路电流最大500mA,配有短路保护和过载保护;继电器输出口有一常开点和一常闭点,转换电压最大48 VDC,转换电流最大1A,转换容量最大30W,运行时间3ms。模拟量输入口和输出口的数量各自可扩展到40路。其模拟量输入口包括电压输入和电流输入两种方式,同时可以接收温度传感器信号,内部A/D转换器15位.,转换时间为20μs。特殊功能口:多路高速计数器输入口,最大输入频率是25kHz;增量编码器输入口,最大输入频率是1M Hz;25位绝对值编码器输入口;模拟量输出口内部D/A转换器是11位,转换时间为100ms。
总线(CAN)扩展模块 总线(CAN)扩展模块是光电隔离,与ISO/DIS 11898兼容。其传输电缆是双绕线屏蔽电缆,且对应于不同长度的电缆,传送的位速率不尽相同。总线(CAN)扩展模块扩展卡自带CPU,可独立脱机工作,节省主CPU的开销。 总线功能可带一路或多路总线(CAN)口和多个扩展槽。利用TCP/IP网络功能支持设备与设备间、设备与网络之间的在线数据交换,还可选配RS232/RS485,CANopen,和Profibus接口。
2.3 应用软件包括操作系统软件和应用程序编程软件。操作系统软件包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面等。嵌入式操作系统的基本特点是能够有效管理越来越复杂的系统资源,把硬件虚拟化,使开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供大量专用和通用库函数、驱动程序、工具集以及应用程序。应用程序控制着系统的运作和行为来完成特定的任务,而操作系统控制着应用程序编程与硬件的交互作用。编程环境非常好,在PC机上编程,具有非常方便地仿真,设断点,参数设置和跟踪,单步执行等DEBURG功能。
3.工业嵌入式控制系统的实时性与Linux操作系统
3.1 实时性是工业系统的基本要求,也是考核嵌入式系统最重要的指标之一。工业控制中的操作系统要求严格的实时性,实时性也是嵌入式系统的主要特征。实时系统要求所有任务在规定的时间内完成,例如现场的数据采集,电力监控与管理,航天器的飞行控制等等。设计实时系统有两个相对的目标:一是保证严格的时间关键截止值;二是充分有效地利用各种资源,并能较好地容错。嵌入式系统在软件的控制下通过硬件高速地获取数据,并进行处理,产生相应地反应。整个过程必须具有严格的时间和可靠性约束。实时操作系统中的重要概念包括:
系统响应时间(system response time)指系统发出处理要求到系统给出应答信号的时间
任务换道时间(context switching time)指任务之间切换而使用的时间
中断延迟(interrupt latency)指计算机接受到中断信号到操作系统作出响应,并完成换道转入中断服务程序的时间
实时操作系统应具有如下功能:任务管理(多任务和基于优先级的任务调度);任务间同步和通信(信号量和邮箱等);存储器优化管理(含ROM的管理);实时时钟服务和中断管理服务。
通常,根据实际应用中截止时间的要求,可将实时进程分为严格满足时间截止的硬实时进程和对截止时间要求只有关联的软实时进程。面向实时的Linux调度策略,应该采用线程作为调度的基本单位。在调度系统中安排一定的调度时钟,以调度时钟作为线程调度的参考。调度时钟依据线程创建时设定的优先级,同时优先级高的线程将一直运行。如果两个线程具有相同的优先级,则采用随机调度的方法。Linux是一个通用的操作系统,内核不支持事件优先级和抢占实时性,因此在将Linux系统作为嵌入系统应用于工业测控领域时,必须开发和扩展实时功能,将Linux提升为一个实时操作系统。
3.2 Linux是由很多体积小且性能高的微内核和部件组成。由于内核代码的完全开放性,不同层次和不同领域的用户可以根据具体的应用需求对内核进行改造与剪裁,以较低的成本设计出满足自己要求的嵌入式操作系统。它有一整套的工具链gcc,用户能够比较容易自行建立与配置嵌入式系统以及在该系统下的开发环境与仿真运行环境,不需要专门的仿真器。它可以支持RISC和CISC结构的芯片,可以支持16位、32位和64位CPU;就目前的流行器件来说,它可以运行在Intel系列CPU上,也可以运行在IBM和Motorola的Power PC 系列CPU以及Alpha和SPARC系列CPU上。Linux的灵活性极好。在一个64兆内存的PIII平台下编写的应用程序,可移植到8兆内存的嵌入式硬件装置中并可靠和稳定地运行。考虑可移植性与可裁减性硬件平台的迅猛发展,为实时应用提供丰富的运行平台(从单片机到DSP,从CISC到RISC结构的各类微处理等)。为了能适应硬件平台的多样化,在设计、开发嵌入式实时操作系统内核时,要认真考虑可移植性问题。能够提供广泛平台支持的操作系统,目前嵌入式Linux是成功的典型。可移植性与实现代码选用的语言有很大关系。如,C语言比实现相同功能的汇编语言具有更好的可移植性。但是,用汇编语言实现的代码具有更高的执行效率和更紧凑的代码空间。所以,为了取得较好的执行效率,节省代码空间,获得较强的可移植性,需要选择一个在代码优化方面做得好的C语言编译器,能对C代码进行良好的优化。
图1LINUX内核体系结构
上图显示了Linux内核体系构建方式。它把Linux内核源代码清晰地分为体系结构相关部分和无关部分。体系结构无关部分定义了与底层,也就是体系结构相关部分的接口。更确切地说,该图能够说明所有期望具有平台无关特性的操作系统。体系结构无关代码并不关心宏的确切定义,把实际负责硬件体系留给相关代码区处理。这种处理的方法提高了代码的重用性、可移植性和可裁减性。然而,由于Linux是采用单内核设计,如果采用微内核设计,那么向其它体系结构上的移植将会更加容易.
4 基于CAN总线工业嵌入式控制系统的设计
基于CAN总线的工业嵌入式控制系统的整个模块如图2所示。
图2基于总线(CAN)工业嵌入式实时控制系统的原理图
总线控制器SJA1000 8000H~801FH 将设计好的PC/104模块作为一独立的控制系统插入专用的应用板,同样的模块可以有若干个,以层叠的方式嵌入同一块应用板,既可以完成类似的功能,也可以完成完全不同的其它功能(如数据采集转换等)。PC/104提供了一个非常紧凑的与标准台式PC或PC/AT结构完全兼容的层叠栈接模块。将台式PC机的全部功能重新包装于一个格式标准统一、稳定可靠、灵活且符合嵌入式系统尺寸的标准模块中,与PC兼容,用于嵌入式系统设计以替代传统的嵌入式微处理器十分适宜。通过PC/104总线,微处理器能够非常方便地和系统通信。为满足大量数据交换的要求,特增加了8kb的RAM以扩展内存。为了增加局部总线的驱动能力,在微处理器和PC104总线之间增加数据/地址驱动电路。为了系统的扩充能力,增加了地址译码电路,译出的地址0300H~031FH以备将来的I/O外设使用。同时为了增加有效的传输距离,采用了Philips公司的高性能CAN总线收发器82C250,它具有高速性(最高可达1Mb/s)、能抗瞬间干扰、保护总线、支持多达110个节点的连接等优点。另外,设计了CAN地址选择电路,以确保CAN总线节点在整个系统中的唯一地址。
5 Linux嵌入式应用编程简介
5.1 采嵌入式系统一般都没有编辑和编译工具,所以需要先在开发系统中完成程序的编辑、编译和仿真运行及修改工作,形成可执行文件,再转到运行系统(即嵌入式系统)上执行。
以Linux嵌入式为支撑系统开发系统上的应用程序属于事件驱动编程,也就是“消息队列”和“消息循环”。有2个涉及消息的函数十分常用:GetMessage( )和DispatchMessage( )。一般还需要common.h。
其编程与VC++编程所用消息处理函数极为相似,下面将介绍一些简单而又基本的GUI元素:主窗口、静态文本框、编辑框、按钮、进程条、对话框以及一些基本的图形操作
一些常用的消息处理函数如下:
输出文本 MEG_PAINT(使用TextOut()函数)
设置像素点颜色 SetPixel()
画线条 LineTo()
画矩形 Rectangle()
画圆形 Circle()
设置画笔颜色 SetBrushColor()
创建窗口 MES_CREATE
创建主窗口 CreateMainWindow(&CreateInfo)
此外,大多数控件都可以使用CreateWindow()函数创建。
5.2 RTOS开发平台
通用计算机具有完善的操作系统和应用程序接口(API),是计算机基本的、不可分离的一部分,应用程序的开发以及完成后的软件都在平台上运行,但一般不是实时的。嵌入式系统则不同,应用程序可以没有操作系统而直接在芯片上运行,但是为了合理调度多任务、利用系统资源、系统函数以及专家库的接口,用户必须自行选配RTOS平台,这样才能保证程序执行的实时性,稳定性和可靠性,并减少开发时间,保证软件质量。
实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。在编写程序时,可以分别编写各个任务,从而减少了程序编写的工作量,而且减小了出错的可能,保证最终程序具有高可靠性。RTOS体现了一种新的系统设计思想和一个开放的软件框架,用户可以在不大量变动系统其它任务的情况下增加或去掉一个任务;一个项目开发的过程中,可以有多个工程师同时进行系统的软件开发,每个人之间只要制定好规程和协议即可,既缩短了开发时间,又降低了最终软件产品对于具体某个开发者个人的依赖性。为RTOS设计的成熟和通用的任务可以以库函数的形式供其他人继续利用,与C++语言的设计思想一致。
6 结束语
CAN总线技术在电厂、变电站、电力系统中有广阔的应用前景,能在可靠性、高精度、经济性等多方面获得最大的效益;以工业标准PC/104 为代表的嵌入式控制系统具有突出的优点,十分适合于工业环境的要求。随着微处理器和单片机的发展,工业控制技术中使用嵌入式实时操作系统已经成为一个特点。嵌入式操作系统已经经历了一个阶段的发展,它在工业控制中的应用必将越来越广泛。