萬 丹,楊國興
(西安石油大學 陜西 西安 710065)
近年來,隨著西門子S7-1200 PLC的大力推廣,在部分工業(yè)現(xiàn)場技術(shù)方案的設(shè)計上,尤其是小的工業(yè)項目上,優(yōu)先選擇S7-1200PLC,可見S7-1200是很受歡迎。如果項目的監(jiān)控需要通過HMI設(shè)備完成,則監(jiān)控畫面可與PLC程序同時在TIA Portal集成環(huán)境里進行開發(fā)。[1]此外,也可以選擇用C#編寫客戶端來監(jiān)視和讀寫,本文介紹基于OPC通信技術(shù)實現(xiàn)以C#編寫客戶端與S7-1200PLC通信,通過編寫的客戶端監(jiān)測實時數(shù)據(jù)和過程動態(tài)。
SIMATIC S7-1200的通訊接口符合工業(yè)通訊的最高標準,且具有全面的集成工藝功能,可以作為一個組件集成在完整的綜合自動化解決方案中。S7-1200配備了CM模塊支持RS232/485以及自身以太網(wǎng)口通訊,可以通過開放的以太網(wǎng)協(xié)議支持與第三方設(shè)備的通訊,我們可以和大量的第三方進行自定義字符通訊。[2]
OPC全稱是OLE for Process Control,是一個工業(yè)標準。采用這項標準后,開發(fā)商可開發(fā)統(tǒng)一的OPC接口程序,減輕了用戶和軟件開發(fā)商不必要的工作負擔。[3]
C#是由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、語言特性和面向組件編程的支持,成為.NET開發(fā)的首選語言。[4]
TIA:Totally Integrated Automation的簡稱,即全集成自動化。TIA Portal分為2部分:Step7與WinCC。由于Portal集成特點,在模擬上有一定優(yōu)勢,可以在一個項目中同時模擬人機與PLC程序通訊,效果更加直觀。并且未來西門子主推TIA Portal,它可以對西門子所有的PLC產(chǎn)品進行編程、開發(fā)、集成。在此項目中使用的是TIA V13 SP1版本。
SIMATIC NET軟件是用于西門子工業(yè)網(wǎng)絡(luò)通訊的軟件。[1]用SIMATIC NET提供OPC Server通訊速度更快,通過VB、VC等第三方軟件訪問SIMATIC NET提供的OPC Server,讀寫的速度可以達到200ms之內(nèi),甚至更快。本文采用UA Server + C#+PLC,即通過訪問UA Server提供的OPC Server為OPC.SimaticNet.S7進行數(shù)據(jù)讀寫。[5]在此項目中使用的是SIMATIC NET 8.2版本。
Microsoft Visual Studio(簡稱VS)是一個基本完整的開發(fā)工具集。所寫的目標代碼適用于微軟支持的所有平臺。在此項目中使用的是VS 2015版。
本文以1214C AC/DC/RLY型CPU模塊為例,PLC硬件配置過程在此不做敘述。
(1)點擊TIA,打開組態(tài)的工程,選擇主菜單->“添加新設(shè)備”->插入PC站,命名為:“PC Station”。[6]
(2)進入PC Station硬件組態(tài)界面。在“通訊模塊”下,雙擊IE General,自動插入對應(yīng)的卡槽。
在“用戶應(yīng)用程序”欄中,添加一個OPC Sever的應(yīng)用。因為本文使用的是SIMATIC NET 8.2版本,所以通過選中“更改設(shè)備類型”,選擇8.2版本OPC服務(wù)器。
在OPC服務(wù)器屬性中設(shè)置相關(guān)的信息。選擇“PC station”,在屬性中OPC變量選擇“全部”。
配置網(wǎng)卡地址并新建一個以太網(wǎng),選中“IE General卡>屬性>常規(guī)”,配置此項目IP地址設(shè)置為:192.168.0.35。
(1)將PC機的IP地址也設(shè)置為192.168.0.35。
(2)PLC和PC Station等其他設(shè)備的IP地址一定要在同一個域中,否則無法通訊成功。配置PLC的以太網(wǎng)地址,設(shè)備視圖中選中“1200PLC>屬性>常規(guī)>以太網(wǎng)地址”,接口連接到“PN/IE_1”,將PLC的IP地址也設(shè)置為192.168.0.30。
點擊“網(wǎng)絡(luò)視圖”的圖標,進入網(wǎng)絡(luò)配置,添加“S7連接”,鼠標左鍵長按選中OPC服務(wù)器接口拖至1200PLC以太網(wǎng)接口,會出現(xiàn)“PN/IE_1”變成“S7_Connection_1”且信號線變高亮,則表明連接成功。
選擇S7_Connection_1“屬性”配置連接參數(shù),在常規(guī)中可以看到連接路徑中配置的信息。在地址詳細信息中可以看到配置的地址信息。設(shè)置 S7 連接屬性及TSAP地址 Connection properties,TSAP。
在PLC程序塊中新建一個DB塊命名為“Database to OPC”。選中“DB塊>屬性”,取消優(yōu)化的塊訪問,這樣OPC就能對DB塊中信息訪問和讀寫。
把項目中需要監(jiān)視的數(shù)據(jù)在“Database to OPC”DB塊中定義,或者在其他DB塊中直接選取。在此專門建立的部分數(shù)據(jù),為了方便我們在OPC Scout V10中監(jiān)控。
在網(wǎng)絡(luò)視圖模式下,選擇“PC station>屬性>生成XDB文件>編譯PC station”,對應(yīng)的文件夾中自動生成一個PC station.xdb文件,這樣在組態(tài)Station Configuration Editor時可直接將生成的XDB文件導入,而不用手動添加。
雙擊圖標,進入“Station Configuration Editor”中,添加導入PC station.xdb。導入成功后,status的狀態(tài)會顯示我們添加成功。
(1)PLC組態(tài)下載:設(shè)備中選中PLC,開始下載PLC的硬件和軟件信息,選擇對應(yīng)的接口/子網(wǎng)的連接。
(2)PC Station組態(tài)下載:選中PC Station,開始下載IE general_1,選擇對應(yīng)的接口/子網(wǎng)的連接,將“顯示所有兼容的設(shè)備”前的對號取消。
打開OPC Scout V10軟件,按照菜單依次打開“UA server>OPC.SimaticNET.S7>Objects”,“SYM>S7-1200station_1>PLC1>Database to OPC”。在DB塊中將我們要檢測的數(shù)據(jù)拖入DA view 1欄中。
啟動在線監(jiān)視,可以觀察到“Monitoring ON”開始讀條,從Result欄顯示GOOD,表明點是好點,反之亦然。Value欄中顯示了檢測變量當前的數(shù)值,說明OPC通訊正常。
OPC系統(tǒng)由OPC服務(wù)器和OPC客戶端構(gòu)成。OPC Server共分為三層:OPC Server,OPCGroup和OPCItem。OPCItem可對應(yīng)到實際的硬件裝置上的channel或port;每個OPCGroup包含多個OPCItem并定義這些OPCItem更新的時間、方式,以及提供讀取OPC Item值的接口;而每個OPC Server包含若干OPCGroup,且提供操作這些OPCGroup的接口。
OPC技術(shù)適合于應(yīng)用在很短時間內(nèi)更新大量過程數(shù)據(jù)的工業(yè)場合。在實際應(yīng)用中,主要包括對現(xiàn)場數(shù)據(jù)的讀寫操作。OPC客戶端讀取數(shù)據(jù)方式:同步、異步、訂閱。[3]
經(jīng)過分析,采用OPC異步讀寫方式進行客戶端軟件實現(xiàn),因為異步通訊效率更高。見圖1~3。

