史先桂
(安徽新華學(xué)院 信息工程學(xué)院,合肥 230088)
史先桂
(安徽新華學(xué)院 信息工程學(xué)院,合肥 230088)
介紹一種采用VC++2010開發(fā)梯形圖編程工具軟件的設(shè)計(jì)與實(shí)現(xiàn)方法。利用面向?qū)ο蟮姆椒?,進(jìn)行系統(tǒng)類層次結(jié)構(gòu)的設(shè)計(jì),使系統(tǒng)具有更強(qiáng)的執(zhí)行效率、開放性和可擴(kuò)展性;采用鏈表結(jié)構(gòu)存儲(chǔ)梯形圖,能夠方便、靈活地進(jìn)行動(dòng)態(tài)編輯操作;運(yùn)行程序?qū)⑻菪螆D圖形語(yǔ)言轉(zhuǎn)換為鏈表指令程序,通過(guò)高效邏輯和運(yùn)算管理鏈表指令快速執(zhí)行。
VC++;梯形圖;可編程邏輯控制器控制;組態(tài)軟件
在自動(dòng)控制領(lǐng)域,梯形圖因其直觀易學(xué)的優(yōu)勢(shì),成為PLC(Programmable Logic Controller,可編程邏輯控制器)中應(yīng)用廣泛的編程語(yǔ)言[1]?;诠た貦C(jī)的PCI(Peripheral Component Interconnect,外設(shè)部件互連標(biāo)準(zhǔn))插槽、運(yùn)動(dòng)控制卡多軸控制系統(tǒng)以及基于以太網(wǎng)、串口等智能終端的控制編程都要通過(guò)組態(tài)軟件或上位機(jī)自編開發(fā)軟件。針對(duì)擁有大量輸入輸出的復(fù)雜邏輯控制系統(tǒng),采用上位機(jī)自編開發(fā)軟件,需要定義大量的變量,靠編寫代碼等控制工藝動(dòng)作。因此,項(xiàng)目開發(fā)時(shí)間長(zhǎng)、可控性差、風(fēng)險(xiǎn)大,一旦出現(xiàn)故障和漏洞,需要開發(fā)人員才能解決。同時(shí),復(fù)雜的邏輯控制通過(guò)在組態(tài)軟件上編寫腳本語(yǔ)言實(shí)現(xiàn)也非常困難,沒(méi)有梯形圖編程方便、直觀。這種情況下,在組態(tài)軟件基礎(chǔ)上開發(fā)類似PLC的梯形圖編程工具軟件,那么只要是有梯形圖編程經(jīng)驗(yàn)的人員,就可以在上位機(jī)上開發(fā)復(fù)雜的控制項(xiàng)目,使復(fù)雜的上位機(jī)軟件開發(fā)大大簡(jiǎn)化,不需要編寫代碼,而且調(diào)試方便、直觀、快捷,項(xiàng)目風(fēng)險(xiǎn)降低。本文利用VC++2010開發(fā)梯形圖編程工具軟件,并重點(diǎn)介紹梯形圖指令圖形化編輯系統(tǒng)、梯形圖編程系統(tǒng)、梯形圖運(yùn)行系統(tǒng)[2],等功能模塊的實(shí)現(xiàn)方法。
完成梯形圖指令圖形化編輯系統(tǒng),首先要確定梯形圖的指令系統(tǒng),然后將梯形圖指令符號(hào)用不同圖形表示出來(lái)。
1.1 指令系統(tǒng)
首先規(guī)劃系統(tǒng)需要支持哪些指令,并且要容易擴(kuò)展。本系統(tǒng)支持的梯形圖命令有:
常規(guī)指令:常開、常閉、>、 >=、 <、 <=、 ==、M繼電器輸出、M繼電器上升沿微分、M繼電器下降沿微分、DI輸入、DO輸出、AI輸入 、AO輸出、時(shí)間計(jì)時(shí)器計(jì)時(shí)、計(jì)時(shí)器計(jì)數(shù)、置位、復(fù)位、位設(shè)置;
運(yùn)算指令:數(shù)據(jù)+、-、*、/、絕對(duì)值運(yùn)算;
數(shù)據(jù)傳送指令:字節(jié)傳送、字傳送、數(shù)字快傳送;
伺服步進(jìn)指令:設(shè)置常速、設(shè)置高速、設(shè)置恒速、加速,設(shè)置運(yùn)行脈沖數(shù),制動(dòng),清零,查詢當(dāng)前脈沖數(shù)、原位、方向、運(yùn)行狀態(tài);
特殊指令:子程序、功能塊、報(bào)警信息提示。
1.2 指令符號(hào)繪制
圖1 類層次結(jié)構(gòu)
圖1是畫指令圖元的相關(guān)繼承關(guān)系,每個(gè)畫圖對(duì)象由以下數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn):
typedef struct _TBObjInfo
所有對(duì)象在虛函數(shù) virtual void Draw(CDC* pDC)里實(shí)現(xiàn)畫圖,這種設(shè)計(jì)方案簡(jiǎn)單且指令可擴(kuò)展性強(qiáng)。
一個(gè)完善的梯形圖編程系統(tǒng),首先要將梯形圖指令與相關(guān)的繼電器關(guān)聯(lián),其次要完成梯形圖編程的編輯系統(tǒng)
2.1 繼電器定義
梯形圖在編輯時(shí),指令要與相關(guān)繼電器關(guān)聯(lián)。繼電器一般有2種:外部I/O繼電器和內(nèi)部輔助繼電器。
本系統(tǒng)規(guī)劃的外部I/O繼電器最多可提供0~255個(gè)設(shè)備的虛擬地址,供工控機(jī)插卡輸入輸出編址用,數(shù)字量和模擬量輸入輸出變量地址支持0.00~0.31到255.00~255.32,具體地址分配根據(jù)配置的虛擬地址編號(hào)用對(duì)話框設(shè)置如圖2所示。
圖2 輸入、輸出地址配置
如一塊16位DI插卡,地址編號(hào)=1,編址為1.00~1.15,沒(méi)有編址的不能在梯形圖里使用。地址編號(hào)為0,1,...,255,不能重復(fù);另外數(shù)字量輸入/輸出、模擬量輸入/輸出的數(shù)量要和實(shí)際插卡設(shè)備一致,以便梯形圖正確編址。
系統(tǒng)規(guī)劃的內(nèi)部繼電器有:M輔助繼電器,地址支持M0~M10000,共具有10 000個(gè)M輔助繼電器。其中:特殊繼電器M0,程序第一次循環(huán)是ON,以后為OFF;M1,0.5 s脈沖;M2,1 s脈沖;M3,M4備用,編程選擇從M5開始;DW數(shù)據(jù)寄存器,共有DW0~DW5000可用;時(shí)間繼電器T,共有T0~T500可用;計(jì)數(shù)器C,共有C0~C500可用。
2.2 梯形圖編程的編輯系統(tǒng)
完成梯形圖編程的編輯系統(tǒng)開發(fā)有2個(gè)要點(diǎn):智能編輯和存儲(chǔ)。梯形圖的智能編輯系統(tǒng)對(duì)繪制的梯形圖是否正確具有智能判斷功能,可根據(jù)梯形圖符號(hào)、指令類型,左、右連接的對(duì)象,上、下連接的對(duì)象、位置等檢測(cè)繪制是否正確。
2.2.1 梯形圖智能編輯
程序完成相關(guān)功能后,可根據(jù)工藝要求進(jìn)行梯形圖編程。圖3是本系統(tǒng)編輯的一段梯形圖。
圖3 梯形圖編程實(shí)例
程序的每個(gè)段編輯完成,系統(tǒng)將自動(dòng)檢測(cè)判斷是否符合邏輯要求,如果不合要求則梯形圖開始端會(huì)變紅色,同時(shí)提示錯(cuò)誤。同樣,梯形圖指令繪制位置不正確時(shí)也會(huì)有錯(cuò)誤提示[4]。
2.2.2 梯形圖存儲(chǔ)
每行梯形圖編輯順序?yàn)閺淖蟮接?、從上到下,下面以圖4所示的一段梯形圖來(lái)說(shuō)明存儲(chǔ)方法。
圖4 一段梯形圖
梯形圖的每個(gè)段由兩部分組成:圖4中虛線左邊是邏輯關(guān)系組合,右邊是輸出結(jié)果。梯形圖程序編輯完成后,存儲(chǔ)梯形圖要將邏輯關(guān)系轉(zhuǎn)換成關(guān)系表達(dá)式存儲(chǔ),以鏈表形式存儲(chǔ),其結(jié)構(gòu)如下。
typedef struct _TBControLadInfo
結(jié)構(gòu)_TBControLadInfo存儲(chǔ)梯形圖的ID、子程序號(hào)、梯形圖段牽引、梯形圖所屬頁(yè)面ID、梯形圖邏輯關(guān)系組合關(guān)系表達(dá)式、最后一列輸出結(jié)果表達(dá)式。其中成員變量ladder存儲(chǔ)梯形圖每個(gè)段中虛線左邊的邏輯關(guān)系組合表達(dá)式。圖4所示的一段梯形圖存儲(chǔ)表達(dá)式如下:(((M50&M101|T22)|T28)|M217)&!M226&M215&!M224,表達(dá)式通過(guò)+、-、*、、^、=、&、|、!=、<=、<、>=、>、==等邏輯關(guān)系,在梯形圖運(yùn)行時(shí)經(jīng)過(guò)運(yùn)算得出一個(gè)邏輯狀態(tài)0或1,然后確定最右邊一列的輸出結(jié)果。
成員變量ControlOut存儲(chǔ)梯形圖的每個(gè)段最右邊一列,輸出結(jié)果為組合表達(dá)式,圖4中存儲(chǔ)結(jié)果是(M,217),表示輔助繼電器M217線圈輸出為0或1。
在存儲(chǔ)時(shí)要求系統(tǒng)能自動(dòng)將梯形圖符號(hào)轉(zhuǎn)換成對(duì)應(yīng)的運(yùn)算關(guān)系和邏輯符號(hào),存儲(chǔ)在TBControLadInfo結(jié)構(gòu)鏈表里,并最終存儲(chǔ)到數(shù)據(jù)庫(kù)。
運(yùn)行系統(tǒng)首先從數(shù)據(jù)庫(kù)讀取梯形圖存儲(chǔ)的相關(guān)信息,然后不停循環(huán)掃描主程序,根據(jù)梯形圖程序掃描順序和相關(guān)繼電器狀態(tài),逐行分析和計(jì)算每個(gè)程序段的邏輯關(guān)系組合表達(dá)式值。若邏輯狀態(tài)為1,在最后一列輸出相關(guān)動(dòng)作,若邏輯狀態(tài)為0則不輸出相關(guān)動(dòng)作,從而實(shí)現(xiàn)梯形圖的實(shí)時(shí)執(zhí)行[5]。梯形圖運(yùn)行系統(tǒng)開發(fā)有2個(gè)難點(diǎn):
1)高效分析和計(jì)算程序段前面的邏輯關(guān)系表達(dá)式值
針對(duì)邏輯表達(dá)式專門開發(fā)一個(gè)運(yùn)算管理類CLadParser,能滿足常用的=、&、|、!=、<=、<、>=、>、==、+、-、*、、^等所有邏輯運(yùn)算,判斷邏輯和運(yùn)行優(yōu)先級(jí)別。運(yùn)行速度要快,否則會(huì)影響整個(gè)系統(tǒng)實(shí)時(shí)性。其實(shí)現(xiàn)分析和計(jì)算程序段前面的邏輯關(guān)系的方法如下:
CLadParser m_Parser; //聲明一個(gè)對(duì)象
Cstring sLad=(((M50&M101|T22)|T28)|M217)&!M226&M215&!M224;//梯形圖邏輯關(guān)系組合表達(dá)式
bool bV = m_Parser.JudgeEaluate(sLad);//計(jì)算梯形圖邏輯關(guān)系組合表達(dá)式值
if(bV){ //執(zhí)行最后一列輸出相關(guān)動(dòng)作,M227置1 }
系統(tǒng)實(shí)時(shí)獲得相關(guān)繼電器的值,再通過(guò)CladParser進(jìn)行分析判斷,計(jì)算出邏輯狀態(tài)值(0或1),這樣就能確定如何執(zhí)行后序動(dòng)作[6]。
2)梯形圖實(shí)時(shí)調(diào)試
梯形圖一大優(yōu)點(diǎn)就是調(diào)試時(shí)直觀、方便,所以梯形圖在運(yùn)行時(shí),要實(shí)時(shí)觀察到相關(guān)繼電器數(shù)值和狀態(tài),某段梯形圖導(dǎo)通要用不同顏色來(lái)顯示。如果梯形圖前面邏輯關(guān)系表達(dá)式值為1,則這段梯形圖全部用灰色線條聯(lián)通,如圖5所示。
圖5 梯形圖編程調(diào)試
另外實(shí)時(shí)調(diào)試要有強(qiáng)迫和取消繼電器值改變功能,這樣可為調(diào)試帶來(lái)很多方便,在此不一一贅述。
梯形圖編程系統(tǒng)的開發(fā),將使上位機(jī)軟件開發(fā)大大簡(jiǎn)單化,不同項(xiàng)目不需要編寫代碼只需要根據(jù)梯形圖來(lái)編程實(shí)現(xiàn)相關(guān)控制,調(diào)試方便、直觀、快捷,本文介紹的開發(fā)梯形圖編輯工具的方法,也適用于開發(fā)其他任何控制器的梯形圖編程工具。
[1]韓偉,宋明偉,魏志強(qiáng),等.基于Windows的華中世紀(jì)星數(shù)控系統(tǒng)PLC編程系統(tǒng)設(shè)計(jì)[J].機(jī)床與液壓,2011,39(14):97-99.
[2]陳雪,劉蔭忠,徐恩松.基于Qt的軟PLC梯形圖編輯軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(12):64-69.
[3]吳盼盼,嚴(yán)義.基于構(gòu)件的梯形圖算法模塊封裝方法[J].機(jī)電工程,2013,30(6):764-768.
[4]石銳,周雷,楊正益.軟PLC梯形圖到語(yǔ)句表轉(zhuǎn)換新策略的研究[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(18):244-248.
[5]郭書杰,馬躍,王品,等.軟件PLC梯形圖開發(fā)系統(tǒng)的研究與實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2010(5):47-51.
[6]張漢兵,葉伯生,楊道善.數(shù)控系統(tǒng)中內(nèi)嵌式PLC梯形圖編程的軟件實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2002(1):26-28.
Design and Implementation of Ladder Diagram Programming Tool Software based on VC++
SHIXiangui
(School of Information Science and Technology,Xinhua University,Hefei 230088,China)
This paper introduces the design and implementation of ladder diagram programming tool software based on VC++2010.Using object-oriented method,the author designs the system hierarchical structure,makes the system more efficient,open and expansible;the storage list structure of ladder diagram,can be easily and flexibly dynamically edited;ladder graphics language can be converted into the list instruction program by running the program,and be implemented through the efficient and rapid logic and operation management instruction list.
VC++;ladder diagram;PLC control;configuration software
10.13542/j.cnki.51-1747/tn.2017.02.003
2017-03-15
安徽省教育廳重點(diǎn)自然科研項(xiàng)目(KJ2015A306)
史先桂(1975—),女,講師,碩士,研究方向:建模仿真、單片機(jī)開發(fā)、嵌入式系統(tǒng),電子郵箱:sndy999@163.com。
TP273
A
2095-5383(2017)02-0013-04