工业自动化仪表嵌入式软件系统构建分析

2021-11-18 22:54杨觉先
科技信息·学术版 2021年26期
关键词:嵌入式软件

杨觉先

摘要:工业自动化仪表是指在工业制造中,用于显示工艺参数或者实现对工艺流程的环境控制的仪表装置。只有在工业制造中对工艺过程的全貌进行精准控制把握,才能保证生产产品的质量。基于此,本文主要是对工业自动化仪表的嵌入式软件系统架构方法进行分析,希望通过此文给工业仪器仪表的嵌入式软件开发带来一些启示帮助。

关键词:工业自动化仪表;嵌入式软件;软件系统构建

前言:

嵌入式软件系统是指以嵌入式的方式集成在硬件中的操作系统,对软件进行开发的开发软件工具,目前被广泛应用在控制、监视与辅助生产器械设备上,它通常情况下由四部分组成,分别是:嵌入式微处理器;硬件设备;嵌入式操作系统和用户程序。在嵌入式软件系统的帮助下,我国工业制造领域突破了一个又一个技术难题,制造精度水平与制造质量都有了明显提高。因此,深入探究工业自动化仪表的嵌入式软件系统构建方法是具有广阔市场应用价值的。

1.软件复用构建

软件复用技术是工业自动化仪表嵌入式系统中最常使用的技术,是指在构建新的软件系统时,对现有的软件进行重复利用。工业自动化仪表的控制、监视与辅助功能都是在用户程序的操作基础上实现的,一种用户程序的操作对应着一种仪表行动,但并不是所有的操作都需要单独开发用户程序来完成,因此需要通过软件复用技术进行优化,让一种或者多种用户程序承载更多的功能,再或者同一类型的软件分别执行不同的仪表功能。这样的技术优势主要有三:一是软件需要独立的嵌入式微处理器与硬件设备作为载体,软件复用减少了载体硬件设备的安装数量,可以缩减仪表的制造尺寸;二是仪表在后续维修养护时,减少了不必要的单独校验工作量;三是降低了软件开发和后期维护的成本。代码是程序员利用嵌入式开发工具,以字符、符号和数字等离散的信息表达形式所写出的源文件,可以近似地理解为用编译器将人类的“命令语言”转译成一种处理器可以理解的二进制计算机指令。有了源代码,自动化仪表上的嵌入式软件系统才有了逻辑处理功能。而代码的复用可以通过对源代码的剪贴、包含与继承来实现;设计的复用是指将现用某个成熟嵌入式软件的功能设计模型进行复用,用于嵌入式软件的整体移植;分析结果的复用是指复用某个已有嵌入式软件的分析模型,当用户使用仪表的功能需求未发生改变,但系统整体结构需要进一步技术优化时会使用这种软件复用技术。嵌入式软件开发通常需要编辑(代码准备)、编译、功能定位(定制和打包)、烧写、调试、下载与优化几个步骤,工业自动化仪表中可能还需要后期的测试与验证。

2.构建思路

有了软件复用技术与软件构件模型,就可以对工业自动化仪表嵌入式软件系统进行构建了,首先要根据光学仪器、气温气压或热辐射感应仪表,或者其他电子测量仪器的使用功能,调用合适的构件模型进行框架构建,在与功能实现相关的各个构建模型中,对它们的源代码进行分析修改,使系统框架与实际使用功能更加贴合。如仪器的自动化控制功能,可以通过多个软件构件模型的数据库分析来实现,而开发人员需要做的,便是通过测试来校对修改底层代码,并给自动化控制范围一个合理的赋值。在对嵌入式软件进行构建时,不是所有的构件模型都能够适用于相应功能资源的各种情况的。这时需要软件开发人员为每个外部硬件模块专门编写带有描述性事件的源代码作为驱动程序,如数字模型转换器、内部集成电路、串口、外围接口、本地网络管理等,都需要单独手动编写驱动控制程序。但考虑到仪表工作时可能出现多个外部硬件模块同时工作的情况,需要建立独立的构件库对所有专门编写的驱动程序进行集中管理。

3.具体构建方法

3.1框架构建流程

