本人做工控七年,沒有做過modbus,想想也是醉了,只能分享一個(gè)接受培訓(xùn),老師講的一個(gè)他調(diào)試?yán)?,不知道讓不讓播?br>一個(gè)風(fēng)和日麗的早上,客戶打電話說cpu414h做modbus tcp通訊有問題,modbus tcp red v2與調(diào)試工具modscan死活通訊不上,并且已經(jīng)折騰了兩天,還是通訊不上。于是,開始電話和客戶溝通,檢查組態(tài)和參數(shù):檢查cp443-1的設(shè)置、檢查netpro的網(wǎng)絡(luò)組態(tài)和tcp 連接狀態(tài),這些都是按照示例做的。
然后檢查fb 907的初始化設(shè)置及檢查fb 907數(shù)據(jù)區(qū)的設(shè)置,發(fā)現(xiàn)在初始化時(shí)僅對(duì)使用的數(shù)據(jù)區(qū)域進(jìn)行了參數(shù)賦值,不使用的區(qū)域沒有處理。這樣初始化參數(shù)作用會(huì)在fb 907的輸出狀態(tài)報(bào)w#16#0102地址區(qū)域重疊錯(cuò)誤,讓客戶修改不使用的數(shù)據(jù)區(qū)域初始化為0,重新下裝程序??蛻舨僮髦?,反映還是通訊不上。
然后檢查服務(wù)器程序fb 907,看ndr_x管腳是否動(dòng)作,因?yàn)榉?wù)器程序?qū)φ?qǐng)求進(jìn)行響應(yīng)和處理之后會(huì)對(duì)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中去,所以服務(wù)器程序就根本沒接收到客戶端發(fā)送來的數(shù)據(jù)請(qǐng)求,下載fc 50(ag_lsend),fc 60(ag_lrecv),客戶再檢查modscan,數(shù)據(jù)通訊上了。
其實(shí)在西門子modbus tcp red v2的例子程序和快速入門文檔中已經(jīng)詳細(xì)地介紹了程序塊的使用,客戶只要仔細(xì)觀察例子程序的結(jié)構(gòu),就不會(huì)忽略掉fc 50(ag_lsend),fc 60(ag_lrecv)這兩個(gè)發(fā)送接收塊,真是細(xì)節(jié)決定成敗。