本人做工控七年,沒有做過modbus,想想也是醉了,只能分享一個接受培訓,老師講的一個他調試例子,不知道讓不讓播。
一個風和日麗的早上,客戶打電話說cpu414h做modbus tcp通訊有問題,modbus tcp red v2與調試工具modscan死活通訊不上,并且已經折騰了兩天,還是通訊不上。于是,開始電話和客戶溝通,檢查組態(tài)和參數:檢查cp443-1的設置、檢查netpro的網絡組態(tài)和tcp 連接狀態(tài),這些都是按照示例做的。
然后檢查fb 907的初始化設置及檢查fb 907數據區(qū)的設置,發(fā)現在初始化時僅對使用的數據區(qū)域進行了參數賦值,不使用的區(qū)域沒有處理。這樣初始化參數作用會在fb 907的輸出狀態(tài)報w#16#0102地址區(qū)域重疊錯誤,讓客戶修改不使用的數據區(qū)域初始化為0,重新下裝程序??蛻舨僮髦螅从尺€是通訊不上。
然后檢查服務器程序fb 907,看ndr_x管腳是否動作,因為服務器程序對請求進行響應和處理之后會對ndr_x輸出1操作,建議客戶監(jiān)控程序,觀察ndr_x是否有值在變化。一分鐘之后,客戶反映ndr_x值不變化,始終是0;這些情況了解之后,覺得是發(fā)送接收環(huán)節(jié)出了問題。
詢問除了fb 907之外還加載了哪些程序塊到cpu中?;卮穑河衒b 907,fb 906,fc 10,fc 11就這些。終于了解到了,客戶沒有下載fc 50(ag_lsend),fc 60(ag_lrecv)到cpu中去,所以服務器程序就根本沒接收到客戶端發(fā)送來的數據請求,下載fc 50(ag_lsend),fc 60(ag_lrecv),客戶再檢查modscan,數據通訊上了。
其實在西門子modbus tcp red v2的例子程序和快速入門文檔中已經詳細地介紹了程序塊的使用,客戶只要仔細觀察例子程序的結構,就不會忽略掉fc 50(ag_lsend),fc 60(ag_lrecv)這兩個發(fā)送接收塊,真是細節(jié)決定成敗。