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