電磁流量計(jì)系統(tǒng)軟件是如何設(shè)計(jì)的
發(fā)布時(shí)間:2022-01-12 08:10:50
電磁流量計(jì)采用的通信協(xié)議是Modbus協(xié)議,它是一種串行通信協(xié)議,使用雙絞線作為傳輸?shù)奈锢斫橘|(zhì)。流量計(jì)內(nèi)部有多個(gè)參數(shù)可以進(jìn)行設(shè)置,如波特率、設(shè)備地址、流量單位等。電磁流量計(jì)的瞬時(shí)流量和累積流量值通過雙絞線-→防雷裝置+RS485/RS232協(xié)議轉(zhuǎn)換-+.上位計(jì)算機(jī)完成數(shù)據(jù)傳送,在上位計(jì)算機(jī)應(yīng)用軟件的管理下,完成流量數(shù)據(jù)的顯示與統(tǒng)計(jì)。
1.通信過程
通信開始后,主機(jī)向總線上發(fā)送一幀消息,電磁流量計(jì)偵測(cè)總線狀態(tài)并接收主機(jī)送來(lái)的消息。如果消息中的地址與本站設(shè)備(即電磁流量計(jì))地址相符,而且計(jì)算所得的16位CRC校驗(yàn)碼也正確,就將收到的消息存儲(chǔ)在緩沖區(qū)內(nèi),接著執(zhí)行主機(jī)的命令,并根據(jù)處理結(jié)果返回一幀正確的消息作為對(duì)主機(jī)的響應(yīng),其通信流程如圖2所示。
在本系統(tǒng)中,主要使用Modbus協(xié)議中的“03”功能碼,它的含義是連續(xù)讀取設(shè)備數(shù)據(jù)寄存器中的內(nèi)容(每個(gè)寄存器占2B)。
通過設(shè)置給電磁流量計(jì)分配的地址是0FH,為了讀取流量計(jì)的瞬時(shí)流量,主機(jī)應(yīng)該發(fā)出一-幀(0F0300000002C525)消息(十六進(jìn)制),此幀消息中含有如下信息:
①0F:從站設(shè)備地址(流量計(jì)地址);
②03:功能碼(讀寄存器內(nèi)容);
③0000:待讀寄存器首地址(瞬時(shí)流量);
④0002:讀2個(gè)連續(xù)的數(shù)據(jù)寄存器(因?yàn)閿?shù)據(jù)類型是浮點(diǎn));
⑤C525:CRC校驗(yàn)碼(低字節(jié)在前高字節(jié)在后)。如果流量計(jì)正確收到.上面信息,就立即返回與涵管當(dāng)前瞬時(shí)流量對(duì)應(yīng)的消息作為對(duì)主機(jī)的響應(yīng):
0F030441B142A720F2
在這幀消息中,0F03的意義同前,04指4個(gè)字節(jié)的瞬時(shí)流量,數(shù)據(jù)內(nèi)容是41B142A7,流量計(jì)發(fā)出的CRC校驗(yàn)碼是20F2。
同理,為了讀取電磁流量計(jì)的累積流量,主機(jī)應(yīng)發(fā):
0F0300130004B4E2
如果流量計(jì)接收正確,就返回下列數(shù)據(jù)串:
0F0308ADDD003B4D6F3F61757F
其中當(dāng)前累積流量數(shù)據(jù)為8個(gè)字節(jié),ADDD003B4D6F3F61,CRC校驗(yàn)碼是757F。
2.數(shù)據(jù)解析
由于電磁流量計(jì)中的數(shù)據(jù)是以字的形式存儲(chǔ)在寄存器組中的,而且數(shù)據(jù)的低位字在前,高位字在后,所以在解析流量數(shù)據(jù)之前,必須先要交換它們的順序才能得到正確結(jié)果。對(duì)于瞬時(shí)流量的4個(gè)字節(jié)(41B1)(42A7),交換順序后成為(42A7)(41B1),它是一個(gè)符合IEEE754規(guī)范的32位浮點(diǎn)數(shù)值,將其還原成十進(jìn)制數(shù)值,結(jié)果得到涵管當(dāng)前瞬時(shí)流量值83.6263m³/h。
對(duì)于累積流量,它的數(shù)據(jù)格式為:整數(shù)部分是長(zhǎng)整型,而小數(shù)部分是32位浮點(diǎn)型,所以應(yīng)分段交換順序。整數(shù)部分交換順序后是(003B)(ADDD),它對(duì)應(yīng)十進(jìn)制3911133,而小數(shù)部分交換順序后是(3F61)(4D6F),按IEEE754浮點(diǎn)數(shù)規(guī)范,經(jīng)過轉(zhuǎn)換,其對(duì)應(yīng)的十進(jìn)制小數(shù)為0.8801,所以涵管當(dāng)前累積流量是3911133.88m³。
3.關(guān)于CRC檢驗(yàn)算法
在Modbus標(biāo)準(zhǔn)通信中,對(duì)于即將被傳輸消息中的字符串必須進(jìn)行CRC校驗(yàn),目的是發(fā)現(xiàn)數(shù)據(jù)傳輸過程中可能出現(xiàn)的錯(cuò)誤。常用的校驗(yàn)多項(xiàng)式有CCITT和CRC-16,本系統(tǒng)采用CRC-16,其多項(xiàng)式為G(x)=xl6+xI5+x2+1,實(shí)際應(yīng)用時(shí)取其反序。
具體來(lái)說(shuō),對(duì)于瞬時(shí)流量,是從地址字節(jié)一直校驗(yàn)到數(shù)據(jù)的最后-一個(gè)字節(jié)。以流量計(jì)返回的瞬時(shí)流量數(shù)據(jù)串為例,共須校驗(yàn)0F030441B142A7七個(gè)字節(jié),所以得到的16位CRC校驗(yàn)碼為F220。下面給出用VB6.0語(yǔ)言實(shí)現(xiàn)的CRC校驗(yàn)程序,代碼如下: