性吧杏吧,手机色情直播破解版,杏杏吧在线

不同品牌流量積算儀Modbus通訊的一些小問(wèn)題

2019/12/18 11:25:40 人評(píng)論 次瀏覽 分類(lèi):二次儀表  文章地址:http://m.prosperiteweb.com/tech/2843.html

昌暉儀表在一個(gè)應(yīng)用測(cè)試中測(cè)試了多個(gè)品牌流量積算儀MODBUS通信。由于測(cè)試的流量積算儀來(lái)自于不同廠家,不同時(shí)期的產(chǎn)品(最早的出廠時(shí)間為2004年),故雖其標(biāo)識(shí)的均為標(biāo)準(zhǔn)Modbus通信,但其中一些流量積算通訊有其各自的不同“特點(diǎn)”,在這里和大家聊聊。

由于一些流量積算儀無(wú)法找到可以溝通的技術(shù)支持人員,有些特性不排除是單獨(dú)測(cè)試設(shè)備的問(wèn)題或是老產(chǎn)品的問(wèn)題,故在下面的敘述中,昌暉儀表均隱去流量積算儀品牌,以免不必要的紛爭(zhēng)。以下流量積算儀網(wǎng)絡(luò)測(cè)試參數(shù)均為9600波特率,8數(shù)據(jù)位,1停止位,無(wú)校驗(yàn),RS485半雙工網(wǎng)絡(luò),Modbus RTU協(xié)議。


1、流量積算儀MODBUS通訊:你慢慢問(wèn),否則我要罷工了

在測(cè)試上面這個(gè)流量積算儀時(shí),通過(guò)查閱其手冊(cè),發(fā)現(xiàn)我們需要的數(shù)據(jù)主要放置在從40001到40014(或者說(shuō)從保持型寄存器0x00到0x0D)這14個(gè)連續(xù)寄存器中。

流量積算儀寄存器地址

在使用PLC或者組態(tài)軟件測(cè)試之前,昌暉儀表習(xí)慣用ModScan測(cè)試軟件進(jìn)行簡(jiǎn)單測(cè)試。ModScan測(cè)試結(jié)果正常,能讀取到我們需要的7個(gè)數(shù)據(jù)。ModScan配置如下:

ModScan測(cè)試軟件配置

ModScan測(cè)試成功后,我們使用PLC直接讀取以上數(shù)據(jù),可以讀到正確的數(shù)據(jù),但是發(fā)現(xiàn)數(shù)值變動(dòng)十分緩慢;進(jìn)一步監(jiān)控PLC的通信狀態(tài)字,其一直在通信正常、校驗(yàn)錯(cuò)誤以及無(wú)響應(yīng)幾種狀態(tài)之間不斷切換。由于我們已經(jīng)讀到正確的數(shù)據(jù),故寄存器地址信息和波特率、站號(hào)等網(wǎng)絡(luò)參數(shù)應(yīng)該沒(méi)有問(wèn)題。


所以首先昌暉儀表工程師對(duì)硬件接線進(jìn)行了檢查,由于只是在辦公室內(nèi)進(jìn)行測(cè)試,且通信線距離只有50厘米,故測(cè)試開(kāi)始時(shí)昌暉儀表未在網(wǎng)絡(luò)兩端安裝120歐姆終端電阻,那么既然現(xiàn)在存在問(wèn)題,我們就把終端電阻加上,畢竟昌暉儀表之前也遇到過(guò)某些設(shè)備在使用特定材質(zhì)線纜時(shí)在短距離也無(wú)法通信的情況。然而,加上終端電阻,甚至更換了一段標(biāo)準(zhǔn)的RS485雙絞屏蔽電纜后,故障依然存在。此時(shí),把儀表的線重新接回計(jì)算機(jī)用ModScan測(cè)試,依然正常。并且,我們把PLC的數(shù)據(jù)直接用串口監(jiān)控,發(fā)現(xiàn)其和ModScan發(fā)出的數(shù)據(jù)內(nèi)容一模一樣,就是速度快了一點(diǎn)。ModScan默認(rèn)情況下一般是1秒鐘發(fā)送一次數(shù)據(jù)請(qǐng)求,但是昌暉儀表測(cè)試的PLC主站在默認(rèn)狀況下,只要從站設(shè)備有回復(fù),在3?個(gè)字符時(shí)間后,就會(huì)進(jìn)行下一次數(shù)據(jù)請(qǐng)求。會(huì)不會(huì)是這里的問(wèn)題呢?


在之前的工作中,昌暉儀表工程師遇到過(guò)一些從站設(shè)備對(duì)通信的處理能力比較弱,或者是程序編制不完善,當(dāng)485總線繁忙時(shí),由于其處理器計(jì)算能力或者程序編制不合理,出現(xiàn)較總線不繁忙時(shí)通訊響應(yīng)遲緩,設(shè)備動(dòng)作卡頓,通訊中斷,甚至設(shè)備重啟等情況。僅在今年,昌暉儀表就遇到過(guò)一個(gè)集控器,主站03報(bào)文詢(xún)問(wèn)過(guò)快之后設(shè)備顯示器停滯不刷新數(shù)據(jù);某家電一線品牌的中央空調(diào)集控器,速度快但不定時(shí)通訊中斷,必須重啟設(shè)備才可恢復(fù);某模擬量模塊,速度快后模擬量讀數(shù)失真;某壓力表,速度快后直接重啟。


想到這里,昌暉儀表在PLC主站的輪詢(xún)邏輯中增加了100ms的延遲時(shí)間,即當(dāng)主站收到從站的正確響應(yīng)后,等100ms之后再發(fā)送下一條請(qǐng)求。驗(yàn)證,問(wèn)題得到解決。


2、流量積算儀MODBUS通訊:不要一次問(wèn)那么多問(wèn)題,我每次只能回答一點(diǎn)點(diǎn)

在測(cè)試上面這臺(tái)流量積算儀時(shí),我們同樣首先使用ModScan進(jìn)行第一步的測(cè)試。儀表的協(xié)議和地址表如下。
讀當(dāng)前數(shù)據(jù)
計(jì)算機(jī)→FC6000(4-8bytes):$,03H,XXXX,CRC



流量積算儀通訊協(xié)議和地址

根據(jù)上表,我們?cè)贛odScan中做出了如下配置,并且我們?cè)诹髁糠e算儀上設(shè)置了一個(gè)數(shù)值為328的質(zhì)量累積流量值,看看是否可以通信正常。不負(fù)所望,ModScan讀出了從地址40003開(kāi)始的連續(xù)14個(gè)字的數(shù)據(jù),但是結(jié)果卻另昌暉儀表感到困惑。如下圖:

ModScan讀取流量積算儀數(shù)據(jù)

地址40003中,確實(shí)是昌暉儀表希望的328的數(shù)值,可是地址40004中竟然也是這個(gè)值。在地址表中,我們可以看到該數(shù)據(jù)應(yīng)該是一個(gè)32位雙字的長(zhǎng)整型數(shù)據(jù)才對(duì),所以如果對(duì)于數(shù)值328來(lái)說(shuō),40004中的數(shù)值應(yīng)該為0才對(duì)。即使考慮了高低字交換,高低字節(jié)交換,有無(wú)符號(hào)數(shù),地址偏移1位等因素,這個(gè)數(shù)值依然不對(duì)。昌暉儀表又進(jìn)行了多次測(cè)試,發(fā)現(xiàn)40003和40004的數(shù)值始終相等。然后,昌暉儀表習(xí)慣性的想先測(cè)試1個(gè)數(shù),看看能不能讀上來(lái),于是就在上圖的配置中,把數(shù)據(jù)長(zhǎng)度從14改為了1,奇怪的是,這時(shí)40003的數(shù)值竟然讀不上來(lái)了。難道問(wèn)題和數(shù)據(jù)長(zhǎng)度有關(guān)?

 
于是,昌暉儀表工程師又仔細(xì)看了下該廠家流量積算儀手冊(cè),有了點(diǎn)不太確定的發(fā)現(xiàn)(直到現(xiàn)在仍不太確定)。在上面的協(xié)議中,有這么一句:

讀當(dāng)前數(shù)據(jù)
計(jì)算機(jī)→FC6000(4-8bytes):$,03H,XXXX,CRC

這里的4-8字節(jié)莫非是指我們一次只能讀取4-8字節(jié)的數(shù)據(jù)?仔細(xì)查看該表的數(shù)據(jù),我們看到所有的數(shù)據(jù)都是4字節(jié)長(zhǎng)的。所以,昌暉儀表就在ModScan中,把數(shù)據(jù)長(zhǎng)度改為2,經(jīng)過(guò)修改后,表里的7個(gè)數(shù)據(jù)都可以讀到且正常。最后,我們?cè)赑LC中做了如下配置,分7次讀取這7個(gè)數(shù)據(jù),結(jié)果正常。

ModScan測(cè)試

這里,昌暉儀表不能說(shuō)儀表有問(wèn)題,只能說(shuō)其手冊(cè)寫(xiě)得應(yīng)該更明確些。


3、流量積算儀MODBUS通訊:人家是標(biāo)準(zhǔn)Modbus RTU協(xié)議……只不過(guò)校驗(yàn)是反的

這塊流量積算儀的問(wèn)題更直接,當(dāng)使用ModScan按其手冊(cè)發(fā)送內(nèi)容讀取數(shù)據(jù)時(shí),儀表沒(méi)有數(shù)據(jù)回復(fù)。但是如果使用流量積算儀廠家自帶的一個(gè)小軟件測(cè)試儀表的通信,數(shù)據(jù)是完全正常的。由于和廠家軟件測(cè)試使用的物理鏈路完全相同,所以應(yīng)該還是報(bào)文協(xié)議上出現(xiàn)了一些問(wèn)題。這就需要我們仔細(xì)的閱讀廠家手冊(cè)。

