luyanlong1
不停的學習,努力!
級別: 家園常客
|
PLC發送8個字節,儀表回應21個字節,用8位的寄存器沒問題,但是用16位的話,儀表回應回來的21個字節會出現錯位,大俠們有什么好辦法處理一下 |
---|---|
|
tingfenghu
級別: 工控俠客
|
昨天已經回復過你,還沒有搞定,建議還是看看手冊吧. 樓主留言:我第一次搞這種東西,確實不懂,我沒用AD模塊,直接是RTU通信的,剛剛又試了下,AND用錯了,就是不太理解AND和OR還有XOR,有點反不過勁的感覺 |
|
---|---|---|
|
lvpretend
級別: 論壇先鋒
|
你傳回來的數據加入放在D2000開始。 D2005是數據字1的高8位,但在PLC里卻是放在低8位的,也就是需要把數據左移動8位,實際上就是乘以256(16#100)。 由于臺達乘法運算比移位運算更快(處理器有專用乘法器),所以就是D2005 * 256 注意,16位乘法的結果是32位的,也就是占用2個16位數據,我們只需要低16位。所以這也是我喜歡全部用浮點數來運算的原因,反正是32位,不去管16位/32位之間的轉換問題,慢也慢不到哪里去。 MUL D2005 256 D100 這時D100中的數據就是D2005左移8位的數據了。 D2006是數據字1的低8位,在PLC里本就是放在低8位的,不用管它。 ADD D2006 D100 D200 這個時候D200中的數據就是按要求組合完成的16數據了。 再下來把這個16位數據轉換成32位浮點數 FLT D200 D300 ,為了運算方便,建議不要直接采用地址,而采用變量定義,比如這里定義一個浮點數 R1 則上條指令就是 FLT D200 R1 然后進行小數點處理,因為有3個小數位,所以R1/1000 DEDIV R1 1000.00 R1 注意,常數要帶小數點,系統才知道是浮點數。 這個時候R1中就把小數位搞好了。 再來做符號位 D2003是符號位,為1就是負數,那么就可以用接點邏輯運算來做 LD= D2003 1 DEMUL R1 -1.00 R1 這樣就OK了。 當然,移位也可以,指令還要精簡些,但速度差不多。 寫得有點煩鎖,不知道有寫錯的地方沒有,你參考下,用仿真寫段指令試下。 |
---|---|
本帖最近評分記錄: |