西門子plc與modbus裝置進485通訊詳解(modbus多機輪詢)
阿新 • • 發佈:2019-01-06
接觸西門子s7-200一段時間後,接手一個通訊專案,需要在觸控式螢幕上顯示三臺pid溫度表的溫度。
一開始打算觸控式螢幕多餘的串列埠轉485直接連線溫度表,後來由於一直通訊不上,懷疑觸控式螢幕的問題,於是打算用plc來讀取pid表,走的是modbus協議,即port1接三臺pid表,port0用來連觸控式螢幕以及下載程式。好了,直接上程式碼。
1、定義port1口的modbus屬性,注意,定義完後,如果要再用port1口下載程式的話,必須先把plc設成stop(專家請無視)。
這裡的奇偶校驗是個坑,要找到合適的,否則error的值會一直是為3,沒有返回值
2、這裡是關鍵了,輪詢三臺485連線的pid溫度表,這裡利用done來實現三臺pid表的msg傳送工作,這樣也能保證返回資料互不干擾。
3、同一時間只能有一個msg在工作,所以一定要讓這幾個m10.x分別釋放
4、解析返回的資料,這部分就比較簡單了,到處都有範例
經過一週的研究,總算把三臺儀表的資料穩定的傳出來,但是還有個疑問,modbus返回的資料裡,為什麼找不到地址碼資訊,只有返回41001的值,如果有地址碼,就更好了。
下週要繼續研究分別寫入三個pid表引數的功能,成功了再來分享。
最後,感謝網路上那些開源的資料,雖然彎也沒有少繞,,同時鄙視一下那些要註冊才能看資料的“專業”網站,以及要各種xx幣才能下載的資料。