摘要:文章首先介紹了PLC的概念、功能特點和具有PLC功能的產品優(yōu)勢,接著分析了硬PLC和軟PLC的區(qū)別,最后從PLC繪圖工具的制作、PLC各種文件的生成、PLC語句表文件的編譯和存儲數(shù)據(jù)結構、PLC文件的運行機制、程序分類和運行控制等方面描述了在產品開發(fā)中軟PLC的實現(xiàn)過程。
關鍵詞:產品開發(fā);硬PLC;軟PLC;梯形圖;一級程序;二級程序 文獻標識碼:A
中圖分類號:TG659 文章編號:1009-2374(2015)14-0011-02 DOI:10.13535/j.cnki.11-4406/n.2015.14.006
PLC是一個以微處理器為核心的數(shù)字運算操作的電子系統(tǒng)裝置,專為在工業(yè)現(xiàn)場應用而設計,它采用可編程序的存儲器,用以在其內部存儲執(zhí)行邏輯運算、順序控制、定時/計數(shù)和算術運算等操作指令,并通過數(shù)字式或模擬式的輸入、輸出接口,控制各種類型的機械或生產過程。
1 軟PLC的概念
所謂的軟PLC是利用軟件技術在產品中開發(fā)PLC功能,在一些通用的CPU或者MCU上實現(xiàn)PLC指令的解釋和編譯運行,它僅是整個產品中的一個功能模塊,該模塊能夠完成硬PLC大部分功能要求。
2 軟PLC的實現(xiàn)全部過程
精心策劃和技術論證后,筆者在產品開發(fā)中用以下方案實現(xiàn)了軟PLC開發(fā),具體實現(xiàn)方案框圖如圖1所示:
圖1 軟PLC開發(fā)具體實現(xiàn)方案
3 PLC繪圖工具制作和各種文件的產生
框圖實現(xiàn)的具體過程:第一,在PC機上用高級編程語言如VC等編寫一個PLC梯形圖制作工具,該工具不僅能繪制PLC梯形圖,并且繪制梯形圖所需要的指令元器件全部可以定制,可以按照你產品所需增加或刪除指令,可以設定指令的地址類型和取值范圍,可以設定指令的引腳屬性。第二,制作好指令元器件后,運用該工具繪制你所需要的PLC梯形圖后并編譯它,生成你所需要的語句表文件和各種信息文件。第三,PLC的文件如何放到系統(tǒng)產品上?這就取決于你的產品能夠如何接收外部的文件或數(shù)據(jù)。下文以USB接口和串口為例來講述一下其實現(xiàn)接收PLC文件的過程:(1)U盤接口的實現(xiàn)方法。將用PC工具生成的PLC工程文件包從電腦拷貝到U盤,再將U盤插入到產品上,通過操作U盤讀取PLC工程文件包,從文件包里得到你所需要的語句表文件和其他信息文件;(2)串口RS232的實現(xiàn)方法。由于RS232每次只支持接受一個文件,你可以先編寫一個應用程序,將該應用程序放在PLC工程文件夾下指定的位置,運行該應用程序,提取所需要的文件信息生成一個TXT的文本格式文件,再用RS232方式傳送到產品使用。
4 PLC語句表文件的編譯和存儲數(shù)據(jù)結構
梯形圖是由很多個由上到下順序的網絡組成。一個網絡可看成一個總的輸入和一個輸出或多級輸出組成??偟妮斎胗稍S多從左到右順序相“AND”的列組成。一個列可能由一個或多個行從上到下順序的行相“OR”組成,一個行又可能包括多個從左到右順序的相“AND”輸入指令。按照上述對PLC梯形圖原理的理解,筆者設計以下的編譯后數(shù)據(jù)存儲方法供PLC運行調用。
語句表語言是PLC功能的另外一種表達方法,一般由梯形圖轉換出來。一個PLC語句表文件是由一級程序、二級程序和各個子程序組成。將一級程序、二級程序和各個子程序編譯后都變成一個個獨立的程序分開存儲,每個程都有一個程序開始存儲地址,從這個地址開始存儲該程序的程序信息和所有編譯后的網絡數(shù)據(jù),各個程序之間或網絡之間相互調用或跳轉使用編譯后的相對地址進行。
每個程序先存儲程序信息,緊接著存儲PLC程序的編譯后的一個個網絡數(shù)據(jù)。每個程序的組成具體為:程序信息+網絡數(shù)據(jù)#1+“%%”+網絡數(shù)據(jù)#2+…,網絡與網絡之間有一個字符串(“%%”)隔開。
程序信息主要包括:網絡總數(shù)+程序中的所有網絡信息(#1+#2+#3…)+程序編譯后的網絡數(shù)據(jù)#1開始存儲的地址。
網絡信息主要包括:該網絡輸入的總列數(shù)+輸入每列的行數(shù)+輸出行數(shù)+各個網絡數(shù)據(jù)(#1 #2 #3…等等)在PLC程序中的開始存儲的地址。
在程序信息之后,開始依次存儲編譯后網絡數(shù)據(jù)#1、網絡數(shù)據(jù)#2…的數(shù)據(jù),步驟如下:
第一,填寫輸入指令開始存儲標志(“N_IN”)。
第二,一個網絡數(shù)據(jù)保存格式為:(1)保存網絡第一個列的第一行數(shù)據(jù),存儲格式為:輸入指令個數(shù)+第一個輸入指令(指令類型+指令地址號+觸點類型)+“&&”+第二個輸入指令(指令類型+指令地址號+觸點類型)…。如果同行內有多個輸入指令,則指令之間有一個字符串(“&&”)隔開。(2)同樣方式保存該列的第二行…。如果一列內有多行,行與行之間一個字符串(“||”)隔開。(3)…直至保存完該列的所有行。
第三,接著保存網絡第二個列數(shù)據(jù),保存方法同上,直至保存完所有的列。
第四,如果一個網絡內有多列,列與列之間有一個字符串(“&&”)隔開。
第五,填寫輸出指令開始存儲標志(“NOUT”)。
第六,接著保存輸出指令,輸出的存儲格式為:第一個輸出指令(指令類型+指令地址號)+第二個輸出指令(指令類型+指令地址號)…,如果是多級輸出,指令之間有一個字符串(“++”)隔開。
第七,接著,用同樣的方式開始存儲網絡數(shù)據(jù)#2,…直至當前程序的網絡編譯信息存儲完畢。
PLC語句表文件的總體結構、PLC程序信息結構和PLC網絡信息結構格式詳見如下:
//PLC語句表文件的總體結構
typedef struct_PLC_File_t
{
uint32 PLCFlags[4] ;//PLC語句表文件存在標志,存在“_PLC_PLC_PLC_PLC”
//不存在,全部用0XFF代替
(uint32*)Addr_Level1; //存儲一級程序的開始地址
(uint32*)Addr_Level2; //存儲二級程序的開始地址
(uint32*)Addr_Son[C_MaxSonProgs];//存儲子程序程序的開始地址
//uint32 Reserve[10] ;//保留
}PLC_File_t,*ptr_PLC_File_t;
//PLC程序信息(如:一級程序 二級程序 子程序)結構
__align(256) typedef struct_PLC_Program_t
{
uint32 Nets; //PLC網絡數(shù),若為0,則無該PLC程序
PLC_Net_t NetLineRows[C_MaxNetsPerFile]; //PLC每個網絡信息
uint32 *address_File; //該程序編譯后的網絡數(shù)據(jù)開始存儲地址
//uint32 Reserve[10] ;//保留
}PLC_Program_t,*ptr_PLC_Program_t;
//PLC網絡信息結構
__align(4)typedef struct_PLC_Net_t
{
uint8 In_Rows; //網絡輸入列數(shù)
uint8 Lines[C_MaxLinesPerRow]; //網絡每列行數(shù)
uint8 Out_Lines; //網絡輸出行數(shù),若大于1,為多級輸出
uint32 *Address_Net; //該網絡數(shù)據(jù)在PLC程序中的開始存儲地址
//uint32 Reserve; //保留
}PLC_Net_t,*ptr_PLC_Net_t;
5 PLC運行機制、程序分類和運行控制
PLC程序的運行是在中斷模式下來實現(xiàn)對產品所有的輸入和輸出進行監(jiān)控,只要PLC程序存在,產品從開機就要循環(huán)運行PLC程序監(jiān)控產品的運行。在PLC中斷模式下,中斷服務程序不能夠占用中斷太多的時間,否則CPU就沒有時間來執(zhí)行其他的程序:一方面PLC程序一部分代碼又必須快速及時地執(zhí)行和響應,另一方面PLC程序又可能比較長,要運行完所有的PLC程序可能會消耗CPU太多的中斷時間。如何解決這一問題?解決辦法是將PLC程序分成一級程序和二級程序,將一部分必須快速完成的程序歸入一級程序,另外一部分程序歸為二級程序。一級程序每次PLC中斷都是要執(zhí)行,二級程序根據(jù)程序運行消耗的時間動態(tài)分段,在一個PLC中斷周期除了運行一級程序外,還要運行二級程序的其中一段。這樣二級程序就必須分段執(zhí)行。
此外,還要在中斷周期內正確調配二級中斷程序。方法一:編譯時就根據(jù)指令的運行時間將二級程序分段,保證一次中斷只運行其中一段二級程序。方法二:運行時計算中斷的消耗時候,中斷運行時間到就停止在二級程序的某一個指令上,下一個中斷運行二級程序時就接著上次的二級程序指令繼續(xù)運行。
傳統(tǒng)硬PLC性價比增長很緩慢,但隨著電子技術和計算機技術的迅猛發(fā)展,軟PLC技術打破了硬PLC許多局限性,開發(fā)PLC功能硬件成本和技術開發(fā)難度也越來越低,因此,在各行各業(yè)中軟PLC都具有廣泛的發(fā)展前景。
參考文獻
[1] 周萬珍,高鴻斌.PLC分析與設計應用[M].北京:電子工業(yè)出版社,2004.
[2] 曹輝.可編程序控制器過程控制技術[M].北京:機械工業(yè)出版社,2006.
作者簡介:劉軍高(1971-),男,江西人,廣州數(shù)控設備有限公司工程師,研究方向:數(shù)控系統(tǒng)產品開發(fā)。
(責任編輯:周 瓊)