1 引言
石油化工生產中plc常常用于大機組的聯鎖與控制。對于機組的振動、位移等參數,點數較少時,可以采用變送器、傳感器轉換成4-20ma信號送入plc,實現聯鎖控制,但對鍵相、差脹等特殊測量參數或振動、位移等測量參數點數較多時,信號轉換的難度大、成本高,使用傳統的框架式機械保護系統反而會經濟、有效。美國bently公司3500系統是傳統的框架式機械保護系統之一,它可以運行于各種冗余級別,包括雙電源供電和更高要求下的三重模塊冗余(tmr)監測器組態。每個i/o卡可以對 4-6個點的信號進行轉換處理,并通過編程的方法實現聯鎖邏輯。茂名乙烯廠在2006年7月建成投產的2#丁二烯裝置的壓縮機聯鎖、控制中,采用德國西門子公司的s7-400h系統實現總的聯鎖和過程控制,外殼振動、軸瓦溫度的聯鎖主要在bently3500中實現。為了實現數據共享和聯鎖冗余,需要將bently3500中的模擬信號和報警、聯鎖信號以通訊方式傳輸到s7-400h。本文以2#丁二烯壓縮機控制系統為例,描述了simatic s7-400h與bently 3500之間modbus rtu協議通訊實現的過程。
2 控制系統簡介
s7-400是大型可編程序控制器,由電源模板(ps)、中央處理單元(cpu)、信號模板(sm)、通信處理器(cp)等部分組成。s7-400h系統是s7-400的冗余系統,通過將發生中斷的單元自動切換到備用單元的方法實現系統的不中斷工作。它可以通過本地機架與s7-400的i/o模件、通訊網關連接,也可以通過基于profibus-dp總線的et200m分布式i/o與s7-300的i/o模塊、通訊網關連接,以實現過程控制、與其它控制系統通訊。
3500機械保護系統是一個全功能監測保護系統,其設計應用了最新微處理器技術。由1塊或2塊電源模塊(3500/15)、框架接口模塊(3500/20)、溫度監測器模塊(3500/60)、位移、速度、加速度監測模塊(3500/42)、繼電器模塊(3500/32)、通信網關(3500/92)等組成。3500/92通信網關是3500系統主要通信通道,是與其它系統通訊的橋梁。
3 通訊方案選擇
通訊實現的目標是將3500中的15個溫度點和6個壓縮機外殼振動點的值以及其報警、聯鎖狀態送到s7-400h,由于通訊的數據量不大,選用modbus rtu協議。
s7-400h與3500之間通訊主要有兩種方式:一是在s7-400h的本地機架上安裝一個cp(通訊處理器)。s7-400h有兩個冗余子系統,cp安裝在其中一個子系統上,兩個冗余的子系統都從該cp獲得數據,并在兩個相同的用戶程序中進行計算。因此,就冗余系統模式中的信息處理而論,cp是連接到主cpu 還是熱備cpu并無多大關系。缺點是,當子系統出現故障時,該子系統機架上的cp不再可用。另一種方式是,將cp安裝在切換式i/o(et200m 分布式 i/o)上,該設備有一個有源板總線和一個冗余profibus-dp 從站接口模板im153-2,每個s7-400h子系統與et200m兩個dp從接口中的一個相連。這樣,某個s7-400h冗余子系統故障,cp會切換到它的冗余伙伴,可靠性高,而且經濟。我們選用了該方案,通訊處理器采用cp341。
4 通訊系統硬件配置與接線
s7-400h的通訊處理器是cp341,在使用modbus rtu協議時需要一個硬件狗(dongle)。3500的通訊處理器是3500/92。由于它們處于同一柜內,距離在15米以內,傳輸接口形式選用了rs-232 。rs-232采用9 pin引腳,通常只用到引腳2、3、5,即接收數據、發送數據和信號地,接口連接如圖1所示。