圖1 OPC客戶端與OPC服務(wù)器通訊異步讀取主線

圖2 OPC客戶端與OPC服務(wù)器通訊異步讀取支線1

圖3 OPC客戶端與OPC服務(wù)器通訊異步讀取支線2
OPC 標準提供了兩種接口:自動化接口和自定義接口。自動化接口是為基于腳本語言開發(fā)定義的標準接口,一般使用Visual Basic、Delphi 等語言開發(fā)OPC客戶端應(yīng)用;自定義接口是為基于高級語言開發(fā)定義的標準接口,一般使用C++、C#等語言開發(fā)OPC客戶端應(yīng)用,本文在客戶端的開發(fā)中使用自定義接口,使用C#語言開發(fā)。
(1)添加引用
using OPCSiemensDAAutomation;
OPC Server是以O(shè)PC服務(wù)的形式提供服務(wù),要使用OPC服務(wù),首先引入動態(tài)庫。
(2)創(chuàng)建OPC.SimaticNet 的OPC服務(wù)的實例
MyOpcServer = new OPCServer();
MyOpcServer.Connect("OPC.SimaticNET","192.168.0.35");
(3)為服務(wù)實例添加OPCGroup 組
MyOpcGroup = MyOpcServer.OPCGroups.Add("MyGroup1");
MyOpcGroup.IsActive = true;
MyOpcGroup.IsSubscribed = true;
MyOpcGroup.DeadBand = 0;
MyOpcGroup.UpdateRate = 1000;
(4)為異步讀取添加服務(wù)
ServerHandle[0] = MyOpcItem1.ServerHandle;
MyOpcGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(MyOp cGroup_WriteComplete);
MyOpcGroup.AsyncReadComplete += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(MyOpc Group_ReadComplete);
MyOpcGroup.AsyncCancelComplete += new DIOPCGroupEvent_AsyncCancelCompleteEventHandler(MyO pcGroup_CancelComplete);
MyOpcGroup.DataChange += new DIOPCGroupEvent_Da taChangeEventHandler(MyOpcGroup_DataChange);
(5)OPCGroup 組中添加需要讀寫的OPCItem數(shù)據(jù)
M y O p c I t e m1 = M y O p c G r o u p.O P C I t e m s.AddItem("S7-1200 station_1.PLC_1.Database to OPC.A Motor speed", 1);//以一個數(shù)據(jù)為例
(6)定時讀取事件
int[] handle = new int[1];
handle[0] = ServerHandle[0];
Array MyServerHandles = (Array)handle;
Array errors;
int cancelID;
MyOpcGroup.AsyncRead(1,ref MyServerHandles, out errors, READASYNC_ID, out cancelID);
(7)異步讀取完成事件
void MyOpcGroup_ReadComplete(int TrainsactionID,int NumItems,ref System.Array ClientHandles, ref System.Array ItemValues,ref System.Array Qualities,ref System.Array TimeStamps,ref System.Array Errors)
{try;
{if (TrainsactionID == READASYNC_ID);
{if (Convert.ToInt32(ClientHandles.GetValue(1)) == 1);
{if (Convert.ToInt32(Errors.GetValue(1)) == 0);
{OpID = ItemValues.GetValue(1).ToString();
}
}
Application.DoEvents();
}
}
catch (System.Exception error);
{MessageBox.Show(error.Message, "Result-異步讀", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
點擊開始監(jiān)視,與OPC建立通訊,軟件開始進行數(shù)據(jù)讀取,并且按照定時器設(shè)定的時間實時刷新。如圖4所示。

圖4 客戶端窗口
若數(shù)據(jù)出現(xiàn)壞點或者超限,可以進行報警記錄。也可以將系統(tǒng)某時間點的實時數(shù)據(jù)導出成為EXCEL表格,方便我們打印和記錄。如圖5所示。更進一步也可將數(shù)據(jù)實時傳入數(shù)據(jù)庫中,方便管理,在此不做進一步介紹。

圖5 導出的EXCEL表格
本文內(nèi)容是實際工程項目的應(yīng)用總結(jié),該方法已經(jīng)成功應(yīng)用于項目中,系統(tǒng)運行穩(wěn)定、可靠,效果良好。此技術(shù)可以應(yīng)用于有些項目沒有采用HMI設(shè)備,項目不大且預(yù)算較少,簡化了開發(fā)過程,可以用C#編寫自己滿意的風格畫面,具有很大的應(yīng)用靈活性。高效的數(shù)據(jù)采集、傳輸、顯示、存貯和應(yīng)用,提升了企業(yè)生產(chǎn)效率,并降低生產(chǎn)成本。
[1] 段潤群,謝云山.上位機軟件與S7-1200 PLC的OPC通信研究[J].自動化與儀器儀表,2014:13-15,19.
[2] 西門子(中國)有限公司.深入淺出西門子S7-1200PLC[M].北京航空航天大學出版社,2009-11-01.
[3] How to accomplish data accessing through OPC by C#.下載網(wǎng)址:https://support.industry.siemens.com/cs/document/109481353
[4] csdn網(wǎng).c#多線程參考與實例.下載網(wǎng)址:http://download.csdn.net/detail/emeralddream/2683238
[5] 西門子(中國)自動化與驅(qū)動集團.通過ETHERNET建立SIMATIC NET OPC服務(wù)器與PLC的S7連接[M].北京: 2005.
[6] 西門子S7-1200PLC技術(shù)參考Version 3.3.下載網(wǎng)址:http://www.ad.siemens.com.cn/download.文檔編號:A0426.