亚洲?V永久无码精品国产精品,男女朋友床上视频免费拍拍拍一区二区,亚洲精品无码久久久久秋霞,国产女优公司在线,中文字幕av无码无卡免费,人人狠狠综合久久88成人

首頁
產(chǎn)品
卓越 ? 易用 ? 可靠
視頻
讓中國物聯(lián)網(wǎng)領(lǐng)先世界
搜索
歷史搜索
搜索發(fā)現(xiàn)
首頁 > 新聞中心 > 技術(shù)應(yīng)用

ModbusRTU通信協(xié)議在智能儀表應(yīng)用

2022-01-10 16:34:25| 來源:網(wǎng)絡(luò)| | 0

        隨著時代的進(jìn)步,越來越多的企業(yè)開始向生產(chǎn)和管理自動化轉(zhuǎn)變,各種智能儀表不斷地應(yīng)用到生產(chǎn)生活的各個領(lǐng)域。在工業(yè)控制方面,RS一485總線由于平衡差分傳輸特性具有的抗干擾性強、傳輸距離遠(yuǎn)、有較大級聯(lián)能力等特點,非常適合組成工業(yè)級的多機通信系統(tǒng)。ModbusRTU通信協(xié)議是目前國際智能化儀表普遍采用的主流通信協(xié)議之一。在各種工業(yè)儀器儀表大量使用的今天,ModbusRTu通信協(xié)議和RS一485總線得到了廣泛的應(yīng)用。本文主要從應(yīng)用角度介紹在工業(yè)控制系統(tǒng)中實現(xiàn)該技術(shù)的具體方案。

        

        1、Modbus RTU通信協(xié)議

        Modbus RTU是Modicon公司開發(fā)的一種通信協(xié)議。它采用主從應(yīng)答方式工作,其規(guī)范已在互聯(lián)網(wǎng)上公布,是一種在工業(yè)領(lǐng)域被廣為應(yīng)用的真正開放的標(biāo)準(zhǔn)網(wǎng)絡(luò)通信協(xié)議。由于它具有免收許可費用,易于集成不同的設(shè)備,簡單易用,開發(fā)成本低,有著廣泛的知識資源支持等特點,已經(jīng)成為一種公認(rèn)的通用工業(yè)標(biāo)準(zhǔn)。有了這個標(biāo)準(zhǔn),不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。目前,國內(nèi)許多生產(chǎn)商已在其產(chǎn)品和系統(tǒng)中遵循該協(xié)議標(biāo)準(zhǔn)。Modbus明U協(xié)議有兩種傳輸模式,即RTU模式和ASCII模式。其中RTU模式信息幀中的8bit數(shù)據(jù)包括兩個4 bit十六進(jìn)制字符。相對于ASCII模式,RTU模式表達(dá)相同的信息需要較少的位數(shù),且在相同通信速率下具有更大的數(shù)據(jù)流量。因此通常情況下,一般工業(yè)智能儀表儀器都是采用RTU模式的Modbus規(guī)約。

        

        2、通信信息傳輸過程

        信息傳輸為異步方式,并以字節(jié)為單位¨J。在主站和從站之間傳遞的通信信息是11 bit的字格式,如表1所示。

        通信數(shù)據(jù)的信息幀格式

        通信數(shù)據(jù)的信息幀格式Ⅲ如表2所示。

        表2數(shù)據(jù)格式

        通信數(shù)據(jù)的信息幀格式

        當(dāng)發(fā)送設(shè)備(主機)發(fā)送通信命令至接收設(shè)備(從機)時,符合相應(yīng)地址碼的從機接收通信命令,并根據(jù)功能碼及相關(guān)要求讀取信息。如果CRC校驗無誤,則執(zhí)行相應(yīng)的任務(wù),然后把執(zhí)行結(jié)果返送給主機。返回的信息中包括地址碼、功能碼、執(zhí)行后的數(shù)據(jù)以及CRC校驗碼。如果CRC校驗出錯,就不返回任何信息。地址碼是每次通信信息幀的第一個字節(jié)(8 bit:0~255)。這個字節(jié)表明由用戶設(shè)置地址的從機將接收主機發(fā)來的信息。每個從機都必須有惟一的地址碼,并且只有符合地址碼的從機才能響應(yīng)回送信息。當(dāng)從機返回信息時,返回數(shù)據(jù)均以各自的地址碼開始。功能碼是每次通信信息幀傳送的第二個字

        節(jié)。Modbus通信規(guī)約可定義的功能碼為1~127。

        作為主機請求發(fā)送,通過功能碼告訴從機應(yīng)該執(zhí)行什么動作。作為從機響應(yīng),從機返回的功能碼與主機發(fā)送來的功能碼一樣,表明從機已響應(yīng)主機并且已進(jìn)行相關(guān)的操作。Modbus部分功能碼如表3所示。

        Modbus部分功能碼

        表3 Modbus部分功能碼

        數(shù)據(jù)區(qū)包括需要由從機返送何種信息或執(zhí)行什么動作。這些信息可以是數(shù)據(jù)、參考地址等。例如,主機通過功能碼03告訴從機返回寄存器的值(包含要讀取寄存器的起始地址及讀取寄存器的長度),則返回的數(shù)據(jù)包括寄存器的數(shù)據(jù)長度及數(shù)據(jù)內(nèi)容。智能儀表一般使用固化好通信協(xié)議及工作指令的單片機。測控系統(tǒng)多采用的是單發(fā)多收的通信機制,因此在智能儀表中需允許用戶預(yù)先設(shè)定本機的地址碼,并且保證不能重復(fù)。此外,要注意通信波特率必須與上位機的通信波特率相匹配。在智能儀表的軟件開發(fā)中,遵循Modbus規(guī)約的通信幀結(jié)構(gòu)需對上位機傳輸?shù)拿钸M(jìn)行解析,非呼叫對象應(yīng)能及時重新恢復(fù),等待接收狀態(tài),響應(yīng)呼叫的儀表要解析命令代碼,并進(jìn)行相應(yīng)的功能處理,對非法的命令操作要能回送報錯信息。

        

        3、上位機軟件設(shè)計

        上位機的通信軟件采用VB6.0開發(fā)。在VB6.0中可以使用MSComm控件對串口進(jìn)行編程。該控件主要為RS一232的通用串口而設(shè)計。因此為了利用PC上現(xiàn)有的RS一232接口,通常使用RS一232/485轉(zhuǎn)換器。該轉(zhuǎn)換器一般通過邏輯門電路控制RxD、TxD和GND信號,從而自動對半雙工的RS一485串口進(jìn)行控制。通過該轉(zhuǎn)換器,就可以像開發(fā)通用的RS一232串口一樣來快速開發(fā)基于RS一485串口的上位機通信軟件。上位機通信軟件主要包括初始化程序、命令字發(fā)送程序、上位機數(shù)據(jù)接收處理程序3部分。

        3.1初始化程序

        在初始化程序中,主要是設(shè)定好整個幀結(jié)構(gòu)

        的命令數(shù)組、傳輸波特率以及一些必須的串口初

        始設(shè)定。具體的代碼如下:

        ctrMSComm.InBufferSize=1024//開辟數(shù)據(jù)緩沖區(qū)

        ctrMSComm.InBufferCount=0 //清除接收緩沖區(qū)中的字符

        ctrMSComm.OutBufferSize=512 //設(shè)置傳輸緩沖區(qū)的大小

        ctrMSComm.InputMode=1 //設(shè)定為二進(jìn)制的數(shù)據(jù)流方式

        ctrMSComm.InputLen=0 //一次讀人全部的數(shù)據(jù)

        ctrMSComm.RThreshold=51 //接收到所需的字符個數(shù)后觸發(fā)OnComm事件

        ctrMSComm.CommPort=1 //設(shè)定需要

        的串口

        etrMSComm.Settings=”9 600,n,8,1”//設(shè)定波特率和校驗方式

        ctrMSComm.PortOpen=True //打開通信端口

        上面的代碼一般都是串口初始化必須進(jìn)行設(shè)定的幾個部分。根據(jù)個人需要可以在VB6.0中做一個初始化界面,對各個參數(shù)(如串口號、波特率等)進(jìn)行自由設(shè)定,以提高初始化的靈活性和通用性。

        3.2命令字發(fā)送程序

        命令字發(fā)送應(yīng)嚴(yán)格按照Modbus規(guī)約所設(shè)計的幀格式和上下位機在該規(guī)約基礎(chǔ)上所定義的通信協(xié)議。發(fā)送該指令的目的智能化配電監(jiān)控單元返回三相相電流和線電壓的有效值、頻率、有功功率、無功功率、功率因數(shù)等參數(shù)。

        3.3上位機數(shù)據(jù)接收和處理程序

        MSComm控件提供了兩種處理通信的方式:事件驅(qū)動方式和查詢方式。本文采用的是事件驅(qū)動方式。該方式是處理串行端口交互作用的一種非常有效的方法。在許多情況下,當(dāng)事件發(fā)生時需要得到通知,例如在串口接收緩沖區(qū)中有字符時可以利用MSComm控件的OnComm事件捕獲并處理這些通信事件;OnComm事件還可以檢查和處理通信錯誤,開發(fā)者可以在OnComm事件處理函數(shù)中加入自己的處理代碼。事件驅(qū)動方式的優(yōu)點是程序響應(yīng)及時,可靠性高。一般從下位機發(fā)送的數(shù)據(jù)都有一定的幀度,特別是對于一些固化好的智能儀表。因此好的方法是按照通信回送的幀長度,在上位機序中分別開辟兩個同樣長度的數(shù)組。一個作為收數(shù)組,用來一次性接收串口緩沖區(qū)中的數(shù)據(jù);一個為安全數(shù)組,用來復(fù)制接收數(shù)組中的數(shù)據(jù)進(jìn)行解析。這樣可以提高整個系統(tǒng)的容錯能力具體的代碼如下:

        Private Sub

        ctrMSComm—OnComm()

        Dim

        bytInput()As Byte

        Dim

        bytInSafe()As Byte

        Dim

        intlnputlen

        As

        Integer

        Select CasectrMSComm.COmmEvent

        Case comEvReceive //收到ctrM—

        SComm.RThreshold個字符后觸發(fā)該事件

        in

        tlnputlen=ctrMSComm.InBuffer-

        Count

        bytInput=ctrMSComm.Input

        //讀取接收緩沖區(qū)中的數(shù)據(jù)

        ReDimPreserve

        bytlnput(intlnputlen)

        Fori=0to

        intInputlen

        bytlnSafe(i)=bytInput(i)

        Nexti

        End Select

        End Sub

        代碼中的bytInput()為接收數(shù)組,而bytIn—Safe()就是另外開辟的安全數(shù)組。在接收數(shù)組中,bytlnput(0)為從機地址“&H01”,bytlnput(1)為功能碼“&H03”,bytlnput(2)為返回的數(shù)據(jù)長度,bytlnput(3)和bytlnput(4)分別為寄存器地址是0103的高8位和低8位。在PDM一810PLM智能化配電監(jiān)控單元中該寄存器存儲的是AB線電壓的有效值H』。通過下面的程序可將AB線電壓的有效值以十進(jìn)制的形式表示

        出來。

        DimValuel As

        Single

        DimValue2 As

        Single

        Valuel=bytInput(3) //將二進(jìn)制數(shù)轉(zhuǎn)

        換成十迸制數(shù)

        Value2=bytlnput(4)

        Text.Text=Format(fValuel木256+Val-ue2)木0.1,“000.0”) //將高位和低位合成一個十進(jìn)制數(shù)并保留一位小數(shù),小數(shù)點的位置可根據(jù)實際需要靈活設(shè)置(對應(yīng)“0X06”功能碼)

        3.4 CRC校驗碼的實現(xiàn)方法

        CRC(Cyclic Redundancy Check)即循環(huán)冗余碼校驗,它利用生成多項式產(chǎn)生校驗位進(jìn)行編碼。目前在智能儀表中普遍使用的是CRC16(美國標(biāo)準(zhǔn))校驗碼,其計算方法如下:

        (1)預(yù)置1個16bit的寄存器為十六進(jìn)制FFFF(即全為1)。稱此寄存器為CRC寄存器。

        (2)把第一個8bit二進(jìn)制數(shù)據(jù)與16bit的CRC寄存器的8bit相異或,把結(jié)果放于CRC寄存熙內(nèi)門明;

        (3)把cRc寄存器的內(nèi)容右移一位,用0填補最高位,并檢查右移后的移出位。

        (4)如果移出位為0,則重復(fù)第(3)步;如果移出位為1,則CRC寄存器與多項式&HA001進(jìn)行異或。

        (5)重復(fù)步驟(3)和(4),直到右移8次,這樣整個8bit數(shù)據(jù)就全部進(jìn)行了處理。

        (6)重復(fù)步驟(2)~(5),進(jìn)行通信信息幀下一個字節(jié)的處理。

        (7)將該通信信息幀所有字節(jié)按上述步驟計算完成后,得到的16bit CRC寄存器的高、低字節(jié)進(jìn)行交換。最后得到的CRC寄存器內(nèi)容即為CRC校驗碼。

        

        4 結(jié) 語

        在實際的測控系統(tǒng)項目開發(fā)中,通過VB6.0結(jié)合SQL數(shù)據(jù)庫編程,開發(fā)了基于Modbus規(guī)約的上位機測控管理軟件,并利用RS一485總線實現(xiàn)了對下位機的監(jiān)控和數(shù)據(jù)處理。充分利用現(xiàn)有的、成熟而規(guī)范的通信協(xié)議能最大限度地節(jié)約開發(fā)成本,降低開發(fā)風(fēng)險,提高系統(tǒng)的兼容性和可移植性。ModbusRTU規(guī)約作為智能儀器儀表領(lǐng)域大量使用的國際化通信協(xié)議,必將得到更加廣泛的應(yīng)用。

        

聯(lián)系銷售
銷售王經(jīng)理微信 銷售王經(jīng)理
微信公眾號 微信公眾號
服務(wù)熱線
400-6688-400
曲阳县| 宜城市| 城市| 常州市| 湘阴县| 攀枝花市| 南乐县| 广丰县| 广饶县| 沅陵县| 颍上县| 新竹市| 铁岭市| 和顺县| 兰州市| 孟连| 奉节县| 平远县|