圖1 傳輸接口的連接
3 軟件實現
modbus rtu格式通信協議是以主從方式進行數據傳輸的,在傳輸的過程中主站是主動方,即主站發送數據請求報文到從站,從站返回響應報文。modbus系統間的數據交換是通過功能碼(function code)來控制的,有些功能碼是對位操作的,通訊的用戶數據是以位(bit)為單位的:
fc01 讀輸出位的狀態
fc02 讀輸入位的狀態
fc05 強制單一輸出位
fc15 強制多個輸出位
有些功能碼是對16位寄存器操作的,通訊的用戶數據是以字(word)為單位的:
fc03 讀輸出寄存器
fc04 讀輸入寄存器
fc06 寫單一輸出寄存器
fc16 寫多個輸出寄存器[1]
cp341與3500/92的通訊,cp341做主站,3500/92做從站,主站、從站都需要設置波特率、停止位、校驗位。這里設置波特率為9600bit/s,一位停止位,無奇偶校驗。cp341 modbus協議通訊是通過simatic step7編程軟件,并利用庫函數fb8(p-snd-rk)和fb7(p-rcv-rk)功能塊進行發送和讀取數據操作的。它們均通過組態數據庫的方法進行發送源信息和接收目的數據的信息,請求信息時,從源數據庫讀取相應字段后發送,接收信息是根據發送的內容進行對應字段數據的存儲。報文格式存放在db42中前6個字節中,采用語句表語言編寫程序,如下:
l 2
t db42.dbb0 //從站地址
l 3
t db42.dbb1 //使用fc03功能碼
l 5000
t db42.dbw2 //10進制的5000在bently 3500中是modbus寄存器組態區域的起始地址
l 63
t db42.dbw4 //63是要從從站讀16-bit字的數量
由于3500/92modbus rs-232/422 i/o模件通常響應時間少于0.5秒,因此,0.5秒發送一次對從站的數據請求:
an m30.0
an m120.7 //其為1時發出讀的命令
l s5t#500ms
sd t30 //對bently 3500請求數據的速率
a m0.0
r t30
a t30
= m30.0
a m30.0
s m120.7
如果正在發送請求、發送完成或發送錯誤,就不能發出向從站的讀數據請求命令:
a m120.7
an db40.dbx 0.0 //發送請求
an db40.dbx 0.4 //發送完成
an db40.dbx 0.5 //發送錯誤
r m120.7
s db40.dbx 0.0 //向bently 3500發出發送請求命令
發送請求必須是邊緣發出的:
a(
o db40.dbx 0.4
o db40.dbx 0.5
)
a db40.dbx 0.0
r db40.dbx 0.4
調用cp341的發送功能塊fb8:
call fb8,db50
sf :=‘s’
req := db40.dbx 0.0
r:= db40.dbx 0.1
laddr:=624 //cp341的模塊地址
db_no:=42 //發送數據塊=db42
dbb_no:=0 //db42中的起始地址
len :=6 //6 bytes
r_typ:=‘x’
done:=db40.dbx 0.4
error:=db40.dbx 0.5
status:=db40.dbw12
接收從站響應數據:
set
= db41.dbx 0.0 //允許cp341接收數據
call fb7 ,db70
en_r:= db41.dbx 0.0
laddr:=624
db_no:=43 //接收用戶數據的數據塊
dbb_no:=0
ndr:=db41.dbx 0.4
error:=db41.dbx 0.5
len:=db41.dbw10
status:=db41.dbw12
3500/92作為從站只是發送數據,所以設置很簡單。從3500傳輸數據到plc,可以使用固定的協議地址,也可以使用可組態寄存器。可組態寄存器modbus地址范圍是45001-45500(浮點:46001-46000)。由3500手冊可知,通道的每種狀態用一個bit表示,全部通道狀態可用一個word表示,見表1。對于modbus協議,每一種功能碼控制一個信息幀,即讀位、讀字要在兩個信息幀中完成。為了提高通訊速度,通道的狀態作為一個字與模擬量在同一個幀中傳輸,到plc后再將位取出。我們選用可組態寄存器作為modbus協議地址。
3500/92的modbus通訊組態是通過rack configuration software實現的。進入communication gateway界面后,點擊configue按鈕進入congigurable registers窗口,選擇要傳送的數據,將其拖入可組態的寄存器即可,見圖2。


圖2 3500/92 modbus寄存器組態
4 結束語
通過采用modbus rtu通信協議,實現了cp341與3500/92之間數據交換,高效地實現了西門子s7-400h可編程控制器與bently 3500的通信,實現了關鍵聯鎖的冗余,方便了對現場設備的控制和操作,避免大量的變送器的使用,降低了成本。










