鈴~~~!電話響起------您好!歡迎您撥打西門子技術(shù)支持熱線。
客戶:我這邊是個(gè)S7-200的PLC系統(tǒng),226 CN PLC 的port0口做modbus主站,讀取一個(gè)儀表的數(shù)據(jù),數(shù)據(jù)能通信,但是讀過來的數(shù)據(jù)不對(duì)。
工程師:根據(jù)您的描述,那么應(yīng)該已經(jīng)通信上了,我們可以最后再排查程序問題。首先請(qǐng)檢查接線,引腳3是信號(hào)+,引腳8是信號(hào)-。
另外,請(qǐng)問有核實(shí)兩邊的數(shù)據(jù)存儲(chǔ)格式是否一致嗎?因?yàn)槲鏖T子plc的數(shù)據(jù)存儲(chǔ)格式是低位高字節(jié),按照以VW0為例,就是高8位為VB0,低8位為VB1.如果儀表那邊是高位高字節(jié),即:高8位為VB1,低8位為VB0.那么兩邊正好相反,即便通信上了,數(shù)據(jù)對(duì)不上是可能的。西門子的低位高字節(jié)數(shù)據(jù)存儲(chǔ)格式示意請(qǐng)參見:
客戶:好,我先去核實(shí)一下。= = = = = =
客戶:您好,modbus通信已經(jīng)沒問題了。PLC這邊數(shù)據(jù)已經(jīng)讀取進(jìn)來,我想問下讀到的數(shù)應(yīng)該是什么格式的。我這邊一個(gè)數(shù)65500,PLC這邊為什么是負(fù)數(shù)。
工程師:PLC在程序中監(jiān)控和運(yùn)算多是以有符號(hào)整數(shù)進(jìn)行的,VW或者VD的最高位是符號(hào)位,如果對(duì)于Word來說,大于32767后數(shù)據(jù)為負(fù)。
通過modbus通信過來的數(shù)都是負(fù)數(shù)是嗎?剛才65500的數(shù)是多少?除了程序塊監(jiān)控外,狀態(tài)表在線監(jiān)控,數(shù)據(jù)格式選擇無符號(hào)后數(shù)據(jù)讀取是否正常。
客戶:哦,都是大數(shù)才為負(fù)數(shù),應(yīng)該是都大于32767的。狀態(tài)表里譬如VW100吧,無符號(hào)數(shù)是65500,有符號(hào)數(shù)是-35,數(shù)據(jù)格式選擇無符號(hào)的就正確。
工程師:數(shù)據(jù)存儲(chǔ)實(shí)際上都是按照二進(jìn)制進(jìn)行的,只是讀取它時(shí)的數(shù)據(jù)格式不同而已,您可以在狀態(tài)表中選擇無符號(hào)數(shù)。
客戶:不是啊,我就是要正數(shù)。關(guān)鍵是我把這個(gè)數(shù)轉(zhuǎn)換成實(shí)數(shù)后還帶著負(fù)號(hào),我port 1口連了第三方的觸摸屏,觸摸屏上選擇的是實(shí)數(shù)連接,讀上來后屏那邊顯示的是負(fù)數(shù),不行啊。
工程師:嗯~,請(qǐng)問您是怎么進(jìn)行編程轉(zhuǎn)換的。
客戶:我就是先用I_DI,再DI_R。不行啊,大數(shù)就錯(cuò)了,小數(shù)才不帶符號(hào)。
工程師:您先別著急,按照正常的編程方式,您的思路是正確的,可對(duì)于負(fù)數(shù)來說就不行了?梢該Q種思路來考慮,對(duì)于word或者d-word的格式來說,數(shù)據(jù)的最高位是符號(hào)位。那么我們最開始轉(zhuǎn)換成雙字的時(shí)候,去掉符號(hào)就行了。
客戶:我也試過,讓這個(gè)數(shù)與16#7F相乘來去掉符號(hào)位,那就不對(duì)了,數(shù)就不對(duì)了。你這也不行啊
工程師:請(qǐng)先不要著急,我說的不是這個(gè)方法。在轉(zhuǎn)換成雙字的時(shí)候不要把最高位當(dāng)作符號(hào)位,如下圖,先來了解符號(hào)位的定義:
通過I_DI的轉(zhuǎn)化,實(shí)際上是將VW0-VD0,可是如果將VW0直接放在VW2上,同時(shí)VW0清0,直接去讀取VD0是什么情況?原先VW0中的符號(hào)位,在VW2中,并不是VD0的最高位即符號(hào)位,在VD0里就是數(shù)據(jù)了。而與此同時(shí),我們?nèi)サ袅素?fù)號(hào)是嗎。
舉例:VW0=65500(無符號(hào)整數(shù)),經(jīng)過I_DI給VD10.
對(duì)比:VD0,雙字轉(zhuǎn)換后的VD10,和僅僅將VW0傳送給VW6后的VD4,這幾個(gè)數(shù)的比較,請(qǐng)參見下面的實(shí)驗(yàn)結(jié)果: