北京中油瑞飛信息技術(shù)有限責(zé)任公司 黃 兵,郭月明,計(jì)小軍
一種基于軟PLC技術(shù)的通用可編程軟件系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)
北京中油瑞飛信息技術(shù)有限責(zé)任公司 黃 兵,郭月明,計(jì)小軍
針對(duì)傳統(tǒng)PLC難以構(gòu)建開放硬件體系結(jié)構(gòu)及性價(jià)比增長(zhǎng)緩慢的缺點(diǎn),提出了一種基于軟PLC技術(shù)的通用可編程軟件系統(tǒng)。該系統(tǒng)不僅符合IEC61131-3標(biāo)準(zhǔn),支持標(biāo)準(zhǔn)定義的5 種編程語言,而且用軟件實(shí)現(xiàn)le 傳統(tǒng)硬件PLC的控制功能。
軟PLC技術(shù);IEC61131-3;軟件系統(tǒng)
傳統(tǒng)PLC(Programmable Logic Controller)因其具有高速度、高性能和高可靠性在工業(yè)控制領(lǐng)域得到了廣泛應(yīng)用[1]。然而,傳統(tǒng)PLC由于生產(chǎn)廠商眾多、產(chǎn)品互不兼容,造成難以構(gòu)建開放的硬件體系結(jié)構(gòu);另外,PLC性價(jià)比增長(zhǎng)緩慢的特點(diǎn)也制約了其發(fā)展[2~3]。近年來,隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展以及PLC方面國(guó)際標(biāo)準(zhǔn)IEC61131的制定,一項(xiàng)新的控制技術(shù)——軟PLC(SoftPLC)技術(shù)迅速發(fā)展。所謂軟PLC,即以通用操作系統(tǒng)和PC作為硬件支撐平臺(tái),利用軟件實(shí)現(xiàn)傳統(tǒng)硬件PLC的控制功能?;蛘哒f,將PLC 的控制功能封裝在軟件內(nèi),運(yùn)行于PC環(huán)境或嵌入式操作系統(tǒng)環(huán)境中。這樣的控制系統(tǒng)不僅提供了PLC的相同功能,而且具備了PC機(jī)的各種優(yōu)點(diǎn)[4]。
本文實(shí)現(xiàn)了一個(gè)應(yīng)用于中大型控制應(yīng)用場(chǎng)合的通用PLC可編程軟件系統(tǒng)。該系統(tǒng)基于軟PLC技術(shù),且符合IEC61131-3 標(biāo)準(zhǔn),支持標(biāo)準(zhǔn)定義的5 種編程語言。
通用PLC可編程軟件系統(tǒng)實(shí)現(xiàn)軟PLC中的運(yùn)行系統(tǒng),整個(gè)系統(tǒng)由系統(tǒng)軟件和控制器軟件組成。
2.1 系統(tǒng)軟件
系統(tǒng)軟件主要包括bootloader、kernel和rootfs,其主要作用是構(gòu)建一個(gè)基本的嵌入式linux[5~8]操作系統(tǒng),為控制器軟件提供運(yùn)行環(huán)境。bootloader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。kernel通過文件系統(tǒng)來管理事件的調(diào)度和同步、進(jìn)程間的通信(消息傳遞)。文件系統(tǒng)是包括在一個(gè)磁盤(包括光盤、軟盤、閃盤及其它存儲(chǔ)設(shè)備)或分區(qū)的目錄結(jié)構(gòu);一個(gè)可應(yīng)用的磁盤設(shè)備可以包含一個(gè)或多個(gè)文件系統(tǒng);進(jìn)入一個(gè)文件系統(tǒng),首先要掛載(mount)文件系統(tǒng)且掛載(mount)文件系統(tǒng)時(shí)必須指定一個(gè)掛載點(diǎn)。Linux 中,rootfs是必不可少的。PC上主要實(shí)現(xiàn)有ramdisk和直接掛載HD(Harddisk,硬盤)上的根文件系統(tǒng);嵌入式中一般不從HD啟動(dòng),而是從Flash啟動(dòng),最簡(jiǎn)單的方法是將rootfs下載到RAM 的RAMDisk,較復(fù)雜的是在 Flash上分區(qū),并構(gòu)建JFFS2等文件系統(tǒng)。
2.2 控制器軟件
控制器軟件由eCLR模塊和I/O驅(qū)動(dòng)模塊組成,使用單一Makefile完成編譯工作,編程語言采用C和C++,交叉編譯工具為arm-linux-gcc/g++,最終生成名為elr22的可執(zhí)行程序。該程序總共包含一個(gè)庫文件和114個(gè)C/C++文件。
2.2.1 eCLR模塊程序基本流程分析
eCLR模塊執(zhí)行PLC應(yīng)用程序并創(chuàng)建任務(wù)。在每個(gè)任務(wù)的開始從輸入?yún)^(qū)獲取輸入狀態(tài),經(jīng)過運(yùn)算后,將結(jié)果存放在輸出區(qū),其流程圖如圖1所示。
圖1 eCLR模塊程序基本流程
由上圖可知,eCLR模塊程序基本流程可概括為7個(gè)步驟,分別是:
? 創(chuàng)建控制器對(duì)象,并為其分配堆資源;
? 設(shè)置控制器對(duì)象基本信息;
? 創(chuàng)建APP域用于運(yùn)行PLC應(yīng)用程序,設(shè)置數(shù)據(jù)堆、代碼堆和應(yīng)用程序流;
? 將APP域和pcoslib進(jìn)行鉤掛,便于eCLR解析PLC應(yīng)用程序;
? 初始化并加載I/O驅(qū)動(dòng)庫;
? 建立SOCKET,便于與運(yùn)行開發(fā)環(huán)境的宿主機(jī)進(jìn)行聯(lián)系;
? 順序執(zhí)行PLC應(yīng)用程序代碼。
2.2.2 I/O模塊程序基本流程分析
I/O驅(qū)動(dòng)模塊的任務(wù)是按照PLC應(yīng)用程序的需要將對(duì)應(yīng)的I/O設(shè)備狀態(tài)存放在輸入?yún)^(qū),并將輸出區(qū)的結(jié)果輸出到I/O模塊中,整個(gè)I/O驅(qū)動(dòng)模塊如圖2所示。
圖2 I/O驅(qū)動(dòng)模塊
由圖2可知,I/O驅(qū)動(dòng)模塊包括本地I/O和非本地I/O的驅(qū)動(dòng)。本地I/O指直接連接在本地CPU的I/O端口,包括AI/AO、DI/DO和PI;非本地I/O指通過MODUS TCP/RTU、ZIGBEE、CAN等有線/無線方式與RTU進(jìn)行通信的外接端口與儀表設(shè)備。
eCLR規(guī)定了對(duì)應(yīng)I/O驅(qū)動(dòng)接口文件的格式,相關(guān)驅(qū)動(dòng)接口文件由一個(gè)C#模板通過工具生成。目前除eCLR模塊代碼外剩余的代碼基本上都是I/O驅(qū)動(dòng)相關(guān)的代碼,每種I/O驅(qū)動(dòng)對(duì)應(yīng)三個(gè)文件,其形式為XXX-cli.cpp、XXX.cpp、XXX.h,對(duì)應(yīng)于圖2的I/O接口層。XXX-cli.cpp對(duì)于該種I/O驅(qū)動(dòng)庫的元數(shù)據(jù)信息,通過調(diào)用相應(yīng)INIT和loadlibary函數(shù)完成該種驅(qū)動(dòng)的注冊(cè)或者鉤掛,使得PLC應(yīng)用程序需要讀取的I/O組和下面的驅(qū)動(dòng)對(duì)應(yīng)起來。當(dāng)對(duì)I/O組的I/O進(jìn)行操作時(shí),相應(yīng)的I/O驅(qū)動(dòng)就會(huì)被調(diào)用。XXX.cpp和XXX.h實(shí)現(xiàn)對(duì)當(dāng)前驅(qū)動(dòng)的類定義,文件里提供了相應(yīng)I/O驅(qū)動(dòng)的成員函數(shù)供實(shí)現(xiàn),這些成員函數(shù)包括相應(yīng)I/O的讀寫和一些輔助函數(shù)。
目前代碼中已經(jīng)實(shí)現(xiàn)的I/O接口包括:
? 本地I/O:AI、AO、DI、DO和PI;
? 非本地I/O:ZIGBEE 、MODBUS和REMOTE(CAN)。
由于本地I/O可即時(shí)獲取,所以每當(dāng)PLC任務(wù)來讀取時(shí),可通過中間層直接調(diào)用BSP庫中接口函數(shù)操作硬件獲取。由于非本地I/O具有一定的數(shù)據(jù)間隔,因此需通過共享內(nèi)存的方式來實(shí)現(xiàn)。其實(shí)現(xiàn)原理為:對(duì)每種類型的非本地I/O創(chuàng)建一對(duì)共享內(nèi)存(分為I區(qū)和Q區(qū)),同時(shí)創(chuàng)建一個(gè)對(duì)應(yīng)的采集線程對(duì)數(shù)據(jù)進(jìn)行采集,并將采集到的數(shù)據(jù)存儲(chǔ)在共享內(nèi)存上供PLC應(yīng)用程序讀取。
整個(gè)通用PLC可編程軟件系統(tǒng)的運(yùn)行過程如圖3所示。
Design and Realization of General Programmable Software System Based on Soft PLC Technology
Aiming to the shortcomings of difficulty to build an open hardware system and the slow growth of cost performance, we design a general programmable software system based on soft PLC technology. The system can not only meet the IEC61131-3 criteria and support five kinds of programming languages, but also realize the control function of traditional hardware PLC with software.
Soft PLC technology; IEC61131-3; Software system