經(jīng)過(guò)反復(fù)研讀廠家的手冊(cè),終于昌暉儀表發(fā)現(xiàn)了一個(gè)之前很少遇到的情況,下圖是通信協(xié)議的一部分:


6、通訊命令:

功能代碼03-用來(lái)讀取顯示數(shù)據(jù)
發(fā)送01;地址回應(yīng)01;地址
03;功能碼03;功能碼
00;寄存器地址高04;;字節(jié)個(gè)數(shù)
01;寄存器地址低(顯示地址)80;數(shù)據(jù)1
00;寄存器個(gè)數(shù)高04;數(shù)據(jù)2
04;寄存器個(gè)數(shù)低80;數(shù)據(jù)3
CRCH;CRC校驗(yàn)碼高80;數(shù)據(jù)4
CRCL;CRC校驗(yàn)碼低CRCH;CRC校驗(yàn)碼高
CRCL;CRC校驗(yàn)碼低
說(shuō)明:地址=儀表號(hào);寄存器地址=顯示項(xiàng)目編號(hào);回應(yīng)字節(jié)個(gè)數(shù)=(發(fā)送)寄存器個(gè)數(shù)低(1-63)

在標(biāo)準(zhǔn)Modbus協(xié)議中,報(bào)文的最后兩個(gè)字節(jié)為CRC校驗(yàn)字節(jié),在正常情況下,一般是先發(fā)CRC的低字節(jié),然后再發(fā)CRC的高字節(jié)。如果CRC校驗(yàn)不對(duì),設(shè)備可以對(duì)報(bào)文不做應(yīng)答。在一般的PLC或是組態(tài)軟件的標(biāo)準(zhǔn)Modbus塊或者驅(qū)動(dòng)中,昌暉儀表未曾見(jiàn)過(guò)可以修改CRC高低字節(jié)的設(shè)置,故在此情況下,我們直接用ModScan或者PLC里預(yù)制的標(biāo)準(zhǔn)Modbus塊是無(wú)法和該儀表進(jìn)行通信的。所以,在后續(xù)處理和這塊表的通信時(shí),昌暉儀表使用了自由協(xié)議的方式,用PLC的TX功能塊直接發(fā)送報(bào)文,然后對(duì)儀表回復(fù)的報(bào)文用RX功能塊接收后進(jìn)行解析。


4、其他

某些流量積算儀是有Modbus RTU和ASCII的選項(xiàng)的。但是昌暉儀表在測(cè)試中,發(fā)現(xiàn)有的流量積算儀稱(chēng)RTU為”寄存器模式”,ASCII為”字符模式”,這在配置流量積算儀時(shí)需要注意。

在前文中也提到過(guò),流量積算儀中的很多數(shù)據(jù)往往是32位的雙整型數(shù)據(jù)或IEEE754單精度浮點(diǎn)型數(shù)據(jù)。既然是32位數(shù)據(jù),在不同的PLC或者設(shè)備中,其高低字或高低字節(jié)的存放順序各有不同。所以,如果通信可以通上但數(shù)據(jù)讀上來(lái)是亂碼,大多數(shù)情況下,對(duì)于32位雙整型數(shù)據(jù),可以交換其高低字;對(duì)于32位單精度浮點(diǎn)數(shù),由于其有1234,2143,3412,4321這4中可能,可以先交換高低字,如果不正確后可以再對(duì)高低字節(jié)交換進(jìn)行測(cè)試。在PLC中,除了用Move指令進(jìn)行交換外,還可以使用循環(huán)移位指令對(duì)單字循環(huán)左移/右移8位以交換高低字節(jié),或者對(duì)雙字循環(huán)左移/右移16位以交換高低字。在一些流量積算儀中,也提供了此種功能,已方便用戶(hù)使用。


同時(shí)需要注意的是,某些流量積算儀的浮點(diǎn)數(shù)未必是標(biāo)準(zhǔn)的IEEE754格式,可能是其自定義的數(shù)值格式,如下圖。這時(shí)就需要我們根據(jù)其手冊(cè),在PLC或上位機(jī)中編制對(duì)應(yīng)的轉(zhuǎn)換程序。
作者:張

推薦閱讀
數(shù)顯表與PLC串口通信調(diào)試的步驟和方法
昌暉數(shù)顯儀表與組態(tài)王工控軟件通信組態(tài)實(shí)例

共有訪客發(fā)表了評(píng)論 網(wǎng)友評(píng)論

  客戶(hù)姓名:
郵箱或QQ:
驗(yàn)證碼: 看不清楚?