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