通訊材料:1)、PLC2台,分別是200SMART 的CR60和SR20;2)、2個(ge) DP插頭(6ES7972-0BX12-0XA0)3)、連接導線若幹(plc電源及通訊)
驗證內(nei) 容:令:CR60 PLC為(wei) 主站,發送PLC係統時鍾(8個(ge) 字節的信息)給SR20從(cong) 站;SR20從(cong) 站發送一個(ge) 雙字的循環移位數據給主站,並由通訊數據VD100接收輸出到QD0。
主站程序:
在驗證過程中曾經出現一個(ge) 錯誤,使MSG指令始終顯示為(wei) 6,表示從(cong) 站無響應。我驗證時,由於(yu) 連接2台plc之間的3+、8-沒有確認,造成接線錯誤,使MSG的error錯誤信息為(wei) 6,檢查後找到原因,重新接線後仍然報警6。最後檢查為(wei) 控製程序不完整,主要原因是沒有給MB0一個(ge) 初始化操作,造成錯誤值沒有得到有效的刷新。於(yu) 是,在程序段1中加入初始化操作得到解決(jue) 。
從(cong) 站程序:從(cong) 站通訊地址設置為(wei) 1#
從(cong) 站自VB31開始為(wei) 讀取主站VB11開始的8個(ge) 字節主站係統時鍾數據,指定VB31的起始地址是由Addr地址40011定義(yi) 的,從(cong) 站循環指令VD11運行結果,將由Mbus_init的Holdstart定義(yi) 的起始地址發送和接收。
編寫(xie) 小結:自簡而深進行編寫(xie) Modbus RTU通訊程序,相對從(cong) 站通訊程序比較簡單,僅(jin) 僅(jin) 隻是指定通訊種類由
Mbus_init
管腳指定maxIQ/maxAI/maxHOLD/Holdstart定義(yi) ,其它管腳根據主站定義(yi) 匹配進行,相對主站需要根據從(cong) 站地址偏移量來確定。
通訊數據:
Modbus通訊程序相對的難點是通訊映射的地址關(guan) 係。
主站讀取從(cong) 站的數據,起始地址是根據從(cong) 站Holdstart管腳定義(yi) 的起始地址開始算,而不是指從(cong) 站的V區物理地址。在驗證程序中,從(cong) 站的Mbus_init起始地址為(wei) VB11,那麽(me) ,主站MSG指令的Addr 40001,應該是指從(cong) 站的VB11地址。
同理,從(cong) 站讀取主站係統時鍾,主站的MSG指令的Addr 40011,對應到從(cong) 站的地址相當於(yu) 偏移了10個(ge) 字(偏移量10word + 11byte = 31byte) ,即為(wei) VB31開始的8個(ge) 字節中存放,Modbus通訊地址計算是40001開始的。
來源:西門子工業(ye) 技術論壇,版權歸原作者所有,侵刪