高 琛,陳文薌
(廈門大學(xué) 物理與機(jī)電工程學(xué)院,福建 廈門 361005)
可編程控制器(Programmable logic Controller,PLC)是為工業(yè)控制應(yīng)用而設(shè)計制造的,是一項(xiàng)實(shí)用性很強(qiáng)的成熟技術(shù),然而,PLC也有一些不足,如:生產(chǎn)商之間的產(chǎn)品不兼容,造成難以構(gòu)建開放的硬件體系結(jié)構(gòu);各廠商的編程方法差別很大,技術(shù)專有性較強(qiáng),開發(fā)人員須專業(yè)培訓(xùn)才能掌握某種產(chǎn)品的編程方法[1]。實(shí)際生產(chǎn)中常碰到這樣的情況:1)不需要PLC的全部功能,同時要求邏輯控制器的成本較低,這時若采用現(xiàn)成的PLC很難實(shí)現(xiàn)低成本的要求;2)要求配置控制器的輸入和輸出關(guān)系比較簡單,普通的操作人員就可以就進(jìn)行輸入和輸出關(guān)系的配置。在碰到這類情況時,如果能有一種新型的邏輯控制能具備結(jié)構(gòu)簡單,不需要復(fù)雜編程就能工作的話,傳統(tǒng)PLC有各自的編程方法,有其技術(shù)專有性,普通的操作人員比較難掌握,所以傳統(tǒng)的PLC難以到達(dá)要求。
本文以工控領(lǐng)域的一些低成本、分布式、易操作應(yīng)用場合的需求為基礎(chǔ),研究一種基于邏輯分析的分布式PLC實(shí)現(xiàn)方案。通過對工業(yè)設(shè)備信息流數(shù)學(xué)模型的分析,本系統(tǒng)采用邏輯表達(dá)式解析算法實(shí)現(xiàn)了PLC[2]的可編程邏輯功能;采用CAN總線拓展了網(wǎng)絡(luò)功能,實(shí)現(xiàn)分布式結(jié)構(gòu);采用向?qū)浇缑妫鰪?qiáng)其易操作性;通過強(qiáng)化軟件功能,裁剪硬件,降低成本以及系統(tǒng)的復(fù)雜性。控制器的開關(guān)量輸入輸出配置簡單方便,不需要掌握梯形圖等編程語言,只需了解輸入輸出的邏輯關(guān)系,即可進(jìn)行相關(guān)的配置。
一個控制系統(tǒng)可以看成由若干個節(jié)點(diǎn)通過總線連接形成的,每一個節(jié)點(diǎn)帶有若干個輸入和若干個輸出,圖1表示了分布式PLC基本拓?fù)鋱D。
圖1 分布式PLC基本拓?fù)鋱DFig.1 Basic topology of distributed PLC
圖中編程機(jī)是作為編程用的,編程結(jié)束后可脫離系統(tǒng)。假設(shè)任意一個節(jié)點(diǎn)的任意一個輸出都能響應(yīng)任意一個節(jié)點(diǎn)的任意一個輸入,則這些輸出可表達(dá)為一個邏輯關(guān)系式:
Ujk=fjk(IN11,IN12, … IN1m,IN21,IN22, … ,IN2m, … ,INn1,INn2,INnm)
對于任意一個節(jié)點(diǎn),只要能夠完成對該節(jié)點(diǎn)輸出的邏輯關(guān)系式的解析,就能完成他的編程。這樣,在設(shè)計一個實(shí)用的控制系統(tǒng)時,所要做的就是對每一節(jié)點(diǎn)的每一個輸出的邏輯解析式進(jìn)行解析,我們稱這個邏輯解析程序?yàn)樵撦敵鳇c(diǎn)的驅(qū)動程序。
為了實(shí)現(xiàn)這個思想,節(jié)點(diǎn)可按圖2設(shè)計。
圖2 節(jié)點(diǎn)設(shè)計框圖Fig.2 Diagram of node design
如圖,節(jié)點(diǎn)的工作任務(wù)可分為3大塊:
1)本節(jié)點(diǎn)輸入采集,并把采集到的數(shù)據(jù)打包后通過CAN通訊總線廣播到系統(tǒng)的其它節(jié)點(diǎn)。
2)CAN通訊管理[3-4],按照一定的節(jié)拍將本節(jié)點(diǎn)的輸入數(shù)據(jù)廣播道CAN總線,接收其它節(jié)點(diǎn)廣播的數(shù)據(jù),定期刷新輸入列表。
3)根據(jù)輸入列表進(jìn)行輸出邏輯解析,解析結(jié)構(gòu)經(jīng)由驅(qū)動電路輸出。
工業(yè)設(shè)備信息流模型如圖3所示。
圖3 工業(yè)設(shè)備信息流Fig.3 Information flow of industrial equipment
工業(yè)設(shè)備有各種形式的輸入和輸出,最典型的就是開關(guān)量的輸入和輸出,我們把輸入抽象成INi,輸出抽象成OUTi,輸入和輸出之間必然有某種函數(shù)關(guān)系。
如圖4所示,以某機(jī)床為例:此機(jī)床主軸由一臺籠型電動機(jī)帶動,潤滑油泵由另一臺電動機(jī)帶動。主軸需要在總開關(guān)按下并且油泵開動后才能開動;油泵需要在總開關(guān)按下后才能開動。邏輯表示為:
主軸電機(jī)=總開關(guān)+主軸開關(guān)+油泵開關(guān);
油泵開關(guān)=總開關(guān)+油泵開關(guān)。
圖4 主軸控制器示意圖Fig.4 Schematic diagram of spindle controller
若將主軸電機(jī)定義為y1,潤滑油泵電機(jī)定義為 y2,總開關(guān)定義為x1,主軸開關(guān)定義為x2,潤滑油泵開關(guān)定義為x3,則:根據(jù)以上分析,任何一個輸出yi都是輸入xi的函數(shù),即
擴(kuò)展到多個設(shè)備聯(lián)網(wǎng)的系統(tǒng),此時每個設(shè)備都有一組輸入和一組輸出,則所有輸入構(gòu)成一個輸入矩陣X,所有輸出構(gòu)成一個輸出矩陣Y,此時的系統(tǒng)數(shù)學(xué)模型變成如圖5結(jié)構(gòu)。
圖5 系統(tǒng)數(shù)學(xué)模型Fig.5 Mathematical model of system
即:
假設(shè)有m個設(shè)備,每個設(shè)備有n個輸入,n個輸出,則展開變成:
分布式PLC系統(tǒng)在運(yùn)行過程中的主要功能是完成自診斷、輸入處理、執(zhí)行解析程序和輸出處理等工作,實(shí)現(xiàn)最終的控制功能。運(yùn)行過程中,節(jié)點(diǎn)間需要保持CAN通信的正常,所以需要進(jìn)行自診斷判斷CAN通信是否正常,如果通信出現(xiàn)異常則停止系統(tǒng)的運(yùn)行,并發(fā)出警報。節(jié)點(diǎn)掃描開關(guān)量輸入的狀態(tài),并把采集到的數(shù)據(jù)打包后通過CAN通訊總線廣播到系統(tǒng)的其它節(jié)點(diǎn)。為減少CAN總線的通信量,節(jié)點(diǎn)只有在檢測到開關(guān)量的輸入狀態(tài)發(fā)生變化時才向其他節(jié)點(diǎn)發(fā)送新的開關(guān)量輸入的狀態(tài)。當(dāng)輸入狀態(tài)發(fā)生變化時,節(jié)點(diǎn)根據(jù)新的輸入列表進(jìn)行邏輯解析,更新輸出狀態(tài)。
系統(tǒng)的運(yùn)行流程如圖6所示。
圖6 運(yùn)行流程圖Fig.6 Flow chart of operation
系統(tǒng)的運(yùn)行流程包括初始化、自診斷、輸入采樣、執(zhí)行解析程序和輸出更新等部分。
1)初始化 初始化的主要功能是初始化中斷系統(tǒng)、定時器和IO系統(tǒng)等,在內(nèi)存中規(guī)劃出程序存儲區(qū)和數(shù)據(jù)存儲區(qū),設(shè)定好正確的運(yùn)行環(huán)境,為運(yùn)行操作奠定基礎(chǔ)。
2)自診斷 自診斷的功能是節(jié)點(diǎn)之間的CAN通信是否正常。節(jié)點(diǎn)按順序向CAN總線廣播帶有本節(jié)點(diǎn)地址的標(biāo)識幀。如果每個節(jié)點(diǎn)收到了全部其他節(jié)點(diǎn)的標(biāo)識幀,就說明系統(tǒng)的通信正常。否則,說明CAN通信出現(xiàn)異常,系統(tǒng)就會發(fā)出警報,同時停止運(yùn)行系統(tǒng)。
3)輸入采樣 輸入采樣的功能是采集開關(guān)量的輸入狀態(tài),并與前一次采樣結(jié)果進(jìn)行比較,如果輸入狀態(tài)發(fā)生變化,則將新的輸入狀態(tài)打包后通過CAN通訊總線廣播到系統(tǒng)的其它節(jié)點(diǎn)。
4)執(zhí)行解析程序 解析程序其實(shí)就是根據(jù)控制需要所設(shè)置的開關(guān)量輸入輸出邏輯關(guān)系。當(dāng)節(jié)點(diǎn)收到新的輸入狀態(tài)時,就表示出狀態(tài)需要更新。節(jié)點(diǎn)就會調(diào)用解析程序函數(shù),根據(jù)新的輸入狀態(tài)計算輸出要求,然后按照新的輸出要求更新輸出狀態(tài)。
5)輸出更新 當(dāng)解析程序執(zhí)行完后,節(jié)點(diǎn)會根據(jù)執(zhí)行結(jié)果更新輸出狀態(tài),然后通過隔離電路,向外輸出24 V控制信號,從而驅(qū)動外部設(shè)備完成相應(yīng)的控制功能。
輸入采集的功能是采集I/O端口的輸入狀態(tài),采集的是開關(guān)量信號,如按鈕、轉(zhuǎn)換開關(guān)、行程開關(guān)、繼電器觸點(diǎn)等開關(guān)量的輸入信號。在節(jié)點(diǎn)的存儲器內(nèi)開辟了I/O映像存儲區(qū),用于存放I/O信號的狀態(tài),分別稱為輸入映像表和輸出映像表。I/O映像區(qū)的大小由PLC的系統(tǒng)程序確定,對于系統(tǒng)的每一個輸入點(diǎn)總有一個輸入映像表的某一位與之相對應(yīng),對于系統(tǒng)的每一個輸出點(diǎn)也都有輸出映像表的某一位與之相對應(yīng)。在輸入采集階段,節(jié)點(diǎn)將采集到的輸入信號狀態(tài)存放在輸入映像表對應(yīng)的位上,經(jīng)過邏輯解析之后將,運(yùn)算結(jié)果存放到輸出映像表對應(yīng)的位上。
I/O映像區(qū)的建立使PLC工作時只和存儲內(nèi)有關(guān)地址單元內(nèi)所存的狀態(tài)數(shù)據(jù)發(fā)生關(guān)系,而系統(tǒng)輸出也只是給內(nèi)存某一地址單元設(shè)定一個狀態(tài)數(shù)據(jù)。這樣加快了程序執(zhí)行速度,而且使控制系統(tǒng)與外界隔開,提高了系統(tǒng)的抗干擾能力。
輸入采集按一定的周期循環(huán)采集I/O端口的輸入狀態(tài),并把采集到的數(shù)據(jù)打包后通過CAN通訊總線廣播到系統(tǒng)的其它節(jié)點(diǎn)。為了減少CAN總線的通信量,節(jié)點(diǎn)只有在檢測到輸入狀態(tài)發(fā)生變化時才將新的輸入狀態(tài)數(shù)據(jù)打包,通過CAN總線廣播給其他節(jié)點(diǎn),通知其他節(jié)點(diǎn)I/O輸入狀態(tài)有發(fā)生變化,要進(jìn)行輸入映像表的更新。
表達(dá)式有3種表示形式:前序式、中序式和后序式。人們已經(jīng)習(xí)慣了的表達(dá)式是中序式,即運(yùn)算符放在兩個操作數(shù)之間,用戶進(jìn)行用戶程序編程時所用邏輯表達(dá)式就是中序式[5]。
但對于計算機(jī)而言,中序式并不適合于求值計算,所以在編譯系統(tǒng)中往往將中序式轉(zhuǎn)化為前序式或后序式,然后對轉(zhuǎn)化后的前序式或后序式進(jìn)行求值。本文是將中序的邏輯表達(dá)式轉(zhuǎn)化為后序式,然后將后序式進(jìn)行存儲。在執(zhí)行用戶程序時,根據(jù)開關(guān)量輸入狀態(tài),對后序式進(jìn)行求值,得出開關(guān)量輸出狀態(tài)。
中序式轉(zhuǎn)化為后序式[6-7]是基于堆棧進(jìn)行的。轉(zhuǎn)化過程需要用到一個工作棧OPERATOR,用來存放操作符。和一個數(shù)組RESULT,用來存放轉(zhuǎn)化結(jié)果。中序式轉(zhuǎn)化為后序式的算法是:
1)創(chuàng)建并初始化工作棧和數(shù)組:OPERATOR和RESULT;
2)從左到右逐個字符的讀入中序表達(dá)式;
3)如果字符是數(shù)字,將數(shù)字字符存到RESULT中;
4)如果是“(”,直接存放到 OPERATOR 中;
5)如果是“)”,在遇到“(”之前,循環(huán)彈出 OPERATOR 中的運(yùn)算符,并存放到RESULT中;
6)如果是運(yùn)算符,循環(huán)將OPERATOR中的運(yùn)算符彈出,直到該運(yùn)算符比OPERATOR棧頂?shù)倪\(yùn)算符優(yōu)先等級高或OPERATOR為空時,將該運(yùn)算符存入OPERATOR中;
7)如果中序表達(dá)未掃描完成,則跳到3)繼續(xù)執(zhí)行;
8)如果中序表達(dá)掃描完成,OPERATOR中還有運(yùn)算符,則依次將運(yùn)算符彈出,存入RESULT中,直到OPERATOR為空。此時,中序表達(dá)式就轉(zhuǎn)化為后序表達(dá)式。
如表1所示的就是將中序邏輯表達(dá)式 (1&2|3)&4轉(zhuǎn)化為后續(xù)表達(dá)式的過程。
表1 中序式轉(zhuǎn)后序式實(shí)例Tab.1 Instance of infix expression into postfix expression
中序表達(dá)式轉(zhuǎn)化為后序表達(dá)式后,將后序表達(dá)式進(jìn)行存儲。在執(zhí)行用戶程序時,對相應(yīng)的后序式進(jìn)行求值,即可得出開關(guān)量輸出狀態(tài)。對后序表達(dá)式求值只需要一個運(yùn)算數(shù)棧OPERAND,后序表達(dá)式求值的算法是:
1)創(chuàng)建并初始化運(yùn)算數(shù)棧OPERAND;
2)使用循環(huán)從左往右逐個掃描后序表達(dá)式;
3)如果是運(yùn)算數(shù),則存入到OPERAND中;
4)如果是運(yùn)算符,則從OPERAND中彈出所需的運(yùn)算數(shù),執(zhí)行相應(yīng)的邏輯運(yùn)算,將運(yùn)算結(jié)果再存入OPERAND中;
5)后序表達(dá)式掃描完成后,OPERAND中的值就是后序表達(dá)式求值的結(jié)果。
如表2所示的是對后序表達(dá)式123&|4&進(jìn)行求值的過程,設(shè)各個運(yùn)算數(shù)的邏輯狀是:1=1,2=0,3=1,4=0。
表2 后序式求值實(shí)例Tab.2 Instance of postfix expression evaluation
跟解析程序緊密相關(guān)的有兩張關(guān)鍵的表:輸入映象表和任務(wù)表(如表3和表4)。輸入映象表記錄了系統(tǒng)所有開關(guān)量輸入的狀態(tài),任務(wù)表則映射了每個開關(guān)量輸出跟所有開關(guān)量輸入的邏輯關(guān)系,每個開關(guān)量輸出都有一張跟自己相對應(yīng)的任務(wù)表,表里存儲的是已經(jīng)轉(zhuǎn)化成后序表達(dá)式的用戶程序。
表3 任務(wù)表Tab.3 Task table
表4 輸入映象表Tab.4 Input image table
任務(wù)表和輸入映象表中,OUT1,OUT2,……,OUTn表示對應(yīng)編號的開關(guān)量輸入,IN1,IN2,……,INn表示對應(yīng)編號的開關(guān)量輸入,OP1,OP2,……,OPn表示邏輯運(yùn)算符。編號為n的開關(guān)量輸入和所有輸出的關(guān)系可用表達(dá)式表示為:
OUTn=F(IN1,IN2,……INn)
式中F()表示的開關(guān)量輸出和開關(guān)量輸入的邏輯關(guān)系。
對開關(guān)量輸入輸出的邏輯關(guān)系進(jìn)行配置時,是通過輸入相應(yīng)的邏輯表達(dá)式實(shí)現(xiàn)的。如想設(shè)置OUT1的狀態(tài)由IN1和IN2相與的結(jié)果決定的,則可輸入表達(dá)式OUT1=IN1&IN2,設(shè)IN1=1,IN2=0,則OUT1=0。如圖7所示為用戶程序的執(zhí)行的框圖。
圖7 解析程序執(zhí)行框圖Fig.7 Implementation block diagram of analysis procedure
本文針對傳統(tǒng)PLC的一些局限性,提出一種以工控領(lǐng)域的一些低成本、分布式、易操作應(yīng)用場合的需求為基礎(chǔ)的基于邏輯分析的分布式PLC實(shí)現(xiàn)方案[8-9],實(shí)現(xiàn)了開關(guān)量輸入/輸出、模擬采集和輸出控制等功能?;趯I(yè)設(shè)備信息流數(shù)學(xué)模型的分析,本系統(tǒng)采用邏輯表達(dá)式解析算法實(shí)現(xiàn)了PLC的可編程邏輯功能;提供向?qū)浇缑妫鰪?qiáng)其易操作性;采用CAN總線拓展了網(wǎng)絡(luò)功能,實(shí)現(xiàn)分布式結(jié)構(gòu)。在一些要求成本低和操作簡便的工業(yè)控制場合,具有廣闊的應(yīng)用前景。
[1]朱賢德.基于ARM嵌入式系統(tǒng)軟PLC的研究[D].北京:北京工業(yè)大學(xué)碩士論文,2006
[2]高春霞,張磊.基于C8051F單片機(jī)的嵌入式PLC系統(tǒng)研究[J].電氣自動化,2009,31(3):55-65.GAO Chun-xia,ZHANG Lei.Research on embedded PLC system based on C8051F[J].Electrical Automation,2009,31(3):55-65.
[3]高紅玉,徐建成,曾成奇.基于ARM的CAN總線智能節(jié)點(diǎn)的設(shè)計[J].電子應(yīng)用技術(shù),2005(4):24-26.GAO Hong-yu, XU Jian-cheng,ZENG Cheng-qi.The design of CAN bus intelligence node based on ARM[J].Application of Electronic Technique,2005(4):24-26.
[4]曹曉麗.將中綴表達(dá)式轉(zhuǎn)換為前綴表達(dá)式的三種方法[J].甘肅科技,2006,22(5):72-74.CAO Xiao-li.Three methods of converting infix expression to prefix expression[J].Gansu Science and Technology,2006,22(5):72-74.
[5]何云東,黃旭.復(fù)雜表達(dá)式解析和計算的研究實(shí)現(xiàn)[J].中國科技信息,2009(8):35-38.HE Yun-dong,HUANG Xu.Research on analysis and calculation of complex expression[J].China Science and Technology Information,2009(8):35-38.
[6]廖常初.PLC應(yīng)用技術(shù)問答[M].北京:機(jī)械工業(yè)出版社,2006.
[7]資訊小組.數(shù)據(jù)結(jié)構(gòu)C語言版[M].北京:中國鐵道出版社,2002.
[8]張明.PLC控制系統(tǒng)在火力發(fā)電廠的應(yīng)用及注意事項(xiàng)[J].現(xiàn)代電子技術(shù),2010(23):177-180.ZHANG Ming.Application and Precautions of PLC Control System in Power Plant[J].Modern Electronics Technique,2010(23):177-180.
[9]孫德輝,任振東,史運(yùn)濤.基于研華WebAccess熱力系統(tǒng)優(yōu)化控制與遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2009(04):50-52.SUN De-hui, REN Zhen-dong, SHI Yun-tao.Implementation of optimal control and remote monitoring system of the thermal system based on WebAccess[J].Modern Electronics Technique,2009(04):50-52.