接觸西門子s7-200一段時間後,接手一個(ge) 通信項目,需要在觸摸屏上顯示三台pid溫度表的溫度。
一開始打算觸摸屏多餘(yu) 的串口轉485直接連接溫度表,後來由於(yu) 一直通信不上,懷疑觸摸屏的問題,於(yu) 是打算用plc來讀取pid表,走的是modbus協議,即port1接三台pid表,port0用來連觸摸屏以及下載程序。好了,直接上代碼。
1、定義(yi) port1口的modbus屬性,注意,定義(yi) 完後,如果要再用port1口下載程序的話,必須先把plc設成stop(專(zhuan) 家請無視)。
這裏的奇偶校驗是個(ge) 坑,要找到合適的,否則error的值會(hui) 一直是為(wei) 3,沒有返回值
2、這裏是關(guan) 鍵了,輪詢三台485連接的pid溫度表,這裏利用done來實現三台pid表的msg發送工作,這樣也能保證返回數據互不幹擾。
3、同一時間隻能有一個(ge) msg在工作,所以一定要讓這幾個(ge) m10.x分別釋放
4、解析返回的數據,這部分就比較簡單了,到處都有範例
ROL_DW是雙字左循環指令 MOV_W是移動字指令
經過一周的研究,總算把三台儀(yi) 表的數據穩定的傳(chuan) 出來,但是還有個(ge) 疑問,modbus返回的數據裏,為(wei) 什麽(me) 找不到地址碼信息,隻有返回41001的值,如果有地址碼,就更好了。
下周要繼續研究分別寫(xie) 入三個(ge) pid表參數的功能,成功了再來分享。
最後,感謝網絡上那些開源的資料,雖然彎也沒有少繞,哭,同時鄙視一下那些要注冊(ce) 才能看資料的“專(zhuan) 業(ye) ”網站,以及要各種xx幣才能下載的資料。