接觸西門子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、解析返回的數據,這部分就比較簡單了,到處都有范例
ROL_DW是雙字左循環指令 MOV_W是移動字指令
經過一周的研究,總算把三臺儀表的數據穩定的傳出來,但是還有個疑問,modbus返回的數據里,為什么找不到地址碼信息,只有返回41001的值,如果有地址碼,就更好了。
下周要繼續研究分別寫入三個pid表參數的功能,成功了再來分享。
最后,感謝網絡上那些開源的資料,雖然彎也沒有少繞,哭,同時鄙視一下那些要注冊才能看資料的“專業”網站,以及要各種xx幣才能下載的資料。