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