楊覺先
摘要:工業(yè)自動(dòng)化儀表是指在工業(yè)制造中,用于顯示工藝參數(shù)或者實(shí)現(xiàn)對(duì)工藝流程的環(huán)境控制的儀表裝置。只有在工業(yè)制造中對(duì)工藝過程的全貌進(jìn)行精準(zhǔn)控制把握,才能保證生產(chǎn)產(chǎn)品的質(zhì)量?;诖?,本文主要是對(duì)工業(yè)自動(dòng)化儀表的嵌入式軟件系統(tǒng)架構(gòu)方法進(jìn)行分析,希望通過此文給工業(yè)儀器儀表的嵌入式軟件開發(fā)帶來一些啟示幫助。
關(guān)鍵詞:工業(yè)自動(dòng)化儀表;嵌入式軟件;軟件系統(tǒng)構(gòu)建
前言:
嵌入式軟件系統(tǒng)是指以嵌入式的方式集成在硬件中的操作系統(tǒng),對(duì)軟件進(jìn)行開發(fā)的開發(fā)軟件工具,目前被廣泛應(yīng)用在控制、監(jiān)視與輔助生產(chǎn)器械設(shè)備上,它通常情況下由四部分組成,分別是:嵌入式微處理器;硬件設(shè)備;嵌入式操作系統(tǒng)和用戶程序。在嵌入式軟件系統(tǒng)的幫助下,我國(guó)工業(yè)制造領(lǐng)域突破了一個(gè)又一個(gè)技術(shù)難題,制造精度水平與制造質(zhì)量都有了明顯提高。因此,深入探究工業(yè)自動(dòng)化儀表的嵌入式軟件系統(tǒng)構(gòu)建方法是具有廣闊市場(chǎng)應(yīng)用價(jià)值的。
1.軟件復(fù)用構(gòu)建
軟件復(fù)用技術(shù)是工業(yè)自動(dòng)化儀表嵌入式系統(tǒng)中最常使用的技術(shù),是指在構(gòu)建新的軟件系統(tǒng)時(shí),對(duì)現(xiàn)有的軟件進(jìn)行重復(fù)利用。工業(yè)自動(dòng)化儀表的控制、監(jiān)視與輔助功能都是在用戶程序的操作基礎(chǔ)上實(shí)現(xiàn)的,一種用戶程序的操作對(duì)應(yīng)著一種儀表行動(dòng),但并不是所有的操作都需要單獨(dú)開發(fā)用戶程序來完成,因此需要通過軟件復(fù)用技術(shù)進(jìn)行優(yōu)化,讓一種或者多種用戶程序承載更多的功能,再或者同一類型的軟件分別執(zhí)行不同的儀表功能。這樣的技術(shù)優(yōu)勢(shì)主要有三:一是軟件需要獨(dú)立的嵌入式微處理器與硬件設(shè)備作為載體,軟件復(fù)用減少了載體硬件設(shè)備的安裝數(shù)量,可以縮減儀表的制造尺寸;二是儀表在后續(xù)維修養(yǎng)護(hù)時(shí),減少了不必要的單獨(dú)校驗(yàn)工作量;三是降低了軟件開發(fā)和后期維護(hù)的成本。代碼是程序員利用嵌入式開發(fā)工具,以字符、符號(hào)和數(shù)字等離散的信息表達(dá)形式所寫出的源文件,可以近似地理解為用編譯器將人類的“命令語(yǔ)言”轉(zhuǎn)譯成一種處理器可以理解的二進(jìn)制計(jì)算機(jī)指令。有了源代碼,自動(dòng)化儀表上的嵌入式軟件系統(tǒng)才有了邏輯處理功能。而代碼的復(fù)用可以通過對(duì)源代碼的剪貼、包含與繼承來實(shí)現(xiàn);設(shè)計(jì)的復(fù)用是指將現(xiàn)用某個(gè)成熟嵌入式軟件的功能設(shè)計(jì)模型進(jìn)行復(fù)用,用于嵌入式軟件的整體移植;分析結(jié)果的復(fù)用是指復(fù)用某個(gè)已有嵌入式軟件的分析模型,當(dāng)用戶使用儀表的功能需求未發(fā)生改變,但系統(tǒng)整體結(jié)構(gòu)需要進(jìn)一步技術(shù)優(yōu)化時(shí)會(huì)使用這種軟件復(fù)用技術(shù)。嵌入式軟件開發(fā)通常需要編輯(代碼準(zhǔn)備)、編譯、功能定位(定制和打包)、燒寫、調(diào)試、下載與優(yōu)化幾個(gè)步驟,工業(yè)自動(dòng)化儀表中可能還需要后期的測(cè)試與驗(yàn)證。
2.構(gòu)建思路
有了軟件復(fù)用技術(shù)與軟件構(gòu)件模型,就可以對(duì)工業(yè)自動(dòng)化儀表嵌入式軟件系統(tǒng)進(jìn)行構(gòu)建了,首先要根據(jù)光學(xué)儀器、氣溫氣壓或熱輻射感應(yīng)儀表,或者其他電子測(cè)量?jī)x器的使用功能,調(diào)用合適的構(gòu)件模型進(jìn)行框架構(gòu)建,在與功能實(shí)現(xiàn)相關(guān)的各個(gè)構(gòu)建模型中,對(duì)它們的源代碼進(jìn)行分析修改,使系統(tǒng)框架與實(shí)際使用功能更加貼合。如儀器的自動(dòng)化控制功能,可以通過多個(gè)軟件構(gòu)件模型的數(shù)據(jù)庫(kù)分析來實(shí)現(xiàn),而開發(fā)人員需要做的,便是通過測(cè)試來校對(duì)修改底層代碼,并給自動(dòng)化控制范圍一個(gè)合理的賦值。在對(duì)嵌入式軟件進(jìn)行構(gòu)建時(shí),不是所有的構(gòu)件模型都能夠適用于相應(yīng)功能資源的各種情況的。這時(shí)需要軟件開發(fā)人員為每個(gè)外部硬件模塊專門編寫帶有描述性事件的源代碼作為驅(qū)動(dòng)程序,如數(shù)字模型轉(zhuǎn)換器、內(nèi)部集成電路、串口、外圍接口、本地網(wǎng)絡(luò)管理等,都需要單獨(dú)手動(dòng)編寫驅(qū)動(dòng)控制程序。但考慮到儀表工作時(shí)可能出現(xiàn)多個(gè)外部硬件模塊同時(shí)工作的情況,需要建立獨(dú)立的構(gòu)件庫(kù)對(duì)所有專門編寫的驅(qū)動(dòng)程序進(jìn)行集中管理。
3.具體構(gòu)建方法
3.1框架構(gòu)建流程
工業(yè)自動(dòng)化儀表嵌入式軟件系統(tǒng)的常見編程方法大致分為兩種:一是即時(shí)操作系統(tǒng),二是大循環(huán)編程系統(tǒng)。這個(gè)要看儀表的具體應(yīng)用情況來決定。計(jì)劃以Linux系統(tǒng)作為構(gòu)建平臺(tái),將外部所有的設(shè)備統(tǒng)一當(dāng)做系統(tǒng)文件來處理。Linux文件系統(tǒng)是一個(gè)目錄樹的結(jié)構(gòu),最上層是文件根目錄,下面是Linux為使用者創(chuàng)建的標(biāo)準(zhǔn)目錄結(jié)構(gòu),如sbin、usr、etc、root、hom、lib和mut等,并且能夠指定相應(yīng)的目錄功能作用與文件類型。由于大多數(shù)嵌入式目標(biāo)機(jī)往往不能滿足存儲(chǔ)提供足夠可供編譯的數(shù)據(jù)資源,所以采用交叉編譯的方式將編譯任務(wù)轉(zhuǎn)交給高性能的宿主機(jī)。首先利用常見的Linux外殼,如Bash、ash等shell命令解釋器建立系統(tǒng)交叉編譯的環(huán)境,而后再進(jìn)行Bootloader的移植、配置與編譯。Bootloader是嵌入式系統(tǒng)在硬件通電后運(yùn)行的第一個(gè)代碼指令,它是負(fù)責(zé)引導(dǎo)Linux系統(tǒng)加載內(nèi)核的程序,通常以一個(gè)固化硬件的形式集成在嵌入式系統(tǒng)中,需要將其設(shè)置為通電后自動(dòng)運(yùn)行。而后再對(duì)kernel進(jìn)行配置編譯,在交叉編譯時(shí),應(yīng)當(dāng)將Bootloader調(diào)用kernel的方式設(shè)置為“直接跳轉(zhuǎn)到內(nèi)核第一條指令處”,使kernel與系統(tǒng)根目錄可以同步創(chuàng)建一個(gè)初始化映像,在此基礎(chǔ)上才能進(jìn)行根目錄與用戶程序的開發(fā)、應(yīng)用。
3.2功能構(gòu)建
選用一種適用于儀表的嵌入式軟件開發(fā)工具,對(duì)儀表嵌入式系統(tǒng)中所有出現(xiàn)的已知功能的源代碼進(jìn)行編譯、鏈接與下載,如KeiluVision2,這就相當(dāng)于在主體框架上豐富了各個(gè)功能單元區(qū)的構(gòu)建。功能構(gòu)建免不了嵌入式Linux系統(tǒng)的移植,但還是要考慮到具體系統(tǒng)的用途,有針對(duì)性地對(duì)Linux內(nèi)核進(jìn)行裁剪與修改。而構(gòu)件庫(kù)則是開發(fā)設(shè)計(jì)人員為了方便系統(tǒng)構(gòu)建,編寫一段可復(fù)用的命令語(yǔ)句后在嵌入式系統(tǒng)框架上進(jìn)行測(cè)試后整理出的“工具箱”,用軟件復(fù)用技術(shù)將新開發(fā)的功能源代碼變?yōu)樾碌臉?gòu)件。嵌入式Linux系統(tǒng)的可拓展性能極佳,可以支持如ext、NFS、cramfs等十余種不同的文件系統(tǒng)類型,能夠形成可支持精簡(jiǎn)用戶程序儲(chǔ)存工作數(shù)據(jù)的磁盤。功能構(gòu)建階段,可以近似地看成是嵌入式系統(tǒng)的“組裝”過程,需要分析構(gòu)件未達(dá)到設(shè)計(jì)功能的原因,這種問題的原因主要有兩種:一是工作評(píng)審情況與構(gòu)件設(shè)計(jì)的描述不符,二是軟件構(gòu)件的邏輯性存在問題;前者需要對(duì)構(gòu)件進(jìn)行調(diào)試修改后再次測(cè)試直至符合要求后加入構(gòu)件庫(kù)中,而后者是該軟件構(gòu)件組在開發(fā)階段時(shí)邏輯驗(yàn)證存在問題,需要重新進(jìn)行編寫開發(fā)。此外還需要注意如果系統(tǒng)中含有Nor flash性質(zhì)的存儲(chǔ)器,應(yīng)在arch/s3c2310/smdk.c中找到對(duì)應(yīng)分區(qū)添加修改分區(qū)代碼。
3.3后期測(cè)試
后期測(cè)試分為局部測(cè)試與整體測(cè)試,不論是哪個(gè)功能單元的構(gòu)建,它所使用的構(gòu)件都必須經(jīng)過嚴(yán)格的軟件測(cè)試才能入庫(kù)選用,不然很容易留下影響儀表系統(tǒng)功能的隱患故障。每完成一個(gè)單獨(dú)的功能單元的構(gòu)建時(shí),需要在系統(tǒng)框架上給該單元所有的組成構(gòu)件提供運(yùn)行環(huán)境,將各個(gè)構(gòu)件按照各自的接口定義條件進(jìn)行自測(cè)與互測(cè),對(duì)其中出現(xiàn)的bug問題進(jìn)行修改。在局部測(cè)試階段分為兩種問題情況:一是僅僅構(gòu)件算法有問題,僅在某一功能單元出現(xiàn)問題,且不會(huì)影響到其他功能單元的編制,只需對(duì)滿足單一功能的構(gòu)件進(jìn)行重新構(gòu)建即可;另外一種測(cè)試問題是構(gòu)件之間的耦合度過高,或者軟件構(gòu)件之間的抽象分組存在不合實(shí)際的嚴(yán)重邏輯問題,那么就必須回查構(gòu)件庫(kù),重新返回嵌入式系統(tǒng)框架與功能單元的設(shè)計(jì)構(gòu)建階段。完成系統(tǒng)的構(gòu)建后,還應(yīng)當(dāng)對(duì)嵌入式系統(tǒng)進(jìn)行整體測(cè)試,檢查整個(gè)系統(tǒng)運(yùn)行的穩(wěn)定性與正確性。
4.內(nèi)核裁剪
目前嵌入式系統(tǒng)使用的內(nèi)核有多重不同版本,需要根據(jù)儀表用途選用的具體處理器架構(gòu)來選擇合適版本的內(nèi)核核心。首先需要將適配的內(nèi)核核心在# export PRJROOT=/home/armlinux文件夾內(nèi)完整解壓,而后通過命令語(yǔ)句“ # cd armlinux # mkdir build-tools kernel tools”,在用戶目錄文件夾名下建立三個(gè)根目錄:build-tools、kernel 和 tools。其中build-tools目錄用于存放編譯后gcc、binutils、glibc等源代碼的數(shù)據(jù)文件;kernel是負(fù)責(zé)收容內(nèi)核源代碼的文件夾;而tools則是用來存放編譯需要的各類交叉編譯工具與數(shù)據(jù)庫(kù)文件的。
第二步是相關(guān)的環(huán)境變量建立,由export聲明一組臨時(shí)變量,當(dāng)控制臺(tái)被注銷或者更換后,這組變量也會(huì)隨之消失。具體的環(huán)境變量代碼如下:# export PRJROOT=/home/mike/armlinux # export TARGET=arm-linux # export PREFIX=$PRJROOT/tools # export TARGET_PREFIX=$PREFIX/$TARGET # export PATH=$PREFIX/bin:$PATH。若是需要多次使用這組環(huán)境變量時(shí),還需要重復(fù)export操作。
第三步是下載GUN工具為接下來的編譯做準(zhǔn)備,我們可以選擇Binutils下載安裝,它包含了addr2line、ar、as、c++filt等多種工具程序,其中addr2line是負(fù)責(zé)將程序地址轉(zhuǎn)化為對(duì)應(yīng)的文件名與行號(hào)的;ar是用于建立、修改、提取歸檔數(shù)據(jù)的程序;as是為ar提取歸檔數(shù)據(jù)后生成gcc編譯器提供匯總文件環(huán)境的工具,以id連接器的形式來創(chuàng)建“ar匯總文件與符號(hào)引用之間的映射關(guān)系”;而c++filt是用來處理過濾java與c++符號(hào)的,避免多種代碼語(yǔ)言的函數(shù)在重載時(shí)出現(xiàn)邏輯沖突,為編譯操作提供兼容性保障。
第四步需要借助編譯器分析內(nèi)核的頭部文件,調(diào)取與目標(biāo)平臺(tái)適配函數(shù)的數(shù)據(jù)信息,除了要獲取內(nèi)核的頭部文件之外,還要合理的配置來重新對(duì)arm-linux頭部文件進(jìn)行定義。首先在kernel文件夾中找到格式為linux-2.6.10.tar.gz的內(nèi)核包文件,通過代碼指令:“# cd $PRJROOT/kernel # tar –xvzf linux-2.6.10.tar.gz”將其解壓在當(dāng)前位置,而后執(zhí)行 “# cd linux-2.6.10 # make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig ”命令正確配置內(nèi)核的頭部文件。配置完成后需要在內(nèi)核文件目錄中查找是否存在autoconf.h或version.h文件,確認(rèn)該文件已生成后方可退出保存。
第五步是在linux2.6.10內(nèi)核配置中設(shè)置合適的參數(shù),首先需要將配置完成的內(nèi)核頭文件復(fù)制到交叉編譯工具鏈中,而后安裝arm linux gcc工具進(jìn)行內(nèi)核與創(chuàng)建c庫(kù)的編譯工作。此時(shí)是系統(tǒng)第一次安裝arm交叉編譯工具,并未獲得glibc庫(kù)的交互支持,因此只能用來進(jìn)行內(nèi)核與不需要c庫(kù)支持的程序編譯,如bootloader的編譯修改。在使用arm linux gcc給CFLAGS設(shè)置操作參數(shù)前,需要通過-Dinhibit_libc-D__ gthr_ posix_h命令來將頭部文件屏蔽使用。內(nèi)核裁剪完成后,將一個(gè)簡(jiǎn)單的hello.c源文件編譯為可執(zhí)行,通過file命令來查看hello.c文件類型,來檢查交叉編譯工具鏈?zhǔn)欠裾?捎谩?/p>
結(jié)語(yǔ):綜上所述,工業(yè)自動(dòng)化儀表的嵌入式軟件系統(tǒng)構(gòu)建,主要是分為兩個(gè)部分:系統(tǒng)框架構(gòu)建與功能單元組建。而其中主要是應(yīng)用軟件復(fù)用技術(shù)與構(gòu)件技術(shù),使用這兩種技術(shù)進(jìn)行嵌入式軟件系統(tǒng)構(gòu)建時(shí),可以極大地縮減開發(fā)設(shè)計(jì)環(huán)節(jié)的重復(fù)工作量,保證嵌入式軟件系統(tǒng)的靈活性與規(guī)范性。而在系統(tǒng)構(gòu)建時(shí),無論是為構(gòu)件庫(kù)添加構(gòu)件還是單元區(qū)的構(gòu)建,結(jié)束后都要進(jìn)行測(cè)試,查找設(shè)計(jì)缺陷,降低或消除質(zhì)量風(fēng)險(xiǎn)。
參考文獻(xiàn):
[1]李學(xué)英,王永兵,徐學(xué)青.航天嵌入式軟件構(gòu)件管理研究[J].中國(guó)新通信,2021,23(03):65-66.
[2]陳志瑞.機(jī)械工程自動(dòng)化儀表裝置的應(yīng)用分析[J].科技創(chuàng)新與應(yīng)用,2021,11(27):172-173.
[3]劉國(guó)超,李春會(huì).工業(yè)自動(dòng)化儀表與自動(dòng)化控制技術(shù)的應(yīng)用研究[J].科技創(chuàng)新與應(yīng)用,2021,11(23):177-179.