西門子開放式IE通訊在水電站監(jiān)控系統(tǒng)中的應用
1 引言
目前國內(nèi)的水電站從最初的“集中控制、功能分散方式”到當今流行的“全分層分布開放式運行方式”,已全部采用計算機控制系統(tǒng)取代過去以繼電器常規(guī)控制方式,可實現(xiàn)“無人值班”(少人值守),大大提高了水電站的自動化水平。一般整個水電站監(jiān)控系統(tǒng)在物理上分為兩層:電站控制層和現(xiàn)地控制層。電站控制層(或稱上位機系統(tǒng))主要用于監(jiān)控系統(tǒng)的組態(tài)、維護,水電站運行的監(jiān)視、操作、信息管理、遠動和優(yōu)化控制等?,F(xiàn)地控制層按控制對象分散方式一般設置為機組現(xiàn)地控制單元(LCU)、開關(guān)站及公用現(xiàn)地控制單元(LCU)和閘門現(xiàn)地控制單元(LCU),現(xiàn)地控制單元(LCU)主要采用PLC完成控制對象的數(shù)據(jù)采集與處理、控制與調(diào)節(jié)、安全運行監(jiān)視、事件順序記錄(SOE)、數(shù)據(jù)及網(wǎng)絡通訊等。
2 項目簡介
湖南銅信溪水電站裝設三臺10MW水輪發(fā)電機組,整個監(jiān)控系統(tǒng)采用“全分層分布開放式運行方式”,上位機系統(tǒng)設置二套操作員工作站、一套工程師工作站和一套通訊工作站,現(xiàn)地控制層設置三套機組LCU、一套開關(guān)站及公用LCU和一套閘門LCU。LCU主要采用西門子S7-300集成PROFINET接口的CPU315-2PN/DP模塊,通過編程實現(xiàn)Modbus/TCP協(xié)議與上位機系統(tǒng)通訊;同時配置相應的數(shù)字量輸入/輸出模塊和模擬量輸入模塊,完成機組、開關(guān)站、公用和閘門等設備的控制與調(diào)節(jié)。具體網(wǎng)絡結(jié)構(gòu)如圖1所示。
圖1:湖南銅信溪水電站網(wǎng)絡結(jié)構(gòu)
3 CPU315-2PN/DP模塊及Modbus/TCP協(xié)議
CPU315-2PN/DP是西門子2004年底推出的一款高性價比S7-300 CPU。通過集成的通信接口(MPI/DP,PN),該CPU可直接連接MPI網(wǎng)絡、Profibus-DP網(wǎng)絡、開放式工業(yè)以太網(wǎng),以及基于工業(yè)以太網(wǎng)技術(shù)的新一代現(xiàn)場總線PROFINET。該CPU的推出,進一步增強了S7-300 PLC的通信功能,使S7-300連接以太網(wǎng)的成本大大降低,并為PROFINET技術(shù)的普及提供了強有力支持。集成的IE/PROFINET接口支持多種通訊服務:基于PROFINET的開放通訊 (PROFINET IO, PROFINET CBA)、S7 通訊、開放式IE通訊、SIMATIC NET OPC Server和PG/OP通訊。本項目就是采用開放式IE通訊編程實現(xiàn)Modbus/TCP協(xié)議與水電站上位機系統(tǒng)通訊。軟硬件版本為V2.3.0 或更高、帶有集成PROFINET接口的CPU,均支持開放式IE 通訊,其具有不占用CPU連接資源、最多可建立八個TCP/IP連接,完全基于開放式TCP/IP協(xié)議、可與第三方設備在以太網(wǎng)上進行通訊等優(yōu)點。
Modbus/TCP協(xié)議是簡單的、中立廠商的用于管理和控制自動化設備的Modbus系列通訊協(xié)議的派生產(chǎn)品。Modbus/TCP協(xié)議是一種面向TCP連接的協(xié)議,只有在建立了TCP連接后,才能以半雙工的方式進行數(shù)據(jù)交換。Modbus/TCP協(xié)議結(jié)構(gòu)要求請求和響應帶有六個字節(jié)的前綴,具體結(jié)構(gòu)如下:
byte 0: 事務處理標識符 –通常為 0
byte 1: 事務處理標識符 –通常為 0
byte 2: 協(xié)議標識符= 0
byte 3: 協(xié)議標識符= 0
byte 4: 長度字段 (上半部分字節(jié)) = 0 (所有的消息長度小于256)
byte 5: 長度字段 (下半部分字節(jié)) = 后面字節(jié)的數(shù)量
byte 6: 單元標識符 (原“從站地址”)
byte 7: MODBUS 功能代碼
byte 8:寄存器地址(高字節(jié))
byte 9:寄存器地址(低字節(jié))
byte 10:寄存器數(shù)量(高字節(jié),固定為0)
byte 11:寄存器數(shù)量(低字節(jié))
byte 12:后面數(shù)據(jù)字節(jié)數(shù)量-----寫寄存器時有效
byte 13:寄數(shù)據(jù)1(高字節(jié))-----寫寄存器時有效
byte 14:寄數(shù)據(jù)1(低字節(jié))-----寫寄存器時有效
需要注意的是Modbus/TCP協(xié)議所有的請求都是通過端口號502發(fā)送的,而CPU315-2PN/DP模塊的端口號只能設置為2000至5000。
4 軟件實現(xiàn)
4.1 編程指令說明
在CPU315-2PN/DP這一邊,不是通過NetPro設置通訊連接,而是通過編寫程序?qū)崿F(xiàn)。為了能通過用戶程序和其它與TCP/IP兼容的通訊伙伴通過開放式IE通訊實現(xiàn)交換數(shù)據(jù),STEP7(V5.3+SP1或以上)提供了四個功能塊(FB)和一個用戶定義數(shù)據(jù)類型(UDT)用于組態(tài)連接和數(shù)據(jù)交換:
1) FB63“TSEND”:用于發(fā)送數(shù)據(jù)
2) FB64“TRCV”:用于接收數(shù)據(jù)
3) FB65“TCON”:用于建立連接
4) FB66“TDISCON”:用于斷開連接
5) UDT65“TCON_PAR”:包括組態(tài)連接屬性的數(shù)據(jù)結(jié)構(gòu)
以上功能塊(FB)包含在Standard Library > Communication Blocks庫中。
開放式IE通訊只能通過TCP/IP 建立以太網(wǎng)連接,通訊是面向連接的,只有與通訊伙伴建立了連接后才能傳送數(shù)據(jù)。
要編程建立連接,需要創(chuàng)建一個包含UDT65“TCON_PAR”數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)快(DB)。該數(shù)據(jù)結(jié)構(gòu)包含建立連接所需的所有參數(shù),需要為每個連接創(chuàng)建一個這樣的數(shù)據(jù)結(jié)構(gòu)。一個連接建立之后,將受到 CPU 的監(jiān)控,如果中間發(fā)生了中斷,則自動嘗試重新建立連接。
4.2 程序執(zhí)行過程
整個以太網(wǎng)通訊程序分成以下五個部分:
1) 初始化
初始化程序在OB100中執(zhí)行,主要設置連接ID、CPU315-2PN/DP端口號、上位機系統(tǒng)中操作員工作站IP地址和開始等待建立連接標志(FB65_REQ=1)。
2) 建立連接
由開始等待建立連接標志(FB65_REQ=1)調(diào)用FB65等待上位機系統(tǒng)中操作員工作站請求建立連接。如果上位機系統(tǒng)中操作員工作站請求建立了連接,且FB65被無錯誤執(zhí)行建立了連接(FB65_DONE=1),設置開始接收數(shù)據(jù)標志(FB64_EN_R=1)和復位開始等待建立連接標志(FB65_REQ=0)。如果上位機系統(tǒng)中操作員工作站沒有請求建立連接或請求建立了連接FB65執(zhí)行后有錯誤發(fā)生,則程序不做任何處理,還是等待建立連接。
3) 接收數(shù)據(jù)
由開始接收數(shù)據(jù)標志(FB64_EN_R=1)調(diào)用FB64開始接收數(shù)據(jù)。如果上位機系統(tǒng)中操作員工作站發(fā)送了數(shù)據(jù),且被FB64被無錯誤接收后(FB64_BDR=1),則調(diào)用Modbus/TCP協(xié)議處理程序(FB74)對接收到的數(shù)據(jù)進行判斷和處理。如果上位機系統(tǒng)中操作員工作站沒有發(fā)送數(shù)據(jù)或發(fā)生了數(shù)據(jù)FB64執(zhí)行后有錯誤發(fā)生,則程序不做任何處理,還是等待接收數(shù)據(jù)。
4) Modbus/TCP協(xié)議處理
首先判斷接收數(shù)據(jù)數(shù)量、寄存器地址和功能碼是否正確。如果正確,則進行讀/寫數(shù)據(jù)處理,并準備正確響應所需數(shù)據(jù)。如果錯誤,則設置非法數(shù)據(jù)地址或非法功能碼標志,并準備錯誤響應所需數(shù)據(jù)。程序執(zhí)行完成后設置發(fā)送數(shù)據(jù)標志(FB63_REQ=1)和復位開始接收數(shù)據(jù)標志(FB64_EN_R=0)。
5) 發(fā)送數(shù)據(jù)
由開始發(fā)送數(shù)據(jù)標志(FB63_REQ=1)調(diào)用FB63開始發(fā)送數(shù)據(jù)。不管發(fā)送完成是否正確,只要發(fā)送數(shù)據(jù)完成了就設置開始接收數(shù)據(jù)標志(FB64_EN_R=1)和復位發(fā)送數(shù)據(jù)標志(FB63_REQ=0),然后開始等待接收數(shù)據(jù)。
4.3 程序塊
為了實現(xiàn)CPU315-2PN/DP與水電站上位機系統(tǒng)中操作員工作站的數(shù)據(jù)交換,PLC需要下表1所示程序塊:
程序塊 | 說明 |
OB100 | 當CPU重新啟動時,OB100被運行。在該OB中設置連接ID、CPU端口號、操作員工作站IP地址和開始等待建立連接標志。 |
OB1 | 在每個周期都運行,主要調(diào)用以太網(wǎng)通訊控制程序(FB73)。 |
FB63 | 發(fā)送數(shù)據(jù)功能塊,由以太網(wǎng)通訊控制程序(FB73)調(diào)用。 |
FB64 | 接收數(shù)據(jù)功能塊,由以太網(wǎng)通訊控制程序(FB73)調(diào)用。 |
FB65 | 建立連接功能塊,由以太網(wǎng)通訊控制程序(FB73)調(diào)用。 |
FB73 | 以太網(wǎng)通訊控制程序,用于實現(xiàn)以太網(wǎng)的通訊控制。 |
FB74 | Modbus/TCP協(xié)議處理程序,實現(xiàn)對接收到的數(shù)據(jù)進行判斷、處理并準備上傳所需數(shù)據(jù)。 |
DB1 | 用于存放遠方遙控數(shù)據(jù),從操作員工作站寫入的遙控數(shù)據(jù)保存在該DB中。 |
DB2 | 用于存放遠方遙調(diào)數(shù)據(jù),從操作員工作站寫入的遙調(diào)數(shù)據(jù)保存在該DB中。 |
DB5 | 用于存放遙信數(shù)據(jù),操作員工作站讀取的遙信數(shù)據(jù)保存在該DB中。 |
DB6 | 用于存放遙測數(shù)據(jù),操作員工作站讀取的遙測數(shù)據(jù)保存在該DB中。 |
DB7 | 用于存放定值數(shù)據(jù),操作員工作站讀取/寫入的定值數(shù)據(jù)保存在該DB中。 |
DB8 | 用于存放SOE數(shù)據(jù),操作員工作站讀取的SOE數(shù)據(jù)保存在該DB中。 |
DB83 | FB73與操作員工作站1通訊背景數(shù)據(jù)塊。 |
DB84 | FB73與操作員工作站2通訊背景數(shù)據(jù)塊。 |
DB105 | 具有2個UDT65連接屬性的數(shù)據(jù)塊,該DB封裝了與操作員工作站1、2通訊的參數(shù)。 |
DB106 | 具有300個字節(jié)的字節(jié)數(shù)組的數(shù)據(jù)塊,用于存放與操作員工作站1通訊的臨時數(shù)據(jù)。 |
DB107 | 具有300個字節(jié)的字節(jié)數(shù)組的數(shù)據(jù)塊,用于存放與操作員工作站2通訊的臨時數(shù)據(jù)。 |
UDT65 | 以太網(wǎng)連接屬性的數(shù)據(jù)結(jié)構(gòu),包含了組態(tài)連接所必須的參數(shù)。 |
表1:PLC所需程序塊
為了正確組態(tài)連接參數(shù),必須了解連接結(jié)構(gòu)(UDT65)中每個參數(shù)的含義。連接結(jié)構(gòu)(UDT65)的說明如下表2所示:
字節(jié) | 參數(shù) | 數(shù)據(jù) 類型 | 初始值 | 說明 |
0 | block_length | WORD | 64 | 本數(shù)據(jù)結(jié)構(gòu)的長度(字節(jié)數(shù)),固定為64。 |
2 | id | WORD | 1 | 連接ID號(范圍16#0001-16#FFFF),通過初始化程序設置。 |
4 | connection_type | BYTE | 1 | 連接類型,固定為1:兼容的TCP/IP協(xié)議。 |
5 | active_est | BOOL | 0 | 連接建立方式,0:被動,1:主動,固定為0,CPU作為服務器,等待建立連接請求。 |
6 | local_device_id | BYTE | 2 | 本地設備ID,固定為2:CPU集成以太網(wǎng)接口。 |
7 | local_tsap_id_len | BYTE | 2 | 本地站TSAP長度,固定為2:TSAP為端口號。 |
8 | rem_subnet_id_len | BYTE | 0 | 遠程子網(wǎng)長度,不相關(guān)。 |
9 | rem_staddr_len | BYTE | 4 | 遠程站地址長度,固定為4:有效的IP地址,IP地址位于rem_staddr4個字節(jié)。 |
10 | rem_tsap_id_len | BYTE | 0 | 遠程站TSAP長度,不相關(guān)。 |
11 | next_staddr_len | BYTE | 0 | 下一站地址長度,不相關(guān)。 |
12 | local_tsap_id ARRAY[1..16] | BYTE | 0 | 本地站端口號(范圍2000-5000) |
28 | rem_subnet_id ARRAY[1..6] | BYTE | 0 | 不相關(guān) |
34 | rem_staddr ARRAY[1..6] | BYTE | 0 | 遠程站IP地址,通過初始化程序設置。 |
40 | rem_tsap_id ARRAY[1..16] | BYTE | 0 | 遠程站TSAP或端口號,不相關(guān)。 |
56 | next_staddr | BYTE | 0 | 不相關(guān) |
62 | spare | WORD | 0 | 不相關(guān) |
表2:連接結(jié)構(gòu)(UDT65)說明
4.4 以太網(wǎng)通訊控制程序
以太網(wǎng)通訊控制程序采用面向?qū)ο蟮慕Y(jié)構(gòu)化編程方法,在一個功能塊(FB73)中封裝了以太網(wǎng)通訊的建立連接、接收數(shù)據(jù)、調(diào)用Modbus/TCP協(xié)議處理程序和發(fā)送數(shù)據(jù)等過程。為此必須聲明用于以太網(wǎng)通訊控制程序(FB73)輸入、輸出和輸入/輸出參數(shù)。具體聲明的參數(shù)如下表3所示:
地址 | 聲明 | 名稱 | 類型 | 初始值 | 說明 |
0.0 | IN | Con_ID | Word | 0 | 連接ID號 |
2.0 | IN_OUT | TCON_Start | Bool | 0 | 開始建立連接 |
4.0 | IN_OUT | Connect | Any | 連接參數(shù)地址指針 | |
14.0 | IN_OUT | Data | Any | 存放通訊臨時數(shù)據(jù)的數(shù)據(jù)塊指針 | |
24.0 | STAT | TCON_Done | Bool | 0 | 建立連接正確完成標志 |
24.1 | STAT | TCON_Busy | Bool | 0 | 正在建立連接標志 |
24.2 | STAT | TCON_Error | Bool | 0 | 建立連接錯誤完成標志 |
24.3 | STAT | TSEND_Start | Bool | 0 | 開始發(fā)送數(shù)據(jù)標志 |
24.4 | STAT | TSEND_Done | Bool | 0 | 發(fā)送數(shù)據(jù)正確完成標志 |
24.5 | STAT | TSEND_Busy | Bool | 0 | 正在發(fā)送數(shù)據(jù)標志 |
24.6 | STAT | TSEND_Error | Bool | 0 | 發(fā)送數(shù)據(jù)錯誤完成標志 |
24.7 | STAT | TRCV_Start | Bool | 0 | 開始接收數(shù)據(jù)標志 |
25.0 | STAT | TRCV_Done | Bool | 0 | 接收數(shù)據(jù)正確完成標志 |
25.1 | STAT | TRCV_Busy | Bool | 0 | 正在接收數(shù)據(jù) |
25.2 | STAT | TRCV_Error | Bool | 0 | 接收數(shù)據(jù)錯誤完成標志 |
26.0 | STAT | Rcvd_Len | Int | 0 | 接收到數(shù)據(jù)的臨時長度 |
28.0 | STAT | Byte_Count | Int | 0 | 接收到數(shù)據(jù)的長度 |
30.0 | STAT | FB_TSend | FB 63 | 發(fā)送數(shù)據(jù)功能塊多重背景 | |
52.0 | STAT | FB_TRcv | FB 64 | 接收數(shù)據(jù)功能塊多重背景 | |
76.0 | STAT | FB_Tcon | FB 65 | 建立連接功能塊多重背景 | |
96.0 | STAT | FB_ModbusTCP | FB 74 | Modbus/TCP協(xié)議處理功能塊多重背景 |
表3:FB73聲明的參數(shù)
通過FB73封裝了以太網(wǎng)通訊控制程序,當需要與計算機建立一個連接時只需在OB1調(diào)用一次FB73,當需要建立多個連接時多次調(diào)用FB73即可。注意:CPU315-2PN/DP最多可建立八個TCP/IP連接。
4.5 Modbus/TCP協(xié)議處理程序
Modbus/TCP協(xié)議處理程序采用面向?qū)ο蟮慕Y(jié)構(gòu)化編程方法,在一個功能塊(FB74)中封裝了數(shù)據(jù)數(shù)量、數(shù)據(jù)地址和功能碼判斷,處理并準備上傳所需數(shù)據(jù)等全部過程。為此必須聲明用于Modbus/TCP協(xié)議處理程序(FB74)輸入、輸出和輸入/輸出參數(shù)。具體聲明的參數(shù)如下表4所示:
地址 | 聲明 | 名稱 | 類型 | 初始值 | 說明 |
0.0 | IN_OUT | Byte_Count | Int | 0 | 以太網(wǎng)通訊接收到數(shù)據(jù)的長度 |
2.0 | IN_OUT | Data_DB | Int | 0 | 存放通訊臨時數(shù)據(jù)的數(shù)據(jù)塊 |
表4:FB74聲明的參數(shù)
5 結(jié)束語
本程序的難點在于實現(xiàn)對不同數(shù)據(jù)塊的讀取和寫入,通過Modbus/TCP協(xié)議結(jié)構(gòu)中寄存器地址字節(jié)8 (寄存器高字節(jié))對應數(shù)據(jù)塊號、寄存器地址字節(jié)9 (寄存器低字節(jié))對應數(shù)據(jù)塊字節(jié)號就可解決。
自本系統(tǒng)運行以來,CPU315-2PN/DP與上位機系統(tǒng)操作員工作站1、2通訊一直正常,從未出現(xiàn)過通訊中斷現(xiàn)象,有效地保證了湖南銅信溪水電站監(jiān)控系統(tǒng)的正常運行, 應用這種方法不需要采用西門子公司OPC能有效降低整個水電站監(jiān)控系統(tǒng)成本。可見,采用通過開放式IE通訊與上位機系統(tǒng)通訊是一種行之有效的方法,實現(xiàn)了讀取遙信、遙測、定值、SOE和寫入遙控、遙調(diào)和定值等功能,完全滿足《DL/T578-1995水電廠計算機監(jiān)控系統(tǒng)基本技術(shù)條件》實時性、可靠性和通訊安全性要求。由此看來,西門子PLC集成PROFINET接口的CPU模塊采用開放式IE通訊與第三方智能設備通過以太網(wǎng)交換數(shù)據(jù)是一種值得推廣的方式。
參考文獻
1. 使用STEP7 V5.3編程手冊 2004.1
2. 用于S7-300和S7-400的語句表編程參考手冊 2004.1
3. 用于S7-300和S7-400的系統(tǒng)軟件和標準功能參考手冊 2005.7
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。