1 引言
1.1 組態(tài)控制軟件
組態(tài)控制軟件是可實現各種控制功能的具有配置性質的程序。通過組態(tài)就可以實現預定的控制方案??梢允褂脩粼诓恍枰幋a程序的情況下,便可生成適合自己需求的應用系統,這些應用系統軟件就是組態(tài)軟件,它由開發(fā)人員完成,本文提出了基于LonWorks網絡控制來實現對組態(tài)軟件的開發(fā)方法,提出了一種基于LonWorks網絡技術的組態(tài)方法,給出其設計思想和實現方法。
1.2 LonWorks網絡控制方法 – 節(jié)點
LON網上的每個控制節(jié)點稱為LON節(jié)點或LONWORKS 智能設備,它包括一片Neuron芯片、傳感器和控制設備、收發(fā)器和電源。
Neuron芯片是節(jié)點的核心部分,它包括一套完整的通信協議,即LonTalk協議,從而確保節(jié)點間使用可靠的通訊標準進行互操作。因為Neuron芯片可以直接與它所監(jiān)視的傳感器和控制設備相連,所以一個Neuron芯片可以傳輸。
傳感器或控制設備的狀態(tài)、執(zhí)行控制算法,和其它Neuron芯片進行數據交換等。使用Neuron芯片,開發(fā)人員可以集中精力設計并開發(fā)出更好的應用對象而無需耗費太多的時間去設計通訊協議、通訊的軟件和硬件,這樣減少了開發(fā)的工作量,節(jié)省了大量的開發(fā)時間。
LonWorks節(jié)點編程是用Neuron C 來實現的,程序要經過編譯和燒錄后才能載入節(jié)點中運行;或者也有一些節(jié)點經過編譯可以直接下載到節(jié)點運行。在此我們把組態(tài)的思想引入組態(tài)控制軟件中,為控制網絡預先提供豐富的控制功能模塊,通過改變網絡節(jié)點之間的邏輯關系來達到改變網絡控制功能的目的。
1.3 引入組態(tài)到LonWorks控制網絡的優(yōu)點、特點
● 用戶不需要用Neuron C語言編程,只要根據實際需要進行適合自己的組態(tài)配置。
● 實現的功能多,方便用戶實現各種控制功能。
● LonWorks本身帶有通訊協議,組網方便、靈活。
2. 基于LonWorks的組態(tài)控制
2.1 組態(tài)軟件生成:
有的組態(tài)軟件將控制功能模塊稱為“軟PLC或Soft PLC”,也有的稱“軟邏輯”。組態(tài)控制軟件編程工具采用圖形化編程語言,只需用鼠標“點擊、拖動”就可以建立一個可重復使用的控制方案,大大減少工程時間和人力。一個應用程序中可以有很多控制模塊。開發(fā)人員利用Neuron C 語言編制通用控制程序。通用控制程序由許多基本功能模塊組成,各個模塊可以實現不同的控制功能?;竟δ苣K有若干個輸入和輸出,每個輸入和輸出管腳都有唯一的名稱,不同種類的功能塊其每個管腳的意義、取值范圍也不相同。
控制模塊基本功能塊包括:數學運算模塊(實現數的加、減、乘、除、乘方、開方等基本運算);邏輯運算模塊(實現邏輯的與、或、非、延時、選擇開關等功能);變量模塊(提供運算的操作數并存放最終的運算結果)以及常用的控制算法模塊(例如PID控制等)。
組態(tài)控制軟件存盤時自動對程序進行編譯、檢查語法錯誤,同時生成一定格式的消息包,準備傳遞給Neuron芯片。這些特定格式的數據包有:控制模塊綜合描述(例如所含的控制模塊總個數,參數總個數,中間變量總個數等),各模塊的描述(例如該模塊的模塊數,參數個數,中間變量等),各模塊的參數表,各模塊代碼表,各模塊的中間變量存放順序表等。
組態(tài)Neuron節(jié)點通過顯式消息與PC機進行通訊,接收模塊消息包。該節(jié)點中存有與基本功能模塊相應的執(zhí)行模塊代碼,將數學模塊、邏輯模塊、變量模塊和控制算法模塊等分別寫成單獨的函數,可按照組態(tài)軟件生成的消息包被調用,并可將執(zhí)行結果傳送給PC機或其它 Neuron節(jié)點。假如組態(tài)中某個功能塊的參數發(fā)生了改變,則重新編譯程序并將最新生成的模塊消息包發(fā)給 Neuron芯片,使之總是執(zhí)行最新的功能塊,實現組態(tài)的在線編譯與控制。組態(tài)Neuron節(jié)點在接收消息時,根據消息標簽將消息數據賦給該節(jié)點定義的不同的數據結構。只有當組態(tài)軟件生成的所有相關消息被收到后,功能塊才可以執(zhí)行。
Neuron各節(jié)點之間通過網絡變量進行通訊。在組態(tài)Neuron節(jié)點中,預定義一定數量的網絡變量,既有輸入類型,也有輸出類型。其總個數不超過Neuron C 語言中允許定義的網絡變量的總個數。
網絡變量的使用極大的簡化了開發(fā)和安裝分散系統的處理過程,各節(jié)點可以獨自定義,然后簡單地連接在一起或斷開某幾個連接,以構成新的LONWORKS應用,大大增加了系統的靈活性,開放性。網絡變量通過給節(jié)點相互之間明確的網絡接口而極大地提高了節(jié)點產品的互操作性。互操作性帶來得好處是:節(jié)點能很方便地安裝到不同類型的網絡中,并保持節(jié)點應用的網絡配置獨立性。節(jié)點可以安裝到網絡中并且只要網絡變量數據類型匹配,就可以邏輯建立地與網絡上的其它節(jié)點的連接。
一個網絡變量NV(Network Variables)是節(jié)點的一個對象,它可以定義為輸入也可以定義為輸出網絡變量。當一個網絡變量在一個節(jié)點的應用程序中被賦值后,LonTalk協議將修改了的輸出網絡變量新值構成隱式消息,透明的傳送到可與之共享數據的其它節(jié)點或PC機。這里的網絡變量其實為隱式消息。
由于每個網絡變量的數據長度一經確定就不能改變,且最多只有31B,所以限制了它的使用范圍。為此,可考慮同時使用了Neuron C 提供的顯示消息這一數據類型。
顯式消息的長度是可變的,且最長可以是228B。顯式消息必須使用一個預定的對象來構造,然后使用顯式函數以及預定事件來處理這些顯式消息。
用預定事件msg_arrives來接收消息。
本設計中,由message-code判斷要接收的消息數據msg_in.data應該存放到那一部分數據結構。message-code有head, stragehead, code, parameter, index, 和run等。其中,head為控制模塊頭,stragehead為控制模塊描述頭,code為接收代碼表,parameter為接收參數表,index為接收索引表,run為接收程序開始執(zhí)行命令。這些消息分別對應組態(tài)軟件編譯生成的消息包格式。只有當組態(tài)Neuron節(jié)點收到全部的模塊消息和執(zhí)行命令run后,模塊才被執(zhí)行。
2.2 實例
對于實現一個加法運算(加法器)來講,其組態(tài)功能圖如圖:
模塊1為變量模塊(輸入輸出模塊)中的常量模塊,模塊2、3都為變量模塊(輸入輸出模塊)中的網絡變量輸入模塊,模塊4為數學運算模塊中的加法模塊,模塊5為變量模塊(輸入輸出模塊)中的輸出模塊。
若要實現這樣一個加法功能,首先在組態(tài)工具中畫出如圖2所示的功能組態(tài)圖,經編譯后生成所需的模塊代碼。如模塊頭文件為:
Varsize 12 0 0 0 0 //中間變量所需暫存單元
Stragenum 1 //控制模塊個數
Parasize 2 //參數所需存儲單元
Codesize 20 //代碼所需存儲單元
Indexsize 24 //索引所需存儲單元
Globalsize 0 //全局變量所需存儲單元
在模塊進行執(zhí)行時,
1) 執(zhí)行模塊1,將參數值從參數表中取值,放入中間變量表;
2) 執(zhí)行模塊2,將相應的輸入網絡變量放入中間變量表;
3) 執(zhí)行模塊3,將相應的輸入網絡變量放入中間變量表;
4) 執(zhí)行到模塊4時,從中間變量表中取使能端的參數,從中間變量表中取輸入端1的參數,從中間變量表中取輸入端2的參數,將兩操作數相加,運算結果放回中間變量表。
5) 執(zhí)行模塊5,從中間變量表中將數值賦給相應的輸出網絡變量。
2.3 數據結構
Ø 代碼結構:由4個字節(jié)組成,分別用16進制表示。
Ø 代碼結構的含義:
第一字節(jié)表示種類( category),即四大模塊(數學模塊、邏輯模塊、變量模塊和控制模塊)中的某一類;
第二字節(jié)表示類型(kind),即某一模塊中的具體功能;
第三和第四字節(jié)表示索引(index)。
Ø 索引表的結構:由二個字節(jié)組成;在程序中用16進制表示。
Ø 索引(index)表的含義:
I. 占兩個字節(jié)。
II. 分別由各個功能塊的四個部分組成:
A. 第一部分表示某個功能塊由幾個輸入、輸出集成,分別對應中間變量表的指針數值。
B. 第二部分表示輸入網絡變量。本設計中輸入數據由消息節(jié)點的消息變量發(fā)送,再由接受節(jié)點接受,通過網絡傳遞到另一個接受節(jié)點上來,并轉化成網絡變量,再由網絡變量送入PTAG表,以便進行運算。
C. 第三部分表示輸出網絡變量。運算結果放入PTAG中間變量表,輸出時再從中間變量表中取出運算結果,送入接受方節(jié)點(本節(jié)點上)即NEUM節(jié)點上的輸出網絡變量,經網絡上傳遞后,再由連接后的輸入網絡變量從另一個節(jié)點(即消息節(jié)點)上可以讀出數據。
D. 第四部分表示常量。其值由參數表中取出,參數表中的數據由消息發(fā)送過來。
III. 各個功能塊的次序和每個功能塊中四個部分的次序,由組態(tài)的次序決定。
第一部分的格式:
第二部分(輸入網絡變量的格式):
第三部分(輸出網絡變量)的格式:
第四部分(常量)的格式:
Ø 中間變量表的結構:由數據的類型決定字節(jié)長度。
中間變量表通過賦初值來確定其結構,此時中間網絡變量只有空結構,沒有數據,其數據等待輸入,由變量模塊、取數據函數GET()、設置數據函數SET()來完成。變量模塊中分三個類型,有常量、網絡變量輸入和網絡變量輸出。這三種類型的數據最終都要放入中間變量表中,輸入時,如是常量,則從參數表中取出常量,放入中間變量表中。參數表中的數據預先由消息節(jié)點發(fā)送,在讀參數表時已讀入數據。由READP()程序完成。
如不是常量,則由網絡變量輸入來接受數據,數據還是由消息節(jié)點發(fā)送過來,用GET()函數讀入,再由SET()函數放入PTAG中間變量表,以備運算使用。
輸出時,再由中間變量表中取出,放進輸出網絡變量進行輸出。再由節(jié)點通過網絡傳遞到消息節(jié)點,通過消息節(jié)點上的輸入網絡變量可以觀察運算結果。
特別要注意的是:中間變量表的字節(jié)長度是隨著常量數據的類型(只有整型和浮點型)、網絡變量的數據類型來確定,因而,不同的模塊運算中間變量表的長度是不同的,這也反映在索引表的內容上。
Ø 中間變量(Ptag)表的格式:(一個模塊)
Ø 參數表的格式:(放常量)
要實現這樣的加法功能,先在組態(tài)工具中畫出如上圖的組態(tài)功能圖,經編譯后生成所需的控制模塊代碼。
如設計代碼為:{0,0,0,0,0,1,0,2,0,1,0,4,1,0,0,6,0,2,0,10}。索引表設計為:{16,0,16,0,16,0,16,3,16,1,16,6,16,0,16,3,16,6,16,9,16,9,16,0}。//16 完全和程序中生成的數據類型的編程方法有關。
3 結束語
在LonWorks技術的基礎上實現組態(tài)控制有著廣闊的發(fā)展空間。依靠極強的Neuron芯片及LonTalk協議,使得組態(tài)控制得以在線編譯并實時運行。采用消息包的形式向Neuron 芯片傳送組態(tài)控制的模塊,減少了Neuron 編程的工作量以及編譯工作,增加了系統的靈活性和開放性。為組態(tài)軟件的發(fā)展提供了更為開闊的市場。