在工业控制领域越来越受到人们的重视, 其应用也越来越广泛。嵌入式系统由于其硬件、操作系统和应用软件等各方面都需要针对具体的应用进行专门开发,因此,开发难度较大,周期也较长。 在本文中,就嵌入式操作系统的选择、基于 WinCE 6.0进行的嵌入式系统设计开发过程的流程和几个关键问题分别进行研究。
1嵌入式操作系统的选择
目前常用的适合工业控制系统的嵌入式操作系统有: 嵌入式 Linux (包括 RT-Linux 和 μC-Linux 等各种衍生版本)、Vx-Works、μC / OS-II、WinCE 等。
嵌入式 Linux 是嵌入式操作系统的新成员, 随着 Linux 系统的流行,在嵌入式系统开发中的应用也越来越受到关注。 其最大的特点是源代码全部公开,在遵循 GPL 协议前提下可自由修改以满足自己的应用, 系统内核的安全性和稳定性非常好。 其次,无版权使用费,有大量的免费的开发工具,在互联网中有大量的“技术高手”免费提供技术支持,所以软件开发和维护成本很低。 它的缺点是:由于不存在占主导地位的开发商,使得嵌入式 Linux 的版本非常复杂且变动频繁, 各版本之间的一致性和兼容性无法保证,其开发工具和环境配置比较复杂,缺乏完整的技术和开发文档,需要开发者具有高深的技术背景,开发难度较大;另外,在有较高的实时性要求时,需要在 Linux 体系中额外添加实时软件模块,这不但加大了开发难度,还可能会影响整个系统的可靠性。
VxWork 操作系统是 WindRiver 公司设计开发的一种嵌入式实时操作系统,其高性能内核使系统表现出的良好的可靠性、卓越的实时性, 友好的开发环境及产品持续发展能力使其广泛应用于通信、军事、航天航空的高精尖技术领域以及实时性要求较高的领域中。 它的缺点是:系统和开发工具的价格非常昂贵、只提供二进制代码而不提供源码、 需要专门的技术人员掌握开发技术和维护,所以软件的开发和维护的成本较高。
μC / OS-II 是专为嵌入式应用设计的操作系统, 可用于 8位、16 位和 32 位单片机或数字信号处理器(DSP)。 它的源代码公开,内核用 C 语言写出,便于移植到各个不同的硬件平台,具有占先式多任务调度能力和实时能力, 可按照应用的不同选择使用的系统服务,减少存储空间,增加系统的可靠性。 μC/OS-II是一个结构简单、功能完备、实时性很强、非常容易学习的嵌入式操作系统内核, 适合于各种嵌入式应用以及大专院校教学和科研。 但是 μC/OS-II 仅提供了一个实时内核,在实际开发时还有很多工作需要用户自己去完成。
WinCE 是微软公司专门为移动设备、消费类电子产品和工业控制应用等非 PC 领域而设计开发的嵌入式操作系统。 目前主流版本是 WinCE 6.0,其特点为:
1)兼容性较好,无论系统开发还是最终用户操作都与桌面Windows 系统类似,这是 WinCE 6.0 在技术基础和用户基础方面相比其它嵌入式操作系统的一大优势;
2)支持的硬件平台范围广,除 x86 兼容的 CPU 外,Win CE6.0 还支持 MIPS、ARM、SH4 等架构的 32 位 CPU;
3)系统功能丰富,具有多语言国际化支持、占先式多任务调度和强大的网络通讯能力,WinCE 6.0 同时运行进程数量为32000 个 , 每个进程可管理的虚拟内存 空间为 2GB, 具 有对VOIP、触摸屏等新技术的原生支持等;
4) 系统内核的稳定性和可靠性比桌面 Windows 系统有了本质上的提高;
5)系统定制能力强,WinCE 6.0 是高度模块化的系统,其组件包括设备驱动程序、硬件接口库、编程库、网络库、应用程序框架等。 在系统开发时,可以根据需要开发和配置系统,使其只包含支持的硬件和应用程序所需的组件,使系统映像尽可能最小化;
6)具有成熟的开发调试环境和技术支持。 WinCE 6.0 的开工具,基于微软著名的 Visual Studio 平台,其成熟度、易用性和技术支持能力比嵌入式 Linux 等免费嵌入式操作系统提供的开发工具要强的多;
7)WinCE 6.0 不是免费的系统, 其系统开发工具有半年的试用期, 但正式开发时需要购买, 并且每一台运行 WinCE 6.0的设备都需要授权费用。
因此,WinCE 6.0 是一款适合于嵌入式工业控制系统要求的操作系统,可以降低系统开发难度,使开发人员将更多精力放在应用软件的开发上,对于提高嵌入式系统的可靠性和稳定性、控制开发成本、缩短开发周期等方面,相比其它嵌入式操作系统具有明显优越性。
2 基于 WinCE 6.0 的嵌入式工业控制系统开发流程
在选定了 WinCE 6.0 作为操作系统后,嵌入式工控系统的开发流程图如图 1 所示。
图 1 系统开发流程
3 CPU 架构和嵌入式主板的选择
在基于 WinCE 的嵌入式工业控制系统中,X86 和 ARM 是使用最多的两种 CPU 架构。
ARM 架构 CPU 的特点是低功耗 、低成本 、高性能 ,适合应用在成本低、功耗低的工业控制系统。 X86 结构 CPU 与工控机采用的 CPU 完全兼容,在市场中 X86 架构 CPU 的嵌入式主板品种最丰富,可根据所要求的体积、功耗、运算能力等进行灵活选择,而且其外围器件也可使用现成的工控计算机兼容部件。PC104 是 工 业 嵌 入 式 板 卡 采 用 较 多 的 一 种 硬 件 规 格 。PC104 为紧凑型可堆叠模块化结构 ,其板卡尺寸较小 ,多块板卡之间可非常牢固紧密地连接在一起。 PC104 板卡规格丰富,既有采用最新 CPU 型号、具有强大计算能力的产品,也有采用低功耗 CPU,不需要外加散热系统的产品。 PC104 结构的功能扩展板卡资源也非常多,可以提供多种外围接口,因此硬件的选择余地非常大。 因此选用 X86 架构 CPU 构成的 PC104 主板是开发基于 WinCE 的嵌入式系统的一种极为便捷的方式。
在选择嵌入式主板时,还要注意的一个问题是,主板厂家是否提供所选版本操作系统对应的 BSP。 BSP 是 Board Sup-port Package 的缩写,意为板载支持包。 在嵌入式操作系统中,BSP 以主板“驱动程序”的身份出现,主要负责启动时系统的初始化及提供硬件相关的设备驱动。 BSP 具有硬件相关性和操作系统相关性。 一套功能完整的 BSP 对于降低嵌入式操作系统开发难度、提高开发效率是非常重要的。
图 2 X86 架构的 PC104 主板
图 2 是我们在开发某工业设备时选用的一款基于 X86 的研华嵌入式主板,它基于 PC104 结构,采用 Intel Atom N450CPU, 具 有 良 好 的 运 算 性 能 , 板 上 提 供 2GB Flash 存 储 、PC104 / PC104+ 扩 展总线 、VGA 显 示输出 、4 个 USB2.0、1 个1000M 以太网口以及串口、并口等丰富的外部扩展功能。
4 系统剪裁、加载
系统的剪裁和加载是指根据运行嵌入式应用软件的需要,选择特定的系统组件和驱动程序,生成系统映像,并通过适当的方式在嵌入式主板上实现加载启动。 WinCE 6.0 的剪裁和加载可分为以下几个步骤:
1)确定 BSP:应优先选用主板厂商提供的 BSP,在 无法得到原厂 BSP 的 情况下也可选其它的 CPU 架构兼容主板的BSP, 例如在 WinCE 6.0 定制工具 Platform Builder 中提供了多种不同类型的 BSP 供用户选择,特别是其提供了 CEPC(标准 PC)BSP,由于基于 x86 的 PC104 主板一般都和标准 PC 兼容,因此,在开发时可选择 CEPC BSP,然后添加所选主板特有的设备驱动程序组件;
2)集成 MFC:MFC 是微软生成的名为 Microsoft Founda-tion Classes(微软基础集)的 C++类集得缩写形式,它提供了程序开发的框架, 利用面向对象技术对程序开发的细节进行了封装,因此可以降低了程序员编写程序的难度,提高代码的重复利用率,是目前常用编程方法之一。 运行 MFC 应用程序需要系统有相关的 MFC 编程库支持。 在 WinCE 5.0 版本中,PlatformBuilder 提供了 MFC 组件,添加该组件后,生成系统映像时编程库可自动添加到生成的系统内核中。 到 WinCE 6.0 版本后,微软公司为推广.NET 战略,在集成开发环境中取消了 MFC 组件,这对于熟悉使用 MFC 的开发人员非常不便。 其实,在 VS2005/VC / CE / DLL 文件夹中,为我们提供了 WinCE 平台下不同类型CPU 结构的 MFC 编程库,把这些文件复制到相应的 BSP 文件夹中,同时在 BSP 的平台描述文件 Platform.bib 文件中添加如下代码。 这样 MFC 编程库就成为 BSP 的一部分,在生成系统时能自动添加到系统内核中。
; @CESYSGEN IF CE_MODULES_DEVICE
atl80.dll $(_FLATRELEASEDIR)\atl80.dll NK SHK
; @CESYSGEN ENDIF CE_MODULES_DEVICE
; @CESYSGEN IF CE_MODULES_DEVICE
MFC80CHS.DLL $(_FLATRELEASEDIR)\MFC80CHS.DLL NK SHK
; @CESYSGEN ENDIF CE_MODULES_DEVICE
; @CESYSGEN IF CE_MODULES_DEVICE
msvcr80d.dll $(_FLATRELEASEDIR)\msvcr80d.dll NK SHK
; @CESYSGEN ENDIF CE_MODULES_DEVICE
; @CESYSGEN IF CE_MODULES_DEVICE
msvcr80.dll $(_FLATRELEASEDIR)\msvcr80.dll NK SHK
; @CESYSGEN ENDIF CE_MODULES_DEVICE
; @CESYSGEN IF CE_MODULES_DEVICE
MFC80UD.DLL $(_FLATRELEASEDIR)\MFC80UD.DLL NK SHK
; @CESYSGEN ENDIF CE_MODULES_DEVICE
3)集成外围板卡驱动:系统的一些特定功能的实现,需要在主板的基础上,添加外围板卡,如数据采集卡等。 由于外围板卡的多样性,在集成开发环境中,无法提供标准的驱动组件,这就需要我们自己添加外围板卡驱动。 在购买外围板卡时,厂商一般都会提供针对特定嵌入式系统的组件化的驱动安装文件。 在开发机上,运行这个安装文件,外围板卡组件化的驱动文件会自动被复制到开发机中,作为 WinCE 的公共组件存在。 在进行系统剪裁时,可以选择此驱动组件,这样所生成系统映像中就会包含此驱动,以使外围板卡能正常工作。
4)串口通讯功能 :串口 (包括 RS232、RS485 / 422 等 )是目前工业控制中常用到的通信端口。 在 WinCE 系统中,串口功能的正确实现需要三个方面的配合: 硬件支持, 正确添加串口驱动, 软硬件参数设置一致。 首先嵌入式主板要提供串口硬件支持,同时在 BIOS 中正确设置串口使用的 IO 端口和中断。 其次在剪裁系统时,必须选中串口的驱动组件。 最后,系统中串口驱动组件的参数设置包括 IO 端口和中断,都必须和硬件一致。 以上三点任何一处出现错误都可能导致串口无法正常工作。在 WinCE 系统中, 串口的参数设置由 BSP 中的注册表文件 platform.reg 控制, 在进行系统剪裁前必须修改此文件使串口参数和 BIOS 中的设置保持一致,如下所示。
;Partial registry listing for COM1
[HKEY_LOCAL_MACHINE\Drivers\BuildIn\Serial]
″SysIntr″=dword:14 ;中断号 4
″IoBase″=dword:03F8 ;串口地址 3F8
″IoLen″=dword:8
″DeviceArrayIndex″=dword:0
″Prefix″=″COM″
″IClass″=″邀CC5195-AC-BA49-48a0-BE17-DF6D1B0173DD妖″
″Dll″=″com16550.Dll″ ;串口驱动
″Order″=dword:0
″Flags″=dword:10
5)创 建初始化 OS:WinCE 6.0 开 发工具 Platform Builder以 Visual Studio 2005 组件的形式存在。Platform Builder 提供了向导化的工具,指引用户完成系统创建的各个步骤。 创建初始化 OS, 分为建立 OS 镜像和生成 OS 镜像两个步骤。 建立 OS镜像首先在 VS2005 平台中选择构建 OS 向导, 然后依次到板级支持包 BSP 的选择,模板选择,程序选择,程序开发类库的选择,通信服务和网络连接,OS 的核心服务选择,设备管理,文件系统和数据存储方式选择, 字体选择, 图形和多媒体技术的支持,支持国家选择,客户端的 Internet 服务选择,安全属性选择,用户界面选择,IP 语音电话选择,错误报告机制的选择。 在上面各个步骤中,根据实际需要选择 BSP、模块和组件。 构建向导选择完成后,还可在分类表(Catalog)中对选择的 BSP、模块和组件进行调整,和选择第三方组件。OS 镜像建立完成后,准备生成OS 镜像,首先是选择镜像文件版本 ,Release 或 Debug。 然 后在工程属性中,设置编译时,镜像文件相关参数,设置好后,即可选择 Build Solution 对镜像文件的进行编译。 成功创建具有特定功能的 OS,需要根据实际经验,对组件和镜像文件参数进行调试。
6)实现加载系统:嵌入式系统的启动和操作系统映像的加载由 Boot Loader 实现。 Boot loader 在系统上电后首先被执行,用于初始化目标硬件设备,控制启动过程和下载并执行操作系统映像。 WinCE 的 Boot loader 分为 Eboot Loader、SbootLoader、Romboot Loader 和 Biosboot loader 四种, 他们各自实现不同的功能。 Eboot Loader 用于通过网络实现映像从开发平台下载到目标设备,Sboot loader 用于通过串口实现映像从开发平台下载到目标设备,这两种加载程序都依赖另外的启动程序的启动,如各种版本的 DOS 等。 Romboot Loader 和 BiosbootLoader 用于从目标设备本地存储器启动 映像或启动 EbootLloader、Sboot Loader 下载启动映像。 它们的区别是 BiosbootLoader 依靠系统 BIOS 来初始化硬件, 而 Romboot Loader 自己初始化硬件。 对于 X86 兼容的硬件设备,还可以在 DOS 环境下,用 loadcepc 启动加载程序从目标设备本地存储器启动映像,或启动 Eboot Loader、Sboot Loader 下载启动映像。
在基于 Win CE 的嵌入式系统开发过程中, 系统映像一般需要生成两个, 第一个用在系统开发初期创建的为应用程序的开发和调试用的初始版本, 第二个用在应用程序开发完成后创建的集成了应用程序的最终版本。 为调试方便,初始版本应尽可能包含应用程序开发过程可能用到的系统组件。 而最终版本应只包含应用程序运行必须的系统组件。
5 生成 SDK
SDK(Software Development Kit)是对针对程序的运行环境, 为其开发过程提供组件和配置支持的一系列头文件、 库文件、文档、平台管理器和运行时库的总称。 开发嵌入式应用程序必须安装特定平台的 SDK。 所开发 WinCE 系统的 SDK 可在正确生成系统映像后进行。VS2005 集成开发环境提供了创建和生成 SDK 的向导, 生成的 SDK 也有 Release 或 Debug 版本之分,要与生成映像版本一致。为了能支持 MFC 应用程序开发,在创建 SDK 时, 也需要添加 MFC 支持文件,VS 2005/VC/CE/atlmfc 文件夹提供了这些文件,把文件添加进去即可。
6 应用软件开发和调试
与桌面应用软件不同,嵌入式应用软件开发的目标机和开发机一般在软硬件和操作系统上都有很大的不同。 目标机是我们设计开发的嵌入式硬件,具有有限的计算能力、存储能力和需要的外部接口;开发机一般为配置较高的通用计算机,运行特定的开发工具。WinCE 应用软件的开发和调试可分为模拟器模式和目标机模式两种。 模拟器模式就是在开发机上运用模拟器软件来模拟目标机的软硬件环境,所开发调试程序在模拟器中运行。 该模式具有调试方便的优点,但模拟器无法模拟嵌入系统的外部硬件接口,如数据采集功能、触摸功能等。 目标机模式是在真实的目标机上开发调试应用程序,该模式能采用了真实硬件运行环境,能完全调试嵌入工业控制系统常有的外部硬件接口功能。 因此在开发嵌入式工业控制系统软件时,一般都采用目标机开发模式。
目标机模式的开发和调试环境如图 3 所示。 目标机与开发机的通信方式可以选择以太网、USB 或串口连接等, 需根据开发机和目标机同时拥有的通信方式确定。 以太网方式是最常用的,它的数据传输速度非常快,可提高开发效率。 软件层面,可以
2)R 服务 (rshd、rlogin、rwhod、rexec) 提供各种级别的命令,它们可以在远程主机上运行或与远程主机交互,在封闭的网络环境中登录而不再要求输入用户名和口令,相当方便。 然而在公共服务器上就会暴露问题,导致安全威胁。
3)X-Window 从严格的意义上说, 是 Linux 窗口管理器的扩展,而不是重要组成部分。 从目前的 GNOME、KDE 这两种主流图形服务器来看,体积越来越臃肿,耗存越来越大,一些基于图形界面的软件在使用上也存在不少问题。 对于通讯管理机来说,它的存在价值几乎没有。
4)其 它服务 ,如 amd、arpwatch、atd、dhcpd、innd、nntpd、talkd、lpd、named、routed、snmpd、xfs、wuftpd、tftpd、telnet、ypbind、yppasswd、ypserv。
5)用安全系数高的服务。
由于 Telnet、wu-ftp 这些服务的安全性太低,因此,需要启用安全级别高的服务来替代这些服务程序。 以下为几个需要替代的进程:用 OpenSSH 替代 Telnet;用 Vsftpd 替代 wu-ftpd、tftpd (基本的 FTP 服务)、ncftpd (匿名服务 ); 用 Qmail 替代Sendmail。
3 安全软件在电力系统的应用
软件设计充分利用系统为多用户多任务系统的特点, 根据系统功能的要求对软件进行分层分任务设计, 基本目标是层次清晰、任务分布、简单明晰、调试方便和不易出错。 软件任务分层示意图见图 3,其中每层根据实际情况安排了几个任务。
图 3 软件任务分层示意图
通信层支持常见的通信口,如 RS-232、以太网等,完成常见接口的通信收发任务。 本层要能够屏蔽具体的底层通信方式,为上层提供统一的函数接口。
协议层负责与间隔层、站控层和调度系统的通信,支持常见的协议,包括 IEC 61870-5-103/101/104、DNP、CDT 等。数据库包括实时数据库和历史数据库。 实时数据库是数据存取中心,协议层、逻辑部分都会用到实时数据,实时数据库的组织结构也会对系统性能产生较大的影响。
逻辑模块用来进行一些复杂的逻辑运算, 主要是实现一些复杂信号的合成,并根据实际运行情况,通过预先输入的五防逻辑条件实现五防连锁功能。
看门狗模块负责对所有用户生成的任务进行监控。 为防止多任务中个别任务出现异常而设计了本任务,它的优先级较高,通过实时查询其他任务的状态而判断其是否在正确运行。 由于采用了嵌入式操作平台, 为了能够方便地配置工程和监视系统的运行情况,设计了工程配置和运行工况监视程序。 它可以用来进行工程配置,包括通信任务、采用的协议、通信方式等。 另外,它可以利用工程配置的信息对通信处理机的实际运行情况进行监视,包括各个通道的报文、通信状态、实时数据库等。由于软件由多个进程协同工作完成,因此,不同进程、不同模块之间的接口非常重要,它是整个程序正常高效运转的关键。没有好的接口, 不同模块、 不同进程就不能进行良好的数据交换,通信管理机就不能可靠、高效地发挥作用。
4 结束语
工信部于 2011 年 10 月份发布 《关于加强工业控制系统信息安全管理的通知》, 要求充分认识加强工业控制系统信息安全管理的重要性和紧迫性,明确重点领域工业控制系统信息安全管理要求。 研发基于国产软硬件的安全可控工业控制系统对于支撑我国电子信息产业的安全自主可控发展,提升信息产业核心竞争力,具有至关重要的战略意义。 开发安全工业控制系统产品,将加速重大科技成果的转化, 带动国产软硬件上下游产业链的发展,在全国各行各业实现控制系统、信息系统的自主安全可控。