你傳回來(lái)的數據加入放在D2000開(kāi)始。
D2005是數據字1的高8位,但在PLC里卻是放在低8位的,也就是需要把數據左移動(dòng)8位,實(shí)際上就是乘以256(16#100)。
由于臺達乘法運算比移位運算更快(處理器有專(zhuān)用乘法器),所以就是D2005 * 256
注意,16位乘法的結果是32位的,也就是占用2個(gè)16位數據,我們只需要低16位。所以這也是我喜歡全部用浮點(diǎn)數來(lái)運算的原因,反正是32位,不去管16位/32位之間的轉換問(wèn)題,慢也慢不到哪里去。
MUL D2005 256 D100
這時(shí)D100中的數據就是D2005左移8位的數據了。
D2006是數據字1的低8位,在PLC里本就是放在低8位的,不用管它。
ADD D2006 D100 D200
這個(gè)時(shí)候D200中的數據就是按要求組合完成的16數據了。
再下來(lái)把這個(gè)16位數據轉換成32位浮點(diǎn)數
FLT D200 D300 ,為了運算方便,建議不要直接采用地址,而采用變量定義,比如這里定義一個(gè)浮點(diǎn)數 R1
則上條指令就是 FLT D200 R1
然后進(jìn)行小數點(diǎn)處理,因為有3個(gè)小數位,所以R1/1000
DEDIV R1 1000.00 R1
注意,常數要帶小數點(diǎn),系統才知道是浮點(diǎn)數。
這個(gè)時(shí)候R1中就把小數位搞好了。
再來(lái)做符號位
D2003是符號位,為1就是負數,那么就可以用接點(diǎn)邏輯運算來(lái)做
LD= D2003 1 DEMUL R1 -1.00 R1
這樣就OK了。
當然,移位也可以,指令還要精簡(jiǎn)些,但速度差不多。
寫(xiě)得有點(diǎn)煩鎖,不知道有寫(xiě)錯的地方?jīng)]有,你參考下,用仿真寫(xiě)段指令試下。