管其勇
GUAN Qi-yong
(江蘇淮安信息職業(yè)技術學院 電氣工程系,淮安 223003)
DCS是工業(yè)領域常用的分布式集散控制系統(tǒng)。典型的 DCS 系統(tǒng)規(guī)模受限于網(wǎng)絡邏輯節(jié)點數(shù)、網(wǎng)絡負荷、服務器負荷、單一數(shù)據(jù)庫容量等等各項資源的限制,多域結(jié)構(gòu)設計(分布式數(shù)據(jù)庫),使得 DCS 系統(tǒng)規(guī)模的擴大有了“無限” 的可能。
一個域?qū)F(xiàn)實中的一臺機組、一個主裝置,域中的設備等同于一套傳統(tǒng)意義上的 DCS。不同的機組、裝置可由分屬不同域的 DCS 控制,減少不必要的數(shù)據(jù)交換,降低系統(tǒng)網(wǎng)絡、服務器和數(shù)據(jù)庫的工作負荷。同時,域間也可實現(xiàn)數(shù)據(jù)交換,共享數(shù)據(jù)和信息。
DCS系統(tǒng)中主要的嵌入式系統(tǒng)軟件是控制器和它包括硬件和軟件兩部分,其中軟件部分又包括操作系統(tǒng)(要求實時和多任務處理,一般稱作嵌入式實時操作系統(tǒng))和應用程序兩大部分。
Modbus是應用于電子儀控設備上的一種標準的通訊協(xié)議。儀控設備之間、儀控設備與其他設備之間可以通過RS485總線的連接按照此協(xié)議進行通訊,使得不同廠商生產(chǎn)的儀控設備可以連成工業(yè)網(wǎng)絡,進行集中監(jiān)控。該協(xié)議主要包括TCP和RTU 兩種模式。
IEC是International Electro Technical Commission,國際電工委員會。文檔中的IEC任務指的是以IEC61131-3可編譯邏輯語言實現(xiàn)的計算任務。IEC工作組制定的IEC-870-5-104規(guī)約適用于電網(wǎng)數(shù)據(jù)采集和監(jiān)視控制系統(tǒng)以及調(diào)度所之間以網(wǎng)絡方式傳送實時遠動信息的系統(tǒng),該規(guī)約規(guī)定了OSI七層協(xié)議中的應用層,傳輸層以下采用TCP/IP協(xié)議。
RTS系統(tǒng)主要任務如下:
在編程系統(tǒng)中可以給IEC任務指定的優(yōu)先級為0~31。有兩種方式可以激活IEC任務。
時間控制: 如果編程系統(tǒng)中指定任務的循環(huán)周期(e.g. 10 ms), 則由控制任務按周期來激活IEC任務。
事件控制: 如果任務被指定了一個IEC事件(boolean variable),則按照事件控制運行。當該BOOL型變量從FALSE變成TRUE之后,該任務被激活。
對于兩種方式,任務激活后的處理過程是相同的??梢苑殖上铝腥齻€部分。
1)將該IEC任務所用到的輸入數(shù)據(jù)從過程映象刷新到輸入過程映象。
2)調(diào)用編程系統(tǒng)指定給該任務的POU程序。
3)將所有的輸出數(shù)據(jù)輸出到過程映象,然后輸出給外圍設備。
對IO過程映象數(shù)據(jù)的輸入/輸出是由專門的 I/O 驅(qū)動來實現(xiàn)的。
TCP/IP或serial的server任務是可選的。兩個任務都被設計成可接收來自不同CLIENT端(CoDeSys,OPC,...)的具體數(shù)據(jù),并將這些數(shù)據(jù)傳遞給內(nèi)部server。內(nèi)部server 解釋這些數(shù)據(jù),執(zhí)行請求的命令,并通過通訊任務給CLIENT端發(fā)回應答。
兩種SERVER建立連接的方式不同。
1)TCP/IP Server
與CLIENT端建立連接之后,SERVER會建立一個獨立的任務來處理這個CLIENT端的所有數(shù)據(jù)包。此后,SERVER繼續(xù)等待接收CLIENT端發(fā)來的新的建立連接的請求。這個機制很重要。因為它允許網(wǎng)絡上有不同IP地址的不同計算機都可以連接到RTS上。
2)Serial Server
一個串口SERVER任務維護一個串口,并等待輸入數(shù)據(jù)。這意味著串口與RTS通訊只能是單個的。
總共包含RTS程序和通訊驅(qū)動兩部分。通訊驅(qū)動完成通訊站跟第三方系統(tǒng)通訊時的狀態(tài)診斷(鏈路狀態(tài)、數(shù)據(jù)質(zhì)量)、數(shù)據(jù)的采集和輸出的功能。同時,它通過共享內(nèi)存的方式與RTS程序進行數(shù)據(jù)交換,從而共同完成整個通訊站的功能。
通訊站做為主站或服務端,驅(qū)動主進程初始化創(chuàng)建共享內(nèi)存時,根據(jù)編譯下裝到通訊站的安裝。
配置文件裝載自己的通訊參數(shù)和數(shù)據(jù)點信息。每個通訊站只生成與本站通訊相關的配置信息。
1)LinkDef.csv文件主要是提供通訊鏈路參數(shù)信息,該配置文件中應該包括以下配置信息:
(1)進程信息:版本號、通訊鏈路名、站號、鏈路號、鏈路類型、子鏈路類型。
(2)鏈路參數(shù)設置(串口號、波特率、奇偶校驗、數(shù)據(jù)位、停止位、IP地址、端口號)
(3)主站讀寫鏈路的周期(主從站通訊的周期)
(4)讀鏈路的超時時間
(5)鏈路等待時間(等待從站響應的時間)
配置文件格式如下:
1,,,,,
PN,SN,LN,LT,SLT,LP
;通訊鏈路名,站號,鏈路號,鏈路類型,子鏈路類型,鏈路參數(shù)區(qū)
GME,65,0,1,GME,1’9600’8’1’0’2000’100’100
LinkDef.csv文件說明了主站進程的鏈路1負責與GME系統(tǒng)通訊,與該系統(tǒng)通訊的通訊站號是65、鏈路號是0、鏈路類型1代表該鏈路的通訊協(xié)議是Modbus-RTU、子鏈路類型是GME、串口號1、波特率為9600、數(shù)據(jù)位8位、停止位1位、奇偶校驗位0位。主從站的通訊周期為2秒。讀串口超時時間為0.1秒、讀串口等待時間(延遲時間)為0.1秒。
規(guī)定鏈路參數(shù)區(qū):
如果鏈路是MODBUS-RTU類型,輸入信息依次為:串口號、波特率、數(shù)據(jù)位、停止位、校驗位、通訊周期、讀串口超時時間和讀串口等待延遲時間。不同字段用“’”(小撇號)分割;如輸入多個設備信息,則用“|”(豎線)分割。
如果鏈路是MODBUS-TCP類型,輸入信息依次為:IP地址、端口號、超時時間和等待時間。不同字段用“’”(小撇號)分割;如輸入多個設備信息,則用“|”(豎線)分割。
如果鏈路是IEC-104類型,輸入信息依次為:端口號、第三方系統(tǒng)IP地址1、第三方系統(tǒng)IP地址2、……不同字段用“’”(小撇號)分割;如輸入多個設備信息,則用“|”(豎線)分割。
2)ComPoints.csv文件主要是提供通訊數(shù)據(jù)點信息,該配置文件中應該包括以下配置信息:
(1)進程信息:版本號、站號、鏈路號、設備號
(2)數(shù)據(jù)點信息:通訊點項名、通道號、數(shù)據(jù)類型、數(shù)據(jù)長度、用戶自定義數(shù)據(jù)(如Modbus下的寄存器地址、IEC870.5-104下的類型標識等)、輸入輸出類型、點類型(模擬量、開關量、SOE、字符串)
1,,,,,,,,,
PIN,SN,LN,DN,CN,DT,DL,UP,IOT,PT
;通訊點項名,站號,鏈路號,設備號,通道號,數(shù)據(jù)類型,數(shù)據(jù)長度,用戶自定義數(shù)據(jù),輸入輸出類型,點類型
AVI001.AV,65,0,1,0,9,4,40001,0,0
AVI001.QC,65,0,1,0,9,4,40001,0,0
DVI001.DV,65,0,2,1,4,1,30001,0,1
DVO001.QC,65,0,2,1,4,1,30001,1,1
ComPoints.csv文件中數(shù)據(jù)區(qū)的第一行信息說明,與GME系統(tǒng)通訊的65號通訊站的0號鏈路下,1號設備的第0個數(shù)據(jù)的點項名是AVI001.AV,代表當前值,存放在40001寄存器地址中,是模擬量輸入點。
規(guī)定用戶自定義參數(shù)區(qū):
如果鏈路是MODBUS-RTU類型,輸入信息依次為:通訊點項數(shù)據(jù)對應的寄存器地址。
如果鏈路是MODBUS-TCP或IEC-104類型,輸入信息待定。
驅(qū)動程序負責將第三方系統(tǒng)中采集的數(shù)據(jù)傳送到共享內(nèi)存的輸入?yún)^(qū)中,并將共享內(nèi)存輸出區(qū)中的數(shù)據(jù)傳送到相應的第三方系統(tǒng)中,在整個通訊站軟件中處于數(shù)據(jù)傳遞的橋梁的作用。
根據(jù)Level2產(chǎn)生的配置文件LinkDef.csv提供了對應的鏈路數(shù)及其通訊協(xié)議類型,驅(qū)動程序啟動對應的鏈路數(shù)據(jù)處理線程(以下簡稱子線程或鏈路線程)與第三方系統(tǒng)通訊。采用線程方式是為了減少系統(tǒng)資源的開銷,同時提高程序的并發(fā)性和可擴展性。通訊站中,驅(qū)動程序最多支持4條鏈路,即最多啟動四個線程進行數(shù)據(jù)處理。這些鏈路是三種鏈路類型中的一條或多條。內(nèi)存和共享內(nèi)存的數(shù)據(jù)更新。
主進程完成整個通訊驅(qū)動的初始化和控制功能,在各子線程中完成與第三方系統(tǒng)的通訊。各子線程之間相互獨立,不存在相互的數(shù)據(jù)依賴關系。
為了保證將共享內(nèi)存數(shù)據(jù)進行一次性更新,避免各子線程直接操作共享內(nèi)存,在驅(qū)動程序內(nèi)部開辟了數(shù)據(jù)緩沖區(qū)供主進程和各子線程進行數(shù)據(jù)交換使用。
主進程根據(jù)共享內(nèi)存輸入?yún)^(qū)和輸出區(qū)為所有子線程創(chuàng)建兩個全局緩沖區(qū)(這兩個緩沖區(qū)是共享內(nèi)存IO區(qū)數(shù)據(jù)在驅(qū)動內(nèi)存中的映像):
輸出緩沖區(qū)(命名為OutputBuf)指從共享內(nèi)存輸入?yún)^(qū)讀取的用于發(fā)送給第三方的數(shù)據(jù)緩沖區(qū)。
輸入緩沖區(qū)(命名為InputBuf)指各鏈路采集用來寫入共享內(nèi)存輸入?yún)^(qū)的緩沖區(qū)。
數(shù)據(jù)在緩沖區(qū)依次按通道號、設備號、鏈路號進行排列存放(宏觀來看,緩沖區(qū)的數(shù)據(jù)按鏈路類型存放在各自連續(xù)的單元中)。
結(jié)合驅(qū)動程序的功能和結(jié)構(gòu),對通訊驅(qū)動軟件進行模塊設計和劃分。程序各模塊的主要源文件定義如表1所示。
圖1 在通訊站軟件中驅(qū)動程序結(jié)構(gòu)圖
當主進程啟動各鏈路子線程后,各鏈路子線程獨立的進行數(shù)據(jù)發(fā)送和采集,主進程每隔一定時間間隔(暫定50ms,第三方系統(tǒng)數(shù)據(jù)發(fā)送周期是秒級,如周期太小交互頻繁而影響性能可以在聯(lián)調(diào)階段適當調(diào)整數(shù)據(jù)交換的周期)進行驅(qū)動內(nèi)存(數(shù)據(jù)緩沖區(qū))和共享內(nèi)存的數(shù)據(jù)交換。驅(qū)動程序啟動后,在定時器的控制下,定時進行驅(qū)動
通過分布式控制系統(tǒng)中通信軟件的設計,使得RTS可以和modbusRtu、modbusTcp、iec104進行共享驅(qū)動,是通信數(shù)據(jù)的發(fā)送采集處理得到統(tǒng)一處理。高效快速,性能優(yōu)越,利于在整個工業(yè)開發(fā)中的推廣應用。
圖2 驅(qū)動程序的數(shù)據(jù)流圖
表1 主要源文件定義
[1]王常力,羅安.分布式控制系統(tǒng)(DCS)設計與應用實例[M].北京:電子工業(yè)出版社,2004.
[2]呂當俠.CAN總線的特點及應用[J].航空與航天,2005;(3):16~20.
[3]Microsoft.Microsoft speech SDK 5.1 documentation.http://download.microsoft.com/download/SpeechSDK/SDK/5.1/WXP/EN-US/sapi.chm.
[4]Verissimo P.Distributed computer-controlled systems:The DEAR-COTS approach[J].IFAC,2000.