西門子串口通訊07-Modbus RTU 協議的多站點輪詢(CP341,RS485)

西門子串口通訊07-Modbus RTU 協議的多站點輪詢(CP341,RS485)
v—x—公–衆–號:工控自動化老王
1.硬件列表
2.組態配置
3.編程
4.總結
1 硬件列表
設備名稱 設備型號
PS 307 6ES7 307-1EA00-0AA0
CPU 315-2PN/DP 6ES7 315-2EH13-0AB0
MMC 6ES7 953-8LG11-0AA0
CP341 6ES7 341-1CH01-0AE0
Dongle 6ES7 870-1AA01-0YA0
2 組態配置
1、組態CPU及CP341,如圖1將CP341邏輯地址設爲256。
在這裏插入圖片描述
2、設置Modbus總線傳輸速率和幀字符結構
雙擊CP341->Parameters->Protocol中選擇Modbus Master;雙擊信封Protocol,選擇Modbus Master設置總線傳輸速率和幀字符結構以及,其它從站的設置必須和主站設置一致。如圖,本例傳輸速率爲9.6Kbit/s,幀字符1-8-e-1,即1位起始位,8位數據位,偶校驗,1位停止位。
在這裏插入圖片描述
3、設置電氣接口
選擇半雙工RS 485,接收端初始狀態按圖3設置,各從站的接口電氣標準應和主站一致,如圖,具體配置步驟請參考手冊《CP340/341/440/441通訊及編程》。
在這裏插入圖片描述
3 編程
1、創建發送數據塊DB1
如圖,定義Modbus功能碼03的數據格式,更多功能碼格式參考手冊《以用於 PtP CP MODBUS 協議 RTU 格式 S7 的 SIMATIC 可加載驅動程序爲主站》
在這裏插入圖片描述
2、創建接收數據DB
在此共建立了2個DB(DB4,DB5)分別存放來自兩個從站的數據,每個DB分配了一個0~1000個字的整型數組如圖。
在這裏插入圖片描述
3、創建輪詢功能塊FC1
設置指令計數器(MW2),如圖,本例中設置爲2,即2兩條指令。
在這裏插入圖片描述
根據指令計數器值構造發送指令並指定接收緩衝區。如圖,指令計數器數值爲1,構造的發送指令爲訪問1號從站,功能碼03,起始地址0(對應Modbus地址40001),4個寄存器;接收緩衝區爲數據塊DB4,起始地址爲0。
在這裏插入圖片描述
如圖,指令計數器數值爲2,構造的發送指令爲訪問2號從站,功能碼03,起始地址0(對應Modbus地址40001),4個寄存器;接收緩衝區爲數據塊DB5,起始地址爲2。
在這裏插入圖片描述
爲了實現數據發送和接收,FC1中還必須調用CP341發送FB8 和接收FB7 功能塊。
在這裏插入圖片描述
圖9
FB8參數說明表
SF
‘S’爲發送,此處必須爲大寫的‘S’
LADDR
硬件組態中的起始邏輯地址,本例中爲256
REQ
發送數據觸發位,上升沿觸發,本例中爲M0.0
DB_NO
發送數據塊號,本例中爲1
DBB_NO
發送數據的起始地址,本例中爲0
LEN
發送數據的長度,本例中爲6
R_TYP
‘X’爲擴展的數據塊,此處必須爲大寫的‘X’
R
取消通訊,本例始終爲初始值FALSE
DONE
發送完成位,無故障發送完成後爲true,M0.1
ERROR
錯誤位,爲true說明有錯誤,M0.2
STATUS
狀態字,標識錯誤代碼,查看Modbus Master和CP341手冊
其它參數 查看在線幫助
在這裏插入圖片描述
FB7參數說明表
LADDR
硬件組態中的起始邏輯地址,本例中爲256
DB_NO
發送數據塊號,本例中爲MW4
DBB_NO
發送數據的起始地址,本例中爲MW6
LEN
接收數據的長度
EN_R
使能接收位,本例中始終爲TURE
R
取消通訊,本例始終爲初始值FALSE
NDR
接收完成位,無故障接收完成後爲true
ERROR
錯誤位,爲true說明有錯誤
STATUS
狀態字,標識錯誤代碼,查看Modbus Master和CP341手冊
其它參數 查看在線幫助

CP341 Modbus RTU主站輪詢從站過程:以功能碼03(Function Code 03)爲例,正常情況下REQ(M0.0)檢測到一個上升沿時,FB8啓動發送作業,從站收到主站請求後發送響應數據,FB7將從站響應的數據送回給CPU處理,發送作業完成位DONE(M0.1)置位,同時指令計數器MW2加1,構造下條指令,傳遞到發送DB中(DB1.DBB0~DB1.DBB5),更新下一條指令的接收區地址(MW4,MW6)同時觸發REQ上升沿,啓動一個新的發送作業。
在這裏插入圖片描述
同樣以功能碼03(Function Code 03)爲例,在故障情況下,FB8發送功能無法完成,ERROR置位,那麼判斷該次發送作業失敗,更新發送區地址和接收區地址啓動下一個發送作業。如果FB8的DONE和ERROR由於某些故障都無法置位,那麼通訊將處於死鎖狀態,所以在啓動發送作業同時啓動超時定時器t0(本例中超時定時器時間設爲2100ms),即定時器計時結束時DONE或ERROR仍然沒有置位,那麼判斷該次發送作業失敗,更新發送區地址和接收區地址啓動下一個發送作業。
如圖所示,主站向Slave1發送請求指令,由於1號從站斷線故障,從站沒有收到主站請求,也無法返回主站需要的數據,當預設的從站響應時間t(如圖11,t=2000ms)超時,發送功能塊ERROR(M0.2)置位,主站判斷本條指令失敗,同時發起下一條指令作業(Function Code 03)訪問Slave2,Slave2收到主站請求後,將響應數據返回給主站CP341,主站再通過FB7將從站接收到的數據保存到指定位置,發送功能塊DONE(M0.1)置位,同時觸發下一次發送作業。
在這裏插入圖片描述
需要注意的是超時定時器時間(t0)必需大於預設的從站響應時間t,而預設的從站響應時間應大於等於主站發出請求到接收到從站響應數據的時間最大值(tn,n=1,2),即t0 > t ≥ Max(t1,t2),如圖。
在這裏插入圖片描述
4、在OB1中調用輪詢功能塊FC1
在這裏插入圖片描述
4 總結
本文檔所提供的例程適用於CP341作爲Modbus主站輪詢訪問多個從站,根據實際需要構造不同功能碼指令,可讀寫不同的從站的不同地址空間。本例對通訊故障時的處理方式是簡單的放棄當前作業,並觸發下一個作業,實際運用中可根據實際情況判斷是否需要重發或進行其他故障處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章