基于Linux系統(tǒng)的軟PLC設(shè)計(jì)
——
引言
可編程控制器(PLC,Programmable LogicController)經(jīng)過(guò)幾十年的發(fā)展,現(xiàn)在已經(jīng)成為了最重要、最可靠、應(yīng)用場(chǎng)合最廣泛的工業(yè)控制微型計(jì)算機(jī)。然而,人們?cè)谑褂眠^(guò)程中也逐漸發(fā)現(xiàn)了傳統(tǒng)PLC的缺點(diǎn):兼容性差,由于生產(chǎn)廠家眾多,各種機(jī)型互不兼容,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),難以構(gòu)造統(tǒng)一的硬件結(jié)構(gòu);封閉、擴(kuò)展能力差:產(chǎn)品能力的功能實(shí)現(xiàn)依賴硬件;對(duì)使用者的要求高:現(xiàn)行的PLC 產(chǎn)品,其編程方式要求使用者對(duì)PLC的硬件結(jié)構(gòu)、電器原理、編程指令都要有相當(dāng)?shù)牧私?;可維護(hù)性差:PLC 出現(xiàn)故障時(shí)需要專業(yè)人員用專業(yè)工具進(jìn)行檢測(cè)和維修;成本較高,傳統(tǒng)PLC 被幾家廠商所壟斷,性價(jià)比增長(zhǎng)緩慢。這些問(wèn)題都制約著傳統(tǒng)PLC 的發(fā)展。近年來(lái),工控領(lǐng)域的不少研究人員一直在尋求著解決這些問(wèn)題的途徑。隨著計(jì)算機(jī)軟硬件技術(shù)的發(fā)展及PLC 國(guó)際標(biāo)準(zhǔn)IEC61131-3的制定,在計(jì)算機(jī)上以軟件的方式來(lái)實(shí)現(xiàn)PLC 成為了發(fā)展的熱點(diǎn),這也就是軟PLC(Soft PLC)。
軟PLC介紹
軟PLC,也叫軟邏輯,是一種基于PC 機(jī)開(kāi)放結(jié)構(gòu)的控制裝置。軟PLC 綜合了計(jì)算機(jī)和PLC 的開(kāi)關(guān)量控制、模擬量控制、數(shù)學(xué)運(yùn)算、數(shù)值處理、通信網(wǎng)絡(luò)等功能,通過(guò)一個(gè)多任務(wù)的控制內(nèi)核,提供了強(qiáng)大的指令集、快速而準(zhǔn)確的掃描周期、可靠的操作和可連接的各種I/O 系統(tǒng)及網(wǎng)絡(luò)的開(kāi)放結(jié)構(gòu)。軟PLC 提供了硬PLC 的各種功能,同時(shí)具備了PC 的各種優(yōu)點(diǎn)。
基于PC 平臺(tái)的軟PLC 由于無(wú)需專門的編程器,因而可以充分利用PC 機(jī)的軟硬件資源,直接采用梯形圖或指令語(yǔ)言編程,并具有良好的人機(jī)界面,在數(shù)控系統(tǒng)中正逐漸取代硬件PLC,PLC 編程系統(tǒng)也正在逐步轉(zhuǎn)向占據(jù)軟件市場(chǎng)的PC 機(jī)。軟PLC 技術(shù)發(fā)展的一個(gè)重要條件就IEC61131-3 標(biāo)準(zhǔn)的制定。
20 世紀(jì)90 年代,IEC(國(guó)際電工委員會(huì))頒布了IEC61131 國(guó)際標(biāo)準(zhǔn),它的內(nèi)容涵蓋了PLC 整個(gè)生命周期的各個(gè)部分。IEC61131-3 是PLC 的語(yǔ)言標(biāo)準(zhǔn),它定義了5 種PLC 編程語(yǔ)言的規(guī)范,其中結(jié)構(gòu)化文本(ST)和指令表(IL)為文本語(yǔ)言,而順序功能圖(SFC)、梯形圖(LD)、功能模塊(FBD)為圖形語(yǔ)言。同時(shí),標(biāo)準(zhǔn)還允許在同一個(gè)程序中混合使用多種語(yǔ)言。IEC61131-3 標(biāo)準(zhǔn)由IEC 的SC65BW7工作組制定,它包括來(lái)自不同的PLC 制造商、軟件公司和用戶代表,實(shí)現(xiàn)了統(tǒng)一的編程標(biāo)準(zhǔn)。相對(duì)傳統(tǒng)PLC,軟PLC 解決了兼容性差、通用性差等問(wèn)題,具有了多方面的優(yōu)勢(shì):
(1) 硬件體系結(jié)構(gòu)不再是封閉的,用戶可以自己選擇合適的硬件來(lái)組成滿足要求的PLC。
?。?) PC 機(jī)廠家的競(jìng)爭(zhēng)激烈使得基于PC 機(jī)的軟PLC 性價(jià)比得以提高。
?。?) 軟PLC 不僅可以實(shí)現(xiàn)連接到私有的PLC 網(wǎng)絡(luò)中,而且可以通過(guò)PC 連接到計(jì)算機(jī)網(wǎng)絡(luò)上。
?。?) 由于軟PLC 是基于IEC61131-3 標(biāo)準(zhǔn)的,因此在掌握標(biāo)準(zhǔn)后就可以容易的進(jìn)行開(kāi)發(fā)了。
由于軟PLC 具有兼容性、通用性、性價(jià)比高、易于與網(wǎng)絡(luò)連接、編程方便等優(yōu)點(diǎn)。因而,目前世界各國(guó)都在進(jìn)行軟PLC 的研究。國(guó)際上,已經(jīng)有了一些比較成熟和影響比較大的產(chǎn)品:如德國(guó)KW -sofeware 公司的MULTIPROG wt32、倍福TwinCAT控制軟件TwinCAT PLC、法國(guó)CJ International公司的ISaGRAF 軟件包、PCSoft International 公司的WinPLC、美國(guó)Wizdom Control Intellution 公司的Paradym-31 等等。而國(guó)內(nèi)有關(guān)部門和工控方面的公司也正在著手研究開(kāi)發(fā)具有自主版權(quán)的中文軟PLC產(chǎn)品。
軟PLC設(shè)計(jì)平臺(tái)
硬件工作平臺(tái)
軟PLC 的期待硬件工作平臺(tái)為工控機(jī)等PC 工業(yè)微機(jī)平臺(tái)和嵌入式PC 平臺(tái)。本設(shè)計(jì)因需要應(yīng)用于嵌入式的數(shù)控系統(tǒng)中,所以采用了嵌入式PC 平臺(tái)。嵌入式PC 是將PC 機(jī)的主要硬件集中在一張信用卡大小的主板上,將操作系統(tǒng)和應(yīng)用軟件存儲(chǔ)在Flash芯片中。嵌入式PC 與標(biāo)準(zhǔn)PC 全兼容,采用與標(biāo)準(zhǔn)PC 相同的硬件結(jié)構(gòu)和軟件結(jié)構(gòu)。因而,嵌入式PC在理論上能完成與普通PC 系統(tǒng)的工作。因而,我們可以在普通PC上做好設(shè)計(jì)和開(kāi)發(fā),再將軟件移植到嵌入式PC 上。
嵌入式PC 包括單板計(jì)算機(jī)(SBC)、PC/104 計(jì)算機(jī)和餅干機(jī),本設(shè)計(jì)采用的是嵌入式PC104 計(jì)算機(jī)。嵌入式PC/104 組件尺寸小,標(biāo)準(zhǔn)化,模塊化程度高,采用層疊式結(jié)構(gòu),通過(guò)在CPU 板的基礎(chǔ)上堆疊擴(kuò)展板構(gòu)成一個(gè)完整的計(jì)算機(jī)系統(tǒng)。PC104 的擴(kuò)展板齊全,包括了網(wǎng)卡、數(shù)字I/O 卡、A/D 卡等。在PC104 上構(gòu)造的系統(tǒng)即嵌入式軟PLC 可擴(kuò)展性好,標(biāo)準(zhǔn)化和模塊化程度高。
現(xiàn)今PC104 的硬件水平可以達(dá)到P2 或者P3 一級(jí),CPU 速度足夠快,內(nèi)存可到128M,程序存儲(chǔ)空間可以選用CF 卡作為硬存儲(chǔ)空間,可以達(dá)到128M,且可通過(guò)PC104 接口擴(kuò)展其硬件I/O 能力,可增加軟PLC 的I/O 口,豐富的硬件資源完全可以滿足運(yùn)行軟PLC 的需要。這也使得設(shè)計(jì)時(shí)完全可以在普通PC 上,在LINUX 內(nèi)核下對(duì)軟PLC 的各個(gè)模塊進(jìn)行調(diào)試,調(diào)試成功再移植到PC104 組件上運(yùn)行。
軟件平臺(tái)
目前,大多數(shù)軟PLC 分別以Windows, DOS 和Linux 系統(tǒng)為操作平臺(tái)。早期的基于PC 的軟PLC 采用的較多的是DOS 系統(tǒng),這類軟件由于運(yùn)行DOS 環(huán)境下,可以輕松實(shí)現(xiàn)其實(shí)時(shí)控制的要求,但由于DOS 環(huán)境是單任務(wù)處理方式,使得PC 的潛力得不到充分發(fā)揮,系統(tǒng)的功能和靈活性也受到限制。而Windows 具有操作界面良好、程序開(kāi)發(fā)相對(duì)容易、多任務(wù)等優(yōu)點(diǎn),但Windows 操作系統(tǒng)并不是一個(gè)理想的實(shí)時(shí)操作系統(tǒng),且Windows 操作系統(tǒng)是收費(fèi)的,這將大大增加開(kāi)發(fā)應(yīng)用的成本。因而,本設(shè)計(jì)配合數(shù)控系統(tǒng)的需要選用的是Linux 系統(tǒng)為操作平臺(tái),基于Linux 內(nèi)核模塊的Rtlinux 是一個(gè)免費(fèi)的、開(kāi)放源代碼的實(shí)時(shí)操作系統(tǒng)。
軟PLC模塊設(shè)計(jì)
本設(shè)計(jì)的軟PLC 基于嵌入式PC104 計(jì)算機(jī),建立在Linux 操作系統(tǒng)之上,軟件的設(shè)計(jì)采用了模塊化設(shè)計(jì)。每個(gè)模塊都專職一項(xiàng)功能,每個(gè)模塊都是一個(gè)進(jìn)程。軟PLC 全局變量是所有模塊的公共數(shù)據(jù),由配置文件設(shè)定。各個(gè)模塊通過(guò)全局變量進(jìn)行通信,各個(gè)模塊的私有數(shù)據(jù)不包含在配置文件內(nèi)。全局變量在每個(gè)模塊都有副本,各個(gè)模塊通過(guò)副本的數(shù)據(jù)對(duì)本模塊進(jìn)行運(yùn)算,當(dāng)循環(huán)一次運(yùn)算后,就更新到全局變量,這樣就實(shí)現(xiàn)了各個(gè)模塊之間的通信。每個(gè)模塊對(duì)全局變量的讀寫權(quán)限不一樣的,只有對(duì)全局變量具有寫權(quán)限的模塊才可以更新全局變量里的數(shù)據(jù)。每個(gè)模塊作為一個(gè)進(jìn)程,進(jìn)程之間的通信采用的是共享內(nèi)存進(jìn)行通信。軟PLC 各模塊之間的結(jié)構(gòu)框圖如圖1 所示:
(1) 主程序(main program),啟動(dòng)軟PLC,將首先運(yùn)行主程序,主程序?qū)⒆x取配置文件上的內(nèi)容,并運(yùn)行配置文件上所設(shè)定的模塊。
(2) 配置文件(configurefile),在軟PLC 中具有核心的地位,它由幾部分組成:
?、佘汸LC 配置,在這部分設(shè)置了內(nèi)核和各個(gè)模塊的相關(guān)參數(shù),
主要包括:模塊列表,列出了要運(yùn)行的模塊;變量列表,列出了軟PLC 中的全局變量,并定義了具有對(duì)應(yīng)全局變量有寫權(quán)限的模塊。
② 公共配置,這部分設(shè)置了各個(gè)模塊之間的共同屬性。
?、?nbsp;同步配置,這部分是要配制各個(gè)模塊之間的同步性。為了保證數(shù)據(jù)的傳輸,必須讓模塊之間同步。
?、?nbsp;實(shí)時(shí)性配置,軟PLC 可以運(yùn)行在3 種模式:正常模式、軟實(shí)時(shí)模式和硬實(shí)時(shí)模式,設(shè)計(jì)時(shí)可以根據(jù)具體情況選擇其中的一種模式。
對(duì)于每個(gè)具體的設(shè)計(jì)來(lái)說(shuō),需要對(duì)配置文件中的幾個(gè)部分進(jìn)行配置。
(3) 人機(jī)界面模塊(HMI),用戶和軟PLC 之間的互動(dòng)模塊。通過(guò)友好的人機(jī)界面,用戶可以控制軟PLC 的調(diào)用和開(kāi)關(guān),同時(shí)可以查看軟PLC 各個(gè)狀態(tài)點(diǎn)的狀態(tài)。在Linux 下,可以使用GTK 或者TCL/TK 進(jìn)行設(shè)計(jì)。本設(shè)計(jì)由于整個(gè)數(shù)控系統(tǒng)的需要,采用了TCL/TK 進(jìn)行設(shè)計(jì)。因?yàn)檐汸LC 的其他部分是用c語(yǔ)言進(jìn)行設(shè)計(jì),因而在用tcl/tk設(shè)計(jì)的人機(jī)界面模塊和軟PLC 之間,需要設(shè)計(jì)一個(gè)TCL/TK 的擴(kuò)展模塊作為兩種語(yǔ)言之間的接口,這樣在界面上就可以用TCL 語(yǔ)言調(diào)用C 語(yǔ)言編寫的軟PLC 函數(shù)?,F(xiàn)階段本設(shè)計(jì)主要完成了常用的PLC 圖形語(yǔ)言梯形圖和兩種文本語(yǔ)言IL 語(yǔ)言和ST 語(yǔ)言的設(shè)計(jì),因而人機(jī)界面可以分為兩種,梯形圖的編輯運(yùn)行界面和文本編程的監(jiān)控界面。
?、?nbsp;梯形圖界面(如圖2)。在梯形圖界面上,用戶可自由拖動(dòng)如開(kāi)關(guān)、計(jì)時(shí)器等各種器件進(jìn)行自主編程,從而實(shí)現(xiàn)在線編程。在界面上右側(cè)是狀態(tài)欄,可以對(duì)各種狀態(tài)點(diǎn)的控制和狀態(tài)顯示,如將狀態(tài)點(diǎn)B1 狀態(tài)置1,則需單擊B1 前的小方框。界面的上方是菜單欄。用戶可通過(guò)菜單的選擇進(jìn)行編輯、保存、打開(kāi)等功能,編輯完畢,按下Run 鍵,TCL/TK 的底層程序?qū)?huì)檢測(cè)狀態(tài)點(diǎn)狀態(tài),并根據(jù)元件種類進(jìn)行邏輯運(yùn)算,這些直接使用TCL/TK 編程就可以實(shí)現(xiàn)。而Exit 鍵則是退出軟PLC,當(dāng)按下該鍵時(shí),將會(huì)設(shè)置全局變量Quit = 1 并傳遞給關(guān)閉模塊Plcshutdown。關(guān)閉模塊將關(guān)閉所有在運(yùn)行的軟PLC模塊,并殺死共享內(nèi)存上的信號(hào)量。
② 文本編程監(jiān)控界面。文本語(yǔ)言相對(duì)不夠圖形語(yǔ)言直觀,設(shè)計(jì)監(jiān)控界面,可以從監(jiān)控界面上調(diào)用所需要的文本程序,同時(shí)對(duì)各個(gè)狀態(tài)點(diǎn)的狀態(tài)進(jìn)行顯示和控制。
(4) 文本編輯模塊,用戶PLC文本程序的編輯模塊,使用文本編輯器即可實(shí)現(xiàn)。用戶使用符合61131-3 標(biāo)準(zhǔn)的編程語(yǔ)言編寫控制應(yīng)用程序。編輯好的模塊將會(huì)被軟PLC 的編譯器所編譯,生成可執(zhí)行代碼。
(5) 邏輯模塊,軟PLC 的核心模塊,它包括IEC61131-3編譯器和數(shù)據(jù)處理模塊。IEC61131-3編譯器將編譯用戶編輯好的文本應(yīng)用程序,首先將PLC 的代碼編譯成C 語(yǔ)言,然后再調(diào)用GCC 將程序和軟PLC的鏈接庫(kù)編譯成目標(biāo)文件,同時(shí)顯示編譯結(jié)果的正確性,將編譯的錯(cuò)誤信息及警告信息反饋給用戶。
文本編輯模塊與編譯模塊在軟PLC 運(yùn)行時(shí),不會(huì)作為調(diào)用模塊。軟PLC只調(diào)用最后生成的可執(zhí)行模塊。數(shù)據(jù)處理模塊執(zhí)行對(duì)各種浮點(diǎn)型數(shù)據(jù)的操作,功能包括PID控制、按一定的比例縮放數(shù)據(jù)大小等。
(6) 通信模塊(Communication module),主要負(fù)責(zé)軟件的網(wǎng)絡(luò)通信協(xié)議等的實(shí)現(xiàn),借助與操作系統(tǒng)的結(jié)合構(gòu)建網(wǎng)絡(luò)服務(wù)器,實(shí)現(xiàn)強(qiáng)大的網(wǎng)絡(luò)服務(wù)功能,實(shí)現(xiàn)Modbus 等總線協(xié)議的總線控制功能。
(7) I/O 模塊,軟PLC與物理IO連接的模塊。通過(guò)IO 模塊,軟PLC 的狀態(tài)點(diǎn)與硬件的IO 點(diǎn)一一對(duì)應(yīng),軟PLC 可以通過(guò)IO 模塊直接讀寫PC104 上IO擴(kuò)展板的IO 點(diǎn),實(shí)現(xiàn)對(duì)I O 點(diǎn)的讀取和控制。
( 8 ) 關(guān)閉模塊(Plcshutdown),由于本設(shè)計(jì)采用了多模塊化設(shè)計(jì)和共享內(nèi)存通信機(jī)制。因而軟PLC退出,需要關(guān)閉所有正在運(yùn)行的模塊和殺死共享內(nèi)存上的信號(hào)量。關(guān)閉模塊提供了Quit的全局變量, 當(dāng)Quit=1,將運(yùn)行關(guān)閉模塊中的程序關(guān)閉所有的軟PLC 模塊和殺死共享內(nèi)存的信號(hào)量。
以上是根據(jù)需要設(shè)計(jì)的一些模塊,根據(jù)用戶需要還可以增加一些模塊,如記錄模塊,數(shù)據(jù)庫(kù)連接模塊等,這些模塊將會(huì)記錄軟PLC 的工作記錄和保存軟PLC 的數(shù)據(jù)記錄。這些有待進(jìn)一步的開(kāi)發(fā)和設(shè)計(jì)。設(shè)計(jì)好各個(gè)模塊,軟PLC 的工作流程可如圖3 所示。
本設(shè)計(jì)是在Linux 下進(jìn)行設(shè)計(jì),除HMI 模塊是使用TCL/TK 設(shè)計(jì)外,其他均是使用C 語(yǔ)言進(jìn)行編寫,在Linux 下使用GCC 進(jìn)行編譯。由于篇幅所限,此處不展示代碼。
實(shí)例
下面以一個(gè)簡(jiǎn)單的對(duì)3并口通道循環(huán)控制為例,說(shuō)明軟PLC 的工作流程。
?。?)梯形圖編程。從軟PLC 主界面進(jìn)入后,啟動(dòng)梯形圖編程,調(diào)用梯形圖編程的主程序。梯形圖編程共需要調(diào)用梯形圖界面模塊、關(guān)閉模塊、IO 模塊,這些均在配置文件中設(shè)置好,不需用戶進(jìn)行設(shè)置。配置文件主要部分定義如下:
需運(yùn)行的模塊: 主要狀態(tài)點(diǎn)定義:Ladder為擁有寫的權(quán)利模塊,主程序啟動(dòng)后,將讀取對(duì)應(yīng)的配置文件,運(yùn)行所需模塊。
用戶即可在梯形圖界面進(jìn)行編輯,編輯后的梯形圖程序如圖4所示。這是一個(gè)比較簡(jiǎn)單的程序,因而只需要使用3個(gè)計(jì)時(shí)器和幾個(gè)復(fù)位、置位輸出就可以實(shí)現(xiàn)功能。編輯好梯形圖程序后,按下Run 鍵,程序即可運(yùn)行,并實(shí)現(xiàn)對(duì)IO 板上對(duì)應(yīng)端口的控制。
(2)文本IL 語(yǔ)言編程。開(kāi)始與梯形圖編程相同,從軟PLC 主界面進(jìn)入后,啟動(dòng)IL 語(yǔ)言編程,調(diào)用主程序。文本編程共需要調(diào)用監(jiān)控界面模塊、邏輯目標(biāo)程序模塊、關(guān)閉模塊、IO 模塊。邏輯目標(biāo)模塊為用戶編輯好的IL 程序,并通過(guò)編譯器生成的可執(zhí)行邏輯程序,用戶可在PC 機(jī)上編輯和編譯好邏輯程序,再移植到PC104 上進(jìn)行調(diào)用。配置文件主要部分定義如下:
需運(yùn)行的模塊:
主要狀態(tài)點(diǎn)定義:
為編譯后的IL 程序模塊。由于篇幅關(guān)系,實(shí)現(xiàn)循環(huán)控制的IL 程序在此處不再列出。
結(jié)束語(yǔ)
軟PLC 具有強(qiáng)大的功能,在工業(yè)控制中發(fā)揮著越來(lái)越重要的作用,是一項(xiàng)具有巨大潛力的技術(shù),其強(qiáng)大的網(wǎng)絡(luò)功能是傳統(tǒng)的PLC 無(wú)法比擬的。中國(guó)工業(yè)自動(dòng)化的水平相對(duì)國(guó)外來(lái)說(shuō)較低,技術(shù)含量少。因而國(guó)內(nèi)企業(yè)要在激烈的競(jìng)爭(zhēng)中立于不敗之地,必須增加生產(chǎn)的自動(dòng)化程度,提高產(chǎn)品的技術(shù)含量。發(fā)展自主產(chǎn)權(quán)的軟PLC 將對(duì)此問(wèn)題產(chǎn)生有力的推動(dòng)作用,也有助于我國(guó)PLC 企業(yè)發(fā)展本國(guó)市場(chǎng)并向外擴(kuò)展。
評(píng)論