祝廣場(chǎng) 余小敏
(華電電力科學(xué)研究院中南分院)
基于Prodave的西門子PLC與PC以太網(wǎng)通信研究
祝廣場(chǎng) 余小敏
(華電電力科學(xué)研究院中南分院)
提出了基于Prodave工具包的西門子PLC與PC的通信方法,該方法不需要在PLC側(cè)進(jìn)行編程,只需要在PC側(cè)采用高級(jí)語(yǔ)言調(diào)用若干函數(shù)即可,成本較低且通信可靠。
以太網(wǎng)通信 西門子PLC Prodave
S7-300 PLC擁有高性能的處理器、豐富的IO和通信模塊,在工業(yè)控制中應(yīng)用廣泛,但它的人機(jī)接口功能較弱。如果將PLC與PC通過(guò)通信連接起來(lái),用PC作為上位機(jī),通過(guò)對(duì)PLC的數(shù)據(jù)存儲(chǔ)器中各區(qū)域進(jìn)行讀取與寫入,實(shí)現(xiàn)系統(tǒng)的監(jiān)控、人機(jī)接口通信等功能,就能夠組成功能強(qiáng)、可靠性高、成本低的控制系統(tǒng)[1]。
目前,由于西門子公司沒有公開通信協(xié)議,上位機(jī)程序設(shè)計(jì)主要有兩種方式:采用專門的組態(tài)軟件(如WinCC、組態(tài)王等)開發(fā)或是通過(guò)編程語(yǔ)言自行開發(fā)。第1種方法操作簡(jiǎn)單、效率高,對(duì)開發(fā)人員的要求相對(duì)較低,但成本較高;第2種方法相對(duì)復(fù)雜,要求開發(fā)者具有較高的編程水平,開發(fā)周期長(zhǎng),但與第1種方法相比具有靈活、成本低的優(yōu)點(diǎn)[2]。
Prodave(Proces Data Traffic)是西門子公司開發(fā)的S7系列PLC和PC通信的工具包,它為PLC和PC通信提供了一種橋梁,既避免了組態(tài)軟件的高昂成本,又不要求開發(fā)人員有很高的編程水平。筆者通過(guò)對(duì)Prodave進(jìn)行研究,以S7315-2PN/DP PLC為下位機(jī),采用VS2008編程工具,開發(fā)了一種PLC與PC機(jī)之間的以太網(wǎng)通信軟件。
Prodave是用于PC與S7系列PLC間數(shù)據(jù)通信的工具軟件包[3]。Prodave提供了大量基于Windows操作系統(tǒng)的DLL函數(shù),以解決PLC與PC之間數(shù)據(jù)交換和處理的問題,可以在高級(jí)語(yǔ)言編程環(huán)境中調(diào)用這些函數(shù)來(lái)建立或斷開通信連接、讀寫CPU的系統(tǒng)存儲(chǔ)器。它具有以下特點(diǎn):
a. 支持PC上的標(biāo)準(zhǔn)以太網(wǎng)卡和Simatic S7的以太網(wǎng)口(CPU31XX-PN、CP31X-PN、CP343和CP443);
b. 能讀寫PLC中DB塊和內(nèi)存的數(shù)據(jù);
c. 支持S7-200 PLC、S7-300 PLC和S7-400 PLC;
d. PLC側(cè)無(wú)需編程,只需在PC中編寫程序,調(diào)用Prodave的DLL即可,支持VB、VC及DEPHI等高級(jí)語(yǔ)言。
連接PLC函數(shù)LoadConnection_ex6()用于初始化適配器,檢查是否裝載了驅(qū)動(dòng),并將選擇的通信接口激活。可以用來(lái)通過(guò)MPI或IP地址建立對(duì)PLC的連接。函數(shù)原型為L(zhǎng)oadConnection_ex6(int ConNr, char* pAccessPoint, int ConTableLen, CON_TABLE_TYPE * pConTable)。ConNr是連接PLC的序號(hào)(0~63),最多可以連接64個(gè);pAccessPoint為訪問點(diǎn),“S7ONLINE”表示MPI方式,“1”表示TCP/IP方式,“2”表示MAC方式;ConTableLen為地址表的長(zhǎng)度;pConTable為地址表,用于存放PLC的地址。
激活PLC函數(shù)SetActiveConnection_ex6()用于激活PLC和PC之間建立的連接。函數(shù)原型為int SetActiveConnection_ex6(int ConNr),ConNr是連接序號(hào)。
讀取PLC數(shù)據(jù)函數(shù)。函數(shù)db_read_ex6()和field_read_ex6()分別用來(lái)讀取PLC中的任意存儲(chǔ)區(qū)數(shù)據(jù)和DB數(shù)據(jù),可采用字、雙字的方式,讀取的數(shù)據(jù)放在PC的數(shù)據(jù)緩沖區(qū)。field_read_ex6()的函數(shù)原型為int field_read_ex6 (char FieldType, unsigned short BlkNr, unsigned short StartNr, unsigned long Amount, unsigned long BufLen, unsigned char * pBuffer, unsigned long * pDatLen),其參數(shù)見表1,db_read_ex6()與它類似。
表1 讀取PLC數(shù)據(jù)函數(shù)參數(shù)
寫數(shù)據(jù)至PLC。函數(shù)field_write_ex6()和db_write_ex6()用于向PLC中寫入數(shù)據(jù),其參數(shù)和讀取PLC數(shù)據(jù)函數(shù)類似。
位狀態(tài)讀取和寫入函數(shù)。函數(shù)mb_bittest_ex6()和mb_setbit_ex6()分別用來(lái)讀取和寫入PLC中的某個(gè)位變量,mb_bittest_ex6()的函數(shù)原型為int mb_bittest_ex6 (unsigned short MbNr, unsigned short BitNr, int * pValue),其中MbNr為字節(jié)號(hào),BitNr為位號(hào),pValue為狀態(tài)(“1”表示TRUE,“0”表示FALSE)。兩個(gè)函數(shù)的參數(shù)意義相同。
3.1 動(dòng)態(tài)鏈接庫(kù)及其特點(diǎn)
動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library, DLL)是微軟公司在微軟視窗操作系統(tǒng)中實(shí)現(xiàn)共享函數(shù)庫(kù)概念的一種方式。這些庫(kù)函數(shù)的擴(kuò)展名是.DLL、.OCX(包含ActiveX控制的庫(kù))或者.DRV(舊式的系統(tǒng)驅(qū)動(dòng)程序)。
動(dòng)態(tài)鏈接庫(kù)是不能直接執(zhí)行的,也不能接收消息,它只是一個(gè)獨(dú)立的文件,它提供了一種方法使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于一個(gè)DLL中,該DLL包含一個(gè)或多個(gè)已被編譯、鏈接并與使用它們的進(jìn)程分開存儲(chǔ)的函數(shù)。DLL還有助于共享數(shù)據(jù)和資源。多個(gè)應(yīng)用程序可同時(shí)訪問內(nèi)存中單個(gè)DLL副本的內(nèi)容。
動(dòng)態(tài)鏈接庫(kù)在電腦中可以更容易地將更新應(yīng)用于各個(gè)模塊,而不會(huì)影響該程序的其他部分。例如,一個(gè)大型的軟件,如果把整個(gè)數(shù)百M(fèi)B甚至數(shù)GB的程序代碼都放在一個(gè)應(yīng)用程序里,日后的修改工作將會(huì)十分費(fèi)時(shí),而如果把不同功能的代碼分別放在數(shù)個(gè)動(dòng)態(tài)鏈接庫(kù)中,無(wú)需重新生成或安裝整個(gè)程序就可以應(yīng)用更新,更有利于軟件的模塊化設(shè)計(jì)。
3.2 Visual Studio2008對(duì)Prodave6.0 DLL文件的引用
在VS2008中調(diào)用DLL時(shí),需要添加如下代碼:
using System.Runtime.InteropServices; //用于調(diào)用動(dòng)態(tài)庫(kù)的接口;
在調(diào)用DLL中的某個(gè)函數(shù)時(shí),首先必須要有一個(gè)聲明,使用的是DllImport關(guān)鍵字:[DllImport("Prodave6.dll")],代碼中DllImport關(guān)鍵字的作用是告訴編譯器入口點(diǎn)在哪里,并將打包函數(shù)捆綁在類Prodave中。
然后對(duì)函數(shù)進(jìn)行聲明:
public extern static int LoadConnection_ex6(int ConNr, string pAccessPoint, int ConTableLen, ref CON_TABLE_TYPE pConTable);// 連接PLC操作;
進(jìn)行以上操作之后,便可以在程序中使用DLL中的函數(shù)了。
3.3 西門子STEP7對(duì)PLC的設(shè)置
在進(jìn)行通信之前,需要對(duì)西門子的PG/PC接口進(jìn)行設(shè)置。在開始菜單中,打開“設(shè)置PG/PC接口”(圖1),在選項(xiàng)中選擇TCP/IP所對(duì)應(yīng)的網(wǎng)卡,確定即可。
3.4 PLC和PC之間的通信流程
在PLC和PC進(jìn)行通信之前,需要對(duì)通信參數(shù)進(jìn)行設(shè)置,筆者采用以太網(wǎng)通信方式,故在監(jiān)控界面中輸入PLC的IP地址,之后才能建立連接。建立連接之后,系統(tǒng)啟動(dòng)定時(shí)器和數(shù)據(jù)庫(kù),定時(shí)器以一定間隔執(zhí)行讀寫函數(shù)和數(shù)據(jù)處理函數(shù),并在畫面中實(shí)時(shí)顯示;數(shù)據(jù)庫(kù)對(duì)需要記錄的數(shù)據(jù)及時(shí)保存。定時(shí)器函數(shù)的執(zhí)行周期可以在畫面中設(shè)置。
圖1 西門子STEP7中對(duì)PLC的設(shè)置
在通信過(guò)程中,系統(tǒng)每執(zhí)行一次函數(shù),都會(huì)返回一個(gè)代碼,軟件通過(guò)對(duì)代碼進(jìn)行解析,判斷函數(shù)是否被正確執(zhí)行,如果錯(cuò)誤,則會(huì)觸發(fā)報(bào)警提示,并中斷此函數(shù)的執(zhí)行。
4.1 PC和PLC通信程序要實(shí)現(xiàn)的功能
上位機(jī)程序框架如圖2所示。
圖2 PC和PLC通信程序框架
定時(shí)器周期執(zhí)行函數(shù)。本系統(tǒng)中,定時(shí)器更新周期設(shè)定為100ms和500ms,其中,數(shù)據(jù)讀寫函數(shù)周期為100ms,以適應(yīng)工業(yè)控制中快速變化的參數(shù);數(shù)據(jù)庫(kù)記錄函數(shù)和狀態(tài)信息顯示函數(shù)周期為500ms。
畫面設(shè)置、操作和顯示。本部分主要實(shí)現(xiàn)人機(jī)接口功能。參數(shù)設(shè)置主要是通信方式和通信參數(shù)的選擇,分為TCP/IP、MPI和MAC共3種通信方式,筆者選用TCP/IP方式,則需把PLC的IP地址設(shè)置到畫面中,在設(shè)置過(guò)程中,必須使PLC和PC的IP地址在同一網(wǎng)段。實(shí)時(shí)趨勢(shì)顯示系統(tǒng)中主要設(shè)備參數(shù)的實(shí)時(shí)數(shù)據(jù),采TeeChart控件實(shí)現(xiàn),可以同時(shí)顯示8條實(shí)時(shí)曲線。報(bào)警光字牌顯示系統(tǒng)中重要的報(bào)警信息,當(dāng)報(bào)警觸發(fā)時(shí),以閃爍方式做出提醒。操作記錄顯示模塊記錄軟件運(yùn)行中,畫面中的主要操作,包括操作人、操作時(shí)間及操作事件等信息。模擬鍵盤為軟件的輸入提供了操作接口。
PLC信息。主要包括PLC內(nèi)部的狀態(tài)信息、數(shù)據(jù)塊信息及診斷緩沖區(qū)信息等。
輔助功能。主要包括程序?qū)rodave動(dòng)態(tài)鏈接庫(kù)的調(diào)用和數(shù)據(jù)處理函數(shù)。
4.2 PC和PLC通信程序的實(shí)現(xiàn)
采用Prodave進(jìn)行PC和PLC通信的流程如圖3所示。
圖3 PC和PLC的通信流程
由于通信過(guò)程中PLC側(cè)不需要編寫程序,因此只需在PC側(cè)進(jìn)行編程即可。建立并激活鏈接的程序代碼如下:
short ConNr = 6;//定義鏈接號(hào),0~63可選;
string AccessPoint = "S7ONLINE"; // 默認(rèn)訪問點(diǎn)為“S7ONLINE”;
ConTable.AdrType = 2; //PC和PLC的通信方式,此處選擇為TCP/IP;
ConTable.SlotNr = 2; //PLC的插槽號(hào);
ConTable.RackNr = 0; //PLC的機(jī)架號(hào);
RetValue_ConnectPlc=ProdaveTest.Prodave.LoadConnection_ex6(ConNr, AccessPoint, ConTableLen, ref ConTable);//連接PLC;
以上為PC連接PLC的函數(shù)代碼,RetValue_ConnectPlc為函數(shù)的返回值,若為“0”表示執(zhí)行成功。連接成功之后,需要將此鏈接激活,代碼為:
RetValue_ActivePLC=ProdaveTest.Prodave.SetActiveConnection_ex6(UConNr);//激活鏈接;
若激活成功,則可繼續(xù)進(jìn)行數(shù)據(jù)傳輸。如果函數(shù)執(zhí)行不成功,可以通過(guò)GetErrorMsg()函數(shù)來(lái)確定返回值所表示的意思。
設(shè)計(jì)中,PLC中的數(shù)據(jù)存放在DB1數(shù)據(jù)塊中,以下程序代碼讀取的是DB1中從地址0開始的8個(gè)浮點(diǎn)型數(shù)據(jù):
UInt16 BlkNr = 1;//PLC中DB數(shù)據(jù)庫(kù)塊的序號(hào);
Prodave.DatType DType = Prodave.DatType.BYTE;//以字節(jié)的形式讀取數(shù)據(jù);
UInt16 StartNr = 0;//DB數(shù)據(jù)塊中要讀取數(shù)據(jù)的起始地址號(hào);
UInt32 pAmount = 32;//讀取數(shù)據(jù)的數(shù)量;
UInt32 BufLen = 32;//定義緩沖區(qū)長(zhǎng)度;
byte[] pReadBuffer = new byte[32];//開辟存儲(chǔ)空間;
UInt32 pDatLen = 0;//初始化緩沖區(qū);
RetValue_ReadDB=ProdaveTest.Prodave.db_read_ex6(BlkNr, DType, StartNr, ref pAmount, BufLen, pReadBuffer, ref pDatLen);//讀取函數(shù);
讀取PLC中M存儲(chǔ)區(qū)數(shù)據(jù)的代碼為:
RetValue_ReadMzone=ProdaveTest.Prodave.field_read_ex6(FType, BlkNr, StartNr, pAmount, BufLen, pReadBuffer, ref pDatLen);//讀取M存儲(chǔ)區(qū)數(shù)據(jù);
其參數(shù)和讀取DB數(shù)據(jù)的函數(shù)類似。值得注意的是,在PLC系統(tǒng)中,很多設(shè)備的狀態(tài)變量、報(bào)警變量等都是以BOOL型數(shù)據(jù)存在的,在Prodave工具包中,有專門讀寫PLC中某一位的函數(shù),但是,如果狀態(tài)變量較多,需要反復(fù)調(diào)用函數(shù),效率太低,使用field_read_ex6()函數(shù)可以解決這一難題。在PLC中定義變量的時(shí)候,可以定義一段連續(xù)的存儲(chǔ)空間用來(lái)存放系統(tǒng)中的狀態(tài)變量,再采用field_read_ex6()函數(shù)以字節(jié)的形式讀取,進(jìn)行簡(jiǎn)單的邏輯運(yùn)算之后即可得到一個(gè)字節(jié)中8個(gè)位變量的信息。
通過(guò)對(duì)西門子Prodave工具包的研究,提出了西門子PLC和PC的以太網(wǎng)通信方法。Visual Studio2008編程方便、性能穩(wěn)定、可靠性高,通過(guò)它對(duì)Prodave動(dòng)態(tài)鏈接庫(kù)的調(diào)用,實(shí)現(xiàn)了PC對(duì)PLC的讀寫操作。編寫的以太網(wǎng)通信程序界面友好、人機(jī)交互方便、數(shù)據(jù)庫(kù)功能較強(qiáng)。筆者提出的通信方法,對(duì)西門子S7-200 PLC、S7-300 PLC和S7-400 PLC具有通用性,可以推廣應(yīng)用。
[1] 馬健,韓曉華,黃旭平,等.PC上位機(jī)與S7-300系列PLC進(jìn)行通訊的研究[J].制造技術(shù)與機(jī)床,2011,(3):169~172.
[2] 趙軍,時(shí)良平,黃春陽(yáng).基于Prodave技術(shù)的西門子PLC監(jiān)控調(diào)試軟件開發(fā)[J].自動(dòng)化應(yīng)用,2011,(10):26~28.
[3] 唐東明,聶詩(shī)良.PRODAVE在S7-300PLC監(jiān)控系統(tǒng)中的應(yīng)用[J].可編程控制器與工廠自動(dòng)化, 2007,(8):41~42.
TheStudyonEthernetCommunicationbetweenSiemensPLCandPCBasedonProdave
ZHU Guang-chang, YU Xiao-min
(ZhongnanBranch,HuadianElectricPowerResearchInstitute)
The Prodave toolkit-based communication between Siemens PLC and PC was proposed, which asks for no programming at PLC and only adopts high-level language to call some functions at PC. This communication method costs lower and has high reliability.
Ethernet communication, Siemens PLC, Prodave
TH862+.7
B
1000-3932(2017)04-0397-04
2016-10-10,
2016-10-31)
祝廣場(chǎng)(1984-),工程師,從事火電廠熱工自動(dòng)化控制和保護(hù)工作,14815197@qq.com。