如何在PLC里將雙字的十六進(jìn)制數(shù)DW#16#D4DB71FB換成無符號(hào)的數(shù)3571151355

發(fā)布時(shí)間:2024-02-23
如何在plc里將雙字的十六進(jìn)制數(shù)dw#16#d4db71fb換成無符號(hào)的數(shù)3571151355,正是目前plc自身不能解決的問題,以西門子s7-200為例,該plc內(nèi)的存儲(chǔ)器存儲(chǔ)整數(shù)的最小單元為字節(jié),2個(gè)字節(jié)組成一個(gè)字,2個(gè)字構(gòu)成一個(gè)雙字,雙字即為plc存儲(chǔ)整數(shù)的最大的存儲(chǔ)單元。plc對(duì)字節(jié)定義為無符號(hào)數(shù),即字節(jié)可傳遞顯示16進(jìn)制數(shù)0~ff(即10進(jìn)制數(shù)0~255),而對(duì)于字與雙子存儲(chǔ)器定義為有符號(hào)數(shù),即:其最高位定義為存儲(chǔ)數(shù)的符號(hào)位,當(dāng)最高位=0時(shí)表示為此數(shù)為正數(shù),當(dāng)最高位=1時(shí)表示此數(shù)為負(fù)數(shù)。如將16進(jìn)制正數(shù)“16#9673”送入mw0,mw0的各位值為:1001_0110_0111_0011,由于其最高位m0.7=1,故在監(jiān)視狀態(tài)下,mw0顯示的不是正數(shù)38755,而是負(fù)數(shù)-26781。見下圖:
本來是正數(shù)存入存儲(chǔ)器里,可是存儲(chǔ)器顯示的數(shù)卻變成負(fù)數(shù),如對(duì)次數(shù)進(jìn)行加減乘除運(yùn)算,也是按負(fù)數(shù)進(jìn)行,這給數(shù)據(jù)監(jiān)視及對(duì)數(shù)據(jù)計(jì)算整理帶來極大的不便。
如何解決字與雙字在存儲(chǔ)的數(shù)其最高位=1時(shí),在監(jiān)視狀態(tài)下能顯示其正數(shù)值而不出現(xiàn)負(fù)數(shù)值呢?請(qǐng)見以下解析:
1、對(duì)于最高位=1的字存儲(chǔ)器,要使它不顯示負(fù)數(shù),可將它傳遞給雙字存儲(chǔ)器。用雙字存儲(chǔ)器顯示其存數(shù)值即可解決顯示正數(shù)值而不會(huì)顯示負(fù)值。即:令該字的上一個(gè)字存儲(chǔ)器=0,如:mw2=16#9763,可令mw0=0,監(jiān)視md0雙字存儲(chǔ)器,其md0的顯示值即為正數(shù)值,見下圖中的mov_dw的顯示值。
2、對(duì)于最高位=1的雙字存儲(chǔ)器,由于plc無四字存儲(chǔ)器,故不能采用上述1的方法來實(shí)現(xiàn)正數(shù)顯示,但可以采用下面的思路編程來實(shí)現(xiàn):
用二個(gè)存儲(chǔ)器(一個(gè)雙字與一個(gè)單字)分別顯示該數(shù)的前后二部分?jǐn)?shù)字:用雙字存儲(chǔ)器顯示該數(shù)百位以上的部分?jǐn)?shù)值,用單字存儲(chǔ)器顯示該書的十位與個(gè)位2為數(shù)值。將這二個(gè)存儲(chǔ)器數(shù)字串聯(lián)相接的數(shù)字,即為該數(shù)轉(zhuǎn)換為10進(jìn)制數(shù)的正數(shù)值。舉例:一個(gè)16進(jìn)制數(shù)轉(zhuǎn)換為10進(jìn)制數(shù),將轉(zhuǎn)換后的數(shù)的百位以上的數(shù)字部分送入雙子存儲(chǔ)器內(nèi),其值為:35711513;而轉(zhuǎn)換為10進(jìn)制數(shù)的百位以下的數(shù)字部分送入單子存儲(chǔ)器內(nèi),其值為:55。則該16進(jìn)制數(shù)轉(zhuǎn)換為10進(jìn)制的數(shù)為:3571151355。
編程思路:1、將16進(jìn)制的雙字正數(shù)送入md1,其md0值=md1數(shù)÷256(即16#100)。再將md0÷100×256——>vd0,則vd0值即為md1÷100的整數(shù)部分,將它轉(zhuǎn)換為10進(jìn)制數(shù)送入vd0,則vd0就不會(huì)顯示負(fù)值,而且此vd0值的最小單位值1為10進(jìn)制數(shù)的百位數(shù)(即=100)。md0÷100的余數(shù)部分加上md1的最低字節(jié)(mb4)值—>mw4,再進(jìn)行這樣整理:mw4-100>0則vd0+1,直到mw4<100為止。此時(shí)的vd0值為原md1數(shù)轉(zhuǎn)換為10進(jìn)制的百位以上的數(shù)字部分,而mw4值為原md1數(shù)轉(zhuǎn)換為10進(jìn)制的百位以下的十位與個(gè)位的數(shù)字部分。
將雙字單元的16進(jìn)制數(shù)轉(zhuǎn)換為無符號(hào)的10進(jìn)制數(shù)的程序
下面是將雙字的十六進(jìn)制數(shù)dw#16#d4db71fb送入md1,按上面程序運(yùn)行,在監(jiān)視狀態(tài)下,轉(zhuǎn)換成無符號(hào)的正數(shù)(見網(wǎng)絡(luò)6中的vd0與vw4),
即:md1=16#d4db71fb=3571151355
vd0*100+vw4=3571513×100+55=3571151355
對(duì)于最高位=0的雙字?jǐn)?shù),帶入上程序,運(yùn)行結(jié)果也是正確的,見下圖:
即:md1=16#74db71fb=1960538619
vd0*100+vw4=19605386×100+19=1960538619
對(duì)于最高位=0的數(shù)可不用運(yùn)行上述編程,直接用md1->vd1,其vd1即可在監(jiān)控下顯示10進(jìn)制數(shù)值,故可將原網(wǎng)絡(luò)6改為下面2條編程語(yǔ)句(見下圖):在最高位=0時(shí),其m1.7=0,故網(wǎng)絡(luò)6運(yùn)行,其vd1值即為10進(jìn)制的轉(zhuǎn)換值。在最高位=1時(shí),其m1.7=1,故網(wǎng)絡(luò)7運(yùn)行,其vd0與vw4值串聯(lián)相接值即為10進(jìn)制的轉(zhuǎn)換值。
上一個(gè):戴爾靈越5559安裝固態(tài)
下一個(gè):移動(dòng)固態(tài)硬盤使用注意事項(xiàng),移動(dòng)腳手架安全使用注意事項(xiàng)

同樣喝茶--不會(huì)喝的是飲料會(huì)喝的是良藥
喝酒死人同桌人是否需要負(fù)法律責(zé)任
在北方怎樣種養(yǎng)樟樹
適合長(zhǎng)期玩不氪金的手機(jī)網(wǎng)游(適合長(zhǎng)期玩不氪金的游戲)
移動(dòng)互聯(lián)網(wǎng)時(shí)代 企業(yè)該怎么玩轉(zhuǎn)微信營(yíng)銷?
哪些情況下遺囑不生效?
RC0201FR-079R31L,0201 9.31Ω 1.0%電阻
驅(qū)動(dòng)人生無法刪除(驅(qū)動(dòng)人生卸不掉)
容器栽培的生產(chǎn)管理
【茶字典】困鹿山茶區(qū)特色
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos