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