你傳回來的數據加入放在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了。
當然,移位也可以,指令還要精簡些,但速度差不多。
寫得有點煩鎖,不知道有寫錯的地方沒有,你參考下,用仿真寫段指令試下。