尚前明,劉 安
(武漢理工大學 仿真中心,武漢430063)
基于PLC的數據采集和控制在實際系統(tǒng)中應用很廣泛,隨著計算機技術的發(fā)展,綜合全電力推進系統(tǒng)(IPS)和船舶電力推進已經進入了發(fā)展的新時期[1]。為研究需要,建造小比例實物電力推進系統(tǒng)進行混合仿真,該系統(tǒng)應用了仿真技術、數據采集技術、控制技術以及網絡通信技術。
船舶電力推進仿真系統(tǒng)由配電室、推進裝置、集中控制室等組成,該系統(tǒng)主要實現如下幾方面研究:采用與實船相似的電力推進系統(tǒng)搭建了小比例實物電力推進系統(tǒng);采用可編程控制器PLC和PC機組成數據采集系統(tǒng),變頻器、變壓器、推進電機、負載電機、操作控制器等通過PROFIBUS總線組成電力推進控制系統(tǒng);采用了TCP/IP協(xié)議的局域網;建立了船舶綜合中央能量管理系統(tǒng)的數學模型并進行實時仿真研究[2];將電力推進系統(tǒng)分為不同的子模塊,編制每個子系統(tǒng)仿真模型的數學模型并用仿真軟件Saber對系統(tǒng)進行仿真分析。
電力推進仿真系統(tǒng)網絡由4臺PC機和1套PLC構成。PC機采用以太網的分布式結構,其中一臺計算機作服務器(Server),運行電力推進系統(tǒng)的能量管理數學模型程序,另外三臺計算機作為數據采集和監(jiān)控計算機的客戶端(Client)。型號為PLC314C-2DP的CPU一端通過插在集控臺計算機上的CP5611通訊板卡實現與監(jiān)控計算機的數據采集和通訊;另一端采用雙絞線連接集控臺、駕控臺、機旁和變頻柜,采用PROFIBUS_DP協(xié)議的PROFIBUS總線結構實現數據通訊。船舶電力推進系統(tǒng)的網絡組成如圖1所示,上位計算機網絡特點:分布式結構、TCP/IP協(xié)議和C/S模式;下位計算機網絡的特點:Profibus總線和PROFIBUS-DP協(xié)議。
圖1 船舶電力推進系統(tǒng)網絡結構圖
PLC與四個變頻柜的通信采用了PROFIBUS-DP協(xié)議,Profibus/DP協(xié)議是一個復雜的通訊協(xié)議[3]。Profibus的重要電文結構為:令牌信息、FDL狀態(tài)請求電文、數據電文[2]。
TCP/IP協(xié)議的基本傳輸單位是數據包(datagram),TCP協(xié)議負責把數據分成若干個數據包,并給每個數據包加上相應的編號的包頭(就像給一封信加上信封),以保證在數據接收端能將數據還原為原來的格式;IP協(xié)議在每個包頭上再加上接收端主機地址 (就像信封上要寫明地址一樣),如果傳輸過程中出現數據丟失、數據失真等情況,TCP協(xié)議會自動要求數據重新傳輸,并重新組包??傊琁P協(xié)議保證數據的傳輸,TCP協(xié)議保證數據傳輸的質量。
選用SIMATIC S7-300型PLC。在軟件包STEP7中,設置通信端口,MPI地址設定,選擇數據傳輸速率等。通過MPI端口對S7-300的機架、電源、CPU、信號模件、通信處理器等的類型和物理地址進行組態(tài),并將組態(tài)程序下載到PLC[3]。在STEP7中,可用梯形圖(Ladder)、語句表(STL)或流程圖(FlowChart)進行編程,若選擇“線性程序設計”方法,則把所有程序放在PLC操作系統(tǒng)與用戶程序間的接口的OB1中,PLC周期性地調用此塊。若選擇“結構式程序設計”方法,則通過組織塊OB1調用其它塊,如功能塊FB、數據塊DB等。
工控組態(tài)軟件 WinCC[4]提供PLC的通信驅動程序和功能強大的工具(打印報表、趨勢圖、報警、系統(tǒng)安全等)使開發(fā)監(jiān)控應用程序變得非常方便。PLC與WinCC之間通信的實現方法首先啟動WinCC,建立一個新的WinCC項目,然后在標簽管理中選擇添加PLC驅動程序,建立WinCC與PLC之間的通信連接。然后在編程軟件STEP7下設置標簽名、數據類型和地址,其中最重要的是標簽地址,它定義了此標簽與PLC中某一確定地址如某一輸入位、輸出位或標志位等一一對應的關系,實現PLC與WinCC之間需要通信的數據的一一定義標簽,即可完成PLC與WinCC之間的數據通信。最后在圖形編輯器(GraphicsEditor)中,用基本元件或圖形庫中對象制作工藝流程監(jiān)控畫面,并將變量標簽與每個對象連接,即相當于畫面中各對象與現場設備相連,從而可在CRT畫面上監(jiān)視、控制現場設備。
由于西門子S7-300系列PLC通訊協(xié)議不公開[5],要實現電力推進能量管理必須將PLC采集的數據與仿真的數據集成于服務器。實現與PLC的數據交換實際上是實現Visual C++與WinCC之間的進程通信。由于WinCC可以讀寫Excel數據庫和進行文件操作,并且支持C語言腳本編程,但是WinCC在運行時必須打開Excel數據表才能動態(tài)刷新采集的數據,而且Excel數據表并非真正的數據庫,應該算是數據視圖。所以通過ODBC或DAO的數據庫記錄集類CRecordSet實現對Excel的讀,只有通過SQL查詢語句才能實現對Excel表的修改,而且同時實現對Excel讀寫,這種方式的數據刷新的實時性很差。因此在應用程序中開辟了兩個線程:ReadExcelProc線程負責從Excel表讀取來自PLC的數據,WriteFileProc線程負責將服務器下傳的數據寫進文件里,WinCC通過long_main()函數去讀文件數據,從而實現了進程間數據通信。
3.4.1 命名管道程序實現原理
1)建立連接和通信。服務端使用CreateN-amedPipe函數創(chuàng)建一個命名管道的實例并返回相應的句柄,或為已存在的管道創(chuàng)建新的實例。如果在已定義超時值變?yōu)榱阋郧?,實例管道成功?chuàng)建并返回管道句柄,可以用ConnectNamedPipe函數來偵聽客戶端的連接請求??蛻舳送ㄟ^函數WaitNamedPipe實現客戶進程連接到一個命名管道,如果在超時值變?yōu)榱阋郧?,有一個管道可以為連接使用,則 WaitNamedPipe將返回True,調用CreateFile或CallNamedPipe函數來呼叫對服務端的連接。當服務端與客戶端成功建立連接后,服務端ConnectNamedPipe返回True,客戶端CreateFile將返回一指向管道文件的句柄。以后客戶端與服務器端即可通過ReadFile和WriteFile,利用得到的管道文件句柄,進行彼此間網絡通信。
2)連接終止。當客戶端與服務端的通信結束,或由于某種原因一方需要斷開時,客戶端應調用CloseFile,而服務端應接著調用DisconnectN-amedPipe。當然服務端亦可通過單方面調用DisconnectNamedPipe終止連接。最后應調用函數CloseHandle來關閉該管道。
3.4.2 通信代碼的實現
1)客戶端代碼
HANDLE ClientHandle;
Char PipeNameStr[200];
sprintf(PipeNameStr,″\\\\ServerName\\Pipe\\PipeName″);
if(WaitNamedPipe(PipeNameStr,NMPWAIT _WAIT_FOREVER)==FALSE
MessageBox(″建立管道失??!″);
else
CltHandle=CreateFile(ClientPipeStr,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE|FILE_FLAG_WRITE_THROUGH,NULL);
If(ClientHandle==INVALID_HANDLE_VALUE)
MessageBox(″管道連接失?。 澹?;
else//連接成功,從管道讀寫信息
……。
2)服務端代碼
HANDLE ServerHandle;
char PipeNameStr[200];
sprintf(PipeNameStr,″\\\\ServerName\\Pipe\\PipeName″);
ServerHandle=CreateNamedPipe(PipeNameStr,
PIPE_ACCESS_DUPLEX|FILE_FLAG_WRITE_THROUGH,
FILE_WAIT|PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,
128,128,NULL,NULL);
if(ServerHandle = =INVALID_HANDLE_VALUE)
MessageBox(″建立管道失?。 澹?;
else
If(ConnectNamedPipe(ServerHandle,NULL)==FALSE)
MessageBox(″管道連接失?。 澹?;
else////連接成功,從管道讀寫信息
{
……
}。
SIMATIC S7-314C的PLC可編程控制器數據采集的精度和實時性很好,用WinCC作為數據采集和監(jiān)控的應用軟件是可行的方案。基于命名管道的C/S模式網絡通訊能夠保證數據傳輸的實時性和安全性,可以適用于與服務器與多個客戶端的連接與通信。船舶電力推進系統(tǒng)作為“211”重點建設項目,已經通過了省科技廳舉行的專家鑒定會,與會專家參加一致認為該系統(tǒng)達到國際先進水平。
[1]楊曉麗.吊艙式電力推進系統(tǒng)的動態(tài)仿真的研究[D].上海:上海海事大學,2004.
[2]溫 洪.潛艇電力推進系統(tǒng)負載特性的計算方法[J].機電設備,1999(4):16-22.
[3]羅耀華,葉瑰昀,劉 勇.艦船全電力推進系統(tǒng)模擬研究[J].船舶工程,2002(4):45-49.
[4]展在宏.西門子S7-300及工控組態(tài)軟件 WinCC的應用[J].包鋼科技,2002(2):32-37.
[5]Adnanes AK.Maritime Electrical Installations and Diesel Electric Propulsion[R].Norway:ABB Marine AS,Oslo,2003.