萬(wàn) 丹,楊國(guó)興
(西安石油大學(xué) 陜西 西安 710065)
近年來(lái),隨著西門(mén)子S7-1200 PLC的大力推廣,在部分工業(yè)現(xiàn)場(chǎng)技術(shù)方案的設(shè)計(jì)上,尤其是小的工業(yè)項(xiàng)目上,優(yōu)先選擇S7-1200PLC,可見(jiàn)S7-1200是很受歡迎。如果項(xiàng)目的監(jiān)控需要通過(guò)HMI設(shè)備完成,則監(jiān)控畫(huà)面可與PLC程序同時(shí)在TIA Portal集成環(huán)境里進(jìn)行開(kāi)發(fā)。[1]此外,也可以選擇用C#編寫(xiě)客戶(hù)端來(lái)監(jiān)視和讀寫(xiě),本文介紹基于OPC通信技術(shù)實(shí)現(xiàn)以C#編寫(xiě)客戶(hù)端與S7-1200PLC通信,通過(guò)編寫(xiě)的客戶(hù)端監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)和過(guò)程動(dòng)態(tài)。
SIMATIC S7-1200的通訊接口符合工業(yè)通訊的最高標(biāo)準(zhǔn),且具有全面的集成工藝功能,可以作為一個(gè)組件集成在完整的綜合自動(dòng)化解決方案中。S7-1200配備了CM模塊支持RS232/485以及自身以太網(wǎng)口通訊,可以通過(guò)開(kāi)放的以太網(wǎng)協(xié)議支持與第三方設(shè)備的通訊,我們可以和大量的第三方進(jìn)行自定義字符通訊。[2]
OPC全稱(chēng)是OLE for Process Control,是一個(gè)工業(yè)標(biāo)準(zhǔn)。采用這項(xiàng)標(biāo)準(zhǔn)后,開(kāi)發(fā)商可開(kāi)發(fā)統(tǒng)一的OPC接口程序,減輕了用戶(hù)和軟件開(kāi)發(fā)商不必要的工作負(fù)擔(dān)。[3]
C#是由C和C++衍生出來(lái)的面向?qū)ο蟮木幊陶Z(yǔ)言。C#綜合了VB簡(jiǎn)單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、語(yǔ)言特性和面向組件編程的支持,成為.NET開(kāi)發(fā)的首選語(yǔ)言。[4]
TIA:Totally Integrated Automation的簡(jiǎn)稱(chēng),即全集成自動(dòng)化。TIA Portal分為2部分:Step7與WinCC。由于Portal集成特點(diǎn),在模擬上有一定優(yōu)勢(shì),可以在一個(gè)項(xiàng)目中同時(shí)模擬人機(jī)與PLC程序通訊,效果更加直觀。并且未來(lái)西門(mén)子主推TIA Portal,它可以對(duì)西門(mén)子所有的PLC產(chǎn)品進(jìn)行編程、開(kāi)發(fā)、集成。在此項(xiàng)目中使用的是TIA V13 SP1版本。
SIMATIC NET軟件是用于西門(mén)子工業(yè)網(wǎng)絡(luò)通訊的軟件。[1]用SIMATIC NET提供OPC Server通訊速度更快,通過(guò)VB、VC等第三方軟件訪問(wèn)SIMATIC NET提供的OPC Server,讀寫(xiě)的速度可以達(dá)到200ms之內(nèi),甚至更快。本文采用UA Server + C#+PLC,即通過(guò)訪問(wèn)UA Server提供的OPC Server為OPC.SimaticNet.S7進(jìn)行數(shù)據(jù)讀寫(xiě)。[5]在此項(xiàng)目中使用的是SIMATIC NET 8.2版本。
Microsoft Visual Studio(簡(jiǎn)稱(chēng)VS)是一個(gè)基本完整的開(kāi)發(fā)工具集。所寫(xiě)的目標(biāo)代碼適用于微軟支持的所有平臺(tái)。在此項(xiàng)目中使用的是VS 2015版。
本文以1214C AC/DC/RLY型CPU模塊為例,PLC硬件配置過(guò)程在此不做敘述。
(1)點(diǎn)擊TIA,打開(kāi)組態(tài)的工程,選擇主菜單->“添加新設(shè)備”->插入PC站,命名為:“PC Station”。[6]
(2)進(jìn)入PC Station硬件組態(tài)界面。在“通訊模塊”下,雙擊IE General,自動(dòng)插入對(duì)應(yīng)的卡槽。
在“用戶(hù)應(yīng)用程序”欄中,添加一個(gè)OPC Sever的應(yīng)用。因?yàn)楸疚氖褂玫氖荢IMATIC NET 8.2版本,所以通過(guò)選中“更改設(shè)備類(lèi)型”,選擇8.2版本OPC服務(wù)器。
在OPC服務(wù)器屬性中設(shè)置相關(guān)的信息。選擇“PC station”,在屬性中OPC變量選擇“全部”。
配置網(wǎng)卡地址并新建一個(gè)以太網(wǎng),選中“IE General卡>屬性>常規(guī)”,配置此項(xiàng)目IP地址設(shè)置為:192.168.0.35。
(1)將PC機(jī)的IP地址也設(shè)置為192.168.0.35。
(2)PLC和PC Station等其他設(shè)備的IP地址一定要在同一個(gè)域中,否則無(wú)法通訊成功。配置PLC的以太網(wǎng)地址,設(shè)備視圖中選中“1200PLC>屬性>常規(guī)>以太網(wǎng)地址”,接口連接到“PN/IE_1”,將PLC的IP地址也設(shè)置為192.168.0.30。
點(diǎn)擊“網(wǎng)絡(luò)視圖”的圖標(biāo),進(jìn)入網(wǎng)絡(luò)配置,添加“S7連接”,鼠標(biāo)左鍵長(zhǎng)按選中OPC服務(wù)器接口拖至1200PLC以太網(wǎng)接口,會(huì)出現(xiàn)“PN/IE_1”變成“S7_Connection_1”且信號(hào)線變高亮,則表明連接成功。
選擇S7_Connection_1“屬性”配置連接參數(shù),在常規(guī)中可以看到連接路徑中配置的信息。在地址詳細(xì)信息中可以看到配置的地址信息。設(shè)置 S7 連接屬性及TSAP地址 Connection properties,TSAP。
在PLC程序塊中新建一個(gè)DB塊命名為“Database to OPC”。選中“DB塊>屬性”,取消優(yōu)化的塊訪問(wèn),這樣OPC就能對(duì)DB塊中信息訪問(wèn)和讀寫(xiě)。
把項(xiàng)目中需要監(jiān)視的數(shù)據(jù)在“Database to OPC”DB塊中定義,或者在其他DB塊中直接選取。在此專(zhuān)門(mén)建立的部分?jǐn)?shù)據(jù),為了方便我們?cè)贠PC Scout V10中監(jiān)控。
在網(wǎng)絡(luò)視圖模式下,選擇“PC station>屬性>生成XDB文件>編譯PC station”,對(duì)應(yīng)的文件夾中自動(dòng)生成一個(gè)PC station.xdb文件,這樣在組態(tài)Station Configuration Editor時(shí)可直接將生成的XDB文件導(dǎo)入,而不用手動(dòng)添加。
雙擊圖標(biāo),進(jìn)入“Station Configuration Editor”中,添加導(dǎo)入PC station.xdb。導(dǎo)入成功后,status的狀態(tài)會(huì)顯示我們添加成功。
(1)PLC組態(tài)下載:設(shè)備中選中PLC,開(kāi)始下載PLC的硬件和軟件信息,選擇對(duì)應(yīng)的接口/子網(wǎng)的連接。
(2)PC Station組態(tài)下載:選中PC Station,開(kāi)始下載IE general_1,選擇對(duì)應(yīng)的接口/子網(wǎng)的連接,將“顯示所有兼容的設(shè)備”前的對(duì)號(hào)取消。
打開(kāi)OPC Scout V10軟件,按照菜單依次打開(kāi)“UA server>OPC.SimaticNET.S7>Objects”,“SYM>S7-1200station_1>PLC1>Database to OPC”。在DB塊中將我們要檢測(cè)的數(shù)據(jù)拖入DA view 1欄中。
啟動(dòng)在線監(jiān)視,可以觀察到“Monitoring ON”開(kāi)始讀條,從Result欄顯示GOOD,表明點(diǎn)是好點(diǎn),反之亦然。Value欄中顯示了檢測(cè)變量當(dāng)前的數(shù)值,說(shuō)明OPC通訊正常。
OPC系統(tǒng)由OPC服務(wù)器和OPC客戶(hù)端構(gòu)成。OPC Server共分為三層:OPC Server,OPCGroup和OPCItem。OPCItem可對(duì)應(yīng)到實(shí)際的硬件裝置上的channel或port;每個(gè)OPCGroup包含多個(gè)OPCItem并定義這些OPCItem更新的時(shí)間、方式,以及提供讀取OPC Item值的接口;而每個(gè)OPC Server包含若干OPCGroup,且提供操作這些OPCGroup的接口。
OPC技術(shù)適合于應(yīng)用在很短時(shí)間內(nèi)更新大量過(guò)程數(shù)據(jù)的工業(yè)場(chǎng)合。在實(shí)際應(yīng)用中,主要包括對(duì)現(xiàn)場(chǎng)數(shù)據(jù)的讀寫(xiě)操作。OPC客戶(hù)端讀取數(shù)據(jù)方式:同步、異步、訂閱。[3]
經(jīng)過(guò)分析,采用OPC異步讀寫(xiě)方式進(jìn)行客戶(hù)端軟件實(shí)現(xiàn),因?yàn)楫惒酵ㄓ嵭矢?。?jiàn)圖1~3。
圖1 OPC客戶(hù)端與OPC服務(wù)器通訊異步讀取主線
圖2 OPC客戶(hù)端與OPC服務(wù)器通訊異步讀取支線1
圖3 OPC客戶(hù)端與OPC服務(wù)器通訊異步讀取支線2
OPC 標(biāo)準(zhǔn)提供了兩種接口:自動(dòng)化接口和自定義接口。自動(dòng)化接口是為基于腳本語(yǔ)言開(kāi)發(fā)定義的標(biāo)準(zhǔn)接口,一般使用Visual Basic、Delphi 等語(yǔ)言開(kāi)發(fā)OPC客戶(hù)端應(yīng)用;自定義接口是為基于高級(jí)語(yǔ)言開(kāi)發(fā)定義的標(biāo)準(zhǔn)接口,一般使用C++、C#等語(yǔ)言開(kāi)發(fā)OPC客戶(hù)端應(yīng)用,本文在客戶(hù)端的開(kāi)發(fā)中使用自定義接口,使用C#語(yǔ)言開(kāi)發(fā)。
(1)添加引用
using OPCSiemensDAAutomation;
OPC Server是以O(shè)PC服務(wù)的形式提供服務(wù),要使用OPC服務(wù),首先引入動(dòng)態(tài)庫(kù)。
(2)創(chuàng)建OPC.SimaticNet 的OPC服務(wù)的實(shí)例
MyOpcServer = new OPCServer();
MyOpcServer.Connect("OPC.SimaticNET","192.168.0.35");
(3)為服務(wù)實(shí)例添加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 組中添加需要讀寫(xiě)的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);//以一個(gè)數(shù)據(jù)為例
(6)定時(shí)讀取事件
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);
}
}
點(diǎn)擊開(kāi)始監(jiān)視,與OPC建立通訊,軟件開(kāi)始進(jìn)行數(shù)據(jù)讀取,并且按照定時(shí)器設(shè)定的時(shí)間實(shí)時(shí)刷新。如圖4所示。
圖4 客戶(hù)端窗口
若數(shù)據(jù)出現(xiàn)壞點(diǎn)或者超限,可以進(jìn)行報(bào)警記錄。也可以將系統(tǒng)某時(shí)間點(diǎn)的實(shí)時(shí)數(shù)據(jù)導(dǎo)出成為EXCEL表格,方便我們打印和記錄。如圖5所示。更進(jìn)一步也可將數(shù)據(jù)實(shí)時(shí)傳入數(shù)據(jù)庫(kù)中,方便管理,在此不做進(jìn)一步介紹。
圖5 導(dǎo)出的EXCEL表格
本文內(nèi)容是實(shí)際工程項(xiàng)目的應(yīng)用總結(jié),該方法已經(jīng)成功應(yīng)用于項(xiàng)目中,系統(tǒng)運(yùn)行穩(wěn)定、可靠,效果良好。此技術(shù)可以應(yīng)用于有些項(xiàng)目沒(méi)有采用HMI設(shè)備,項(xiàng)目不大且預(yù)算較少,簡(jiǎn)化了開(kāi)發(fā)過(guò)程,可以用C#編寫(xiě)自己滿(mǎn)意的風(fēng)格畫(huà)面,具有很大的應(yīng)用靈活性。高效的數(shù)據(jù)采集、傳輸、顯示、存貯和應(yīng)用,提升了企業(yè)生產(chǎn)效率,并降低生產(chǎn)成本。
[1] 段潤(rùn)群,謝云山.上位機(jī)軟件與S7-1200 PLC的OPC通信研究[J].自動(dòng)化與儀器儀表,2014:13-15,19.
[2] 西門(mén)子(中國(guó))有限公司.深入淺出西門(mén)子S7-1200PLC[M].北京航空航天大學(xué)出版社,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#多線程參考與實(shí)例.下載網(wǎng)址:http://download.csdn.net/detail/emeralddream/2683238
[5] 西門(mén)子(中國(guó))自動(dòng)化與驅(qū)動(dòng)集團(tuán).通過(guò)ETHERNET建立SIMATIC NET OPC服務(wù)器與PLC的S7連接[M].北京: 2005.
[6] 西門(mén)子S7-1200PLC技術(shù)參考Version 3.3.下載網(wǎng)址:http://www.ad.siemens.com.cn/download.文檔編號(hào):A0426.