工业自动化仪表嵌入式软件系统的常见编程方法大致分为两种:一是即时操作系统,二是大循环编程系统。这个要看仪表的具体应用情况来决定。计划以Linux系统作为构建平台,将外部所有的设备统一当做系统文件来处理。Linux文件系统是一个目录树的结构,最上层是文件根目录,下面是Linux为使用者创建的标准目录结构,如sbin、usr、etc、root、hom、lib和mut等,并且能够指定相应的目录功能作用与文件类型。由于大多数嵌入式目标机往往不能满足存储提供足够可供编译的数据资源,所以采用交叉编译的方式将编译任务转交给高性能的宿主机。首先利用常见的Linux外壳,如Bash、ash等shell命令解释器建立系統交叉编译的环境,而后再进行Bootloader的移植、配置与编译。Bootloader是嵌入式系统在硬件通电后运行的第一个代码指令,它是负责引导Linux系统加载内核的程序,通常以一个固化硬件的形式集成在嵌入式系统中,需要将其设置为通电后自动运行。而后再对kernel进行配置编译,在交叉编译时,应当将Bootloader调用kernel的方式设置为“直接跳转到内核第一条指令处”,使kernel与系统根目录可以同步创建一个初始化映像,在此基础上才能进行根目录与用户程序的开发、应用。

3.2功能构建

选用一种适用于仪表的嵌入式软件开发工具,对仪表嵌入式系统中所有出现的已知功能的源代码进行编译、链接与下载,如KeiluVision2,这就相当于在主体框架上丰富了各个功能单元区的构建。功能构建免不了嵌入式Linux系统的移植,但还是要考虑到具体系统的用途,有针对性地对Linux内核进行裁剪与修改。而构件库则是开发设计人员为了方便系统构建,编写一段可复用的命令语句后在嵌入式系统框架上进行测试后整理出的“工具箱”,用软件复用技术将新开发的功能源代码变为新的构件。嵌入式Linux系统的可拓展性能极佳,可以支持如ext、NFS、cramfs等十余种不同的文件系统类型,能够形成可支持精简用户程序储存工作数据的磁盘。功能构建阶段,可以近似地看成是嵌入式系统的“组装”过程,需要分析构件未达到设计功能的原因,这种问题的原因主要有两种:一是工作评审情况与构件设计的描述不符,二是软件构件的逻辑性存在问题;前者需要对构件进行调试修改后再次测试直至符合要求后加入构件库中,而后者是该软件构件组在开发阶段时逻辑验证存在问题,需要重新进行编写开发。此外还需要注意如果系统中含有Nor flash性质的存储器,应在arch/s3c2310/smdk.c中找到对应分区添加修改分区代码。

3.3后期测试

后期测试分为局部测试与整体测试,不论是哪个功能单元的构建,它所使用的构件都必须经过严格的软件测试才能入库选用,不然很容易留下影响仪表系统功能的隐患故障。每完成一个单独的功能单元的构建时,需要在系统框架上给该单元所有的组成构件提供运行环境,将各个构件按照各自的接口定义条件进行自测与互测,对其中出现的bug问题进行修改。在局部测试阶段分为两种问题情况:一是仅仅构件算法有问题,仅在某一功能单元出现问题,且不会影响到其他功能单元的编制,只需对满足单一功能的构件进行重新构建即可;另外一种测试问题是构件之间的耦合度过高,或者软件构件之间的抽象分组存在不合实际的严重逻辑问题,那么就必须回查构件库,重新返回嵌入式系统框架与功能单元的设计构建阶段。完成系统的构建后,还应当对嵌入式系统进行整体测试,检查整个系统运行的稳定性与正确性。

4.内核裁剪

目前嵌入式系统使用的内核有多重不同版本,需要根据仪表用途选用的具体处理器架构来选择合适版本的内核核心。首先需要将适配的内核核心在# export PRJROOT=/home/armlinux文件夹内完整解压,而后通过命令语句“ # cd armlinux # mkdir build-tools kernel tools”,在用户目录文件夹名下建立三个根目录:build-tools、kernel 和 tools。其中build-tools目录用于存放编译后gcc、binutils、glibc等源代码的数据文件;kernel是负责收容内核源代码的文件夹;而tools则是用来存放编译需要的各类交叉编译工具与数据库文件的。

第二步是相关的环境变量建立,由export声明一组临时变量,当控制台被注销或者更换后,这组变量也会随之消失。具体的环境变量代码如下:# export PRJROOT=/home/mike/armlinux # export TARGET=arm-linux # export PREFIX=$PRJROOT/tools # export TARGET_PREFIX=$PREFIX/$TARGET # export PATH=$PREFIX/bin:$PATH。若是需要多次使用这组环境变量时,还需要重复export操作。

第三步是下载GUN工具为接下来的编译做准备,我们可以选择Binutils下载安装,它包含了addr2line、ar、as、c++filt等多种工具程序,其中addr2line是负责将程序地址转化为对应的文件名与行号的;ar是用于建立、修改、提取归档数据的程序;as是为ar提取归档数据后生成gcc编译器提供汇总文件环境的工具,以id连接器的形式来创建“ar汇总文件与符号引用之间的映射关系”;而c++filt是用来处理过滤java与c++符号的,避免多种代码语言的函数在重载时出现逻辑冲突,為编译操作提供兼容性保障。

第四步需要借助编译器分析内核的头部文件,调取与目标平台适配函数的数据信息,除了要获取内核的头部文件之外,还要合理的配置来重新对arm-linux头部文件进行定义。首先在kernel文件夹中找到格式为linux-2.6.10.tar.gz的内核包文件,通过代码指令:“# cd $PRJROOT/kernel # tar –xvzf linux-2.6.10.tar.gz”将其解压在当前位置,而后执行 “# cd linux-2.6.10 # make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig ”命令正确配置内核的头部文件。配置完成后需要在内核文件目录中查找是否存在autoconf.h或version.h文件,确认该文件已生成后方可退出保存。

第五步是在linux2.6.10内核配置中设置合适的参数,首先需要将配置完成的内核头文件复制到交叉编译工具链中,而后安装arm linux gcc工具进行内核与创建c库的编译工作。此时是系统第一次安装arm交叉编译工具,并未获得glibc库的交互支持,因此只能用来进行内核与不需要c库支持的程序编译,如bootloader的编译修改。在使用arm linux gcc给CFLAGS设置操作参数前,需要通过-Dinhibit_libc-D__ gthr_ posix_h命令来将头部文件屏蔽使用。内核裁剪完成后,将一个简单的hello.c源文件编译为可执行,通过file命令来查看hello.c文件类型,来检查交叉编译工具链是否正常可用。

结语:综上所述,工业自动化仪表的嵌入式软件系统构建,主要是分为两个部分:系统框架构建与功能单元组建。而其中主要是应用软件复用技术与构件技术,使用这两种技术进行嵌入式软件系统构建时,可以极大地缩减开发设计环节的重复工作量,保证嵌入式软件系统的灵活性与规范性。而在系统构建时,无论是为构件库添加构件还是单元区的构建,结束后都要进行测试,查找设计缺陷,降低或消除质量风险。

参考文献:

[1]李学英,王永兵,徐学青.航天嵌入式软件构件管理研究[J].中国新通信,2021,23(03):65-66.

[2]陈志瑞.机械工程自动化仪表装置的应用分析[J].科技创新与应用,2021,11(27):172-173.

[3]刘国超,李春会.工业自动化仪表与自动化控制技术的应用研究[J].科技创新与应用,2021,11(23):177-179.

猜你喜欢
嵌入式软件
基于ARM7TDMI架构的嵌入式软件逆向工程分析方法
浅析嵌入式软件技术的现状与发展动向
基于微信的移动学习平台开发与设计
计算机软件设计中的嵌入式软件设计分析
嵌入式软件技术的现状与发展趋势研究
嵌入式软件全面测试过程模型
基于模型检查的嵌入式软件构件化分析与验证
嵌入式软件在计算机软件开发过程中的运用
试论计算机嵌入式软件构件提取与组装技术
计算机软件开发过程及嵌入式软件的应用