技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基與Modbus規(guī)約的智能儀表與PC機通信技術(shù)實現(xiàn)

基與Modbus規(guī)約的智能儀表與PC機通信技術(shù)實現(xiàn)

時間:2008-08-27 15:21:00來源:ronggang

導語:?本文主要介紹Modbus RTU規(guī)約,及在VB6.0編程環(huán)境下通過RS-485串口實現(xiàn)主控臺PC機與智能儀表間基與該規(guī)約通信的具體實現(xiàn)方法

摘 要:本文主要介紹Modbus RTU規(guī)約,及在VB6.0編程環(huán)境下通過RS-485串口實現(xiàn)主控臺PC機與智能儀表間基與該規(guī)約通信的具體實現(xiàn)方法。

關(guān)鍵詞:Modbus RTU;通信協(xié)議;RS-485;CRC校驗

1 引言

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

2 Modbus RTU 通訊協(xié)議簡介

(1) Modbus RTU協(xié)議簡介

ModBus RTU通訊協(xié)議是Modicon公司的注冊商標。采用主從問答方式工作,其規(guī)范已在國際互聯(lián)網(wǎng)上公布,是目前國際智能化儀表普遍采用的主流通訊協(xié)議之一。目前,國內(nèi)許多生產(chǎn)商已在他們的產(chǎn)品和系統(tǒng)中遵循該協(xié)議標準。該協(xié)議有兩種傳輸模式即RTU模式和ASCII模式。其中RTU模式信息幀中的8位數(shù)據(jù)包括兩個4位16進制字符,相對于ASCII模式,RTU模式表達相同的信息需要較少的位數(shù),且在相同通訊速率下具有更大的數(shù)據(jù)流量。因此通常情況下,一般工業(yè)智能儀器儀表都是采用RTU模式的Modbus規(guī)約。

(2) Modbus 通信格式

當通訊命令由發(fā)送設(shè)備(上位機)發(fā)送至接收設(shè)備(下位機)時,符合相應(yīng)地址碼的下位機就會響應(yīng)命令,并根據(jù)約定的通信協(xié)議讀取信息、數(shù)據(jù)校驗并且執(zhí)行相應(yīng)的功能操作。返回的幀結(jié)構(gòu)包含地址碼、功能碼、數(shù)據(jù)以及CRC校驗碼。

(3)上下位機通信幀約定格式

其中的儀表地址在使用的電壓表中是為一個字節(jié)定義的,所以最多到256個。下位機與上位機的通信波特率一般可自由設(shè)定,但必須保證上下機的通信波特率對應(yīng)匹配。

3 上位機通信軟件設(shè)計方案

上位機的通信軟件采用VB6.0的開發(fā)環(huán)境。在VB6.0中對串口進行編程可以使用Mscomm控件加快開發(fā)進度。該控件主要是為RS-232的通用串口而設(shè)計。所以為了利用PC上現(xiàn)有的RS-232接口,通常是使用RS232/485的轉(zhuǎn)換器。這些轉(zhuǎn)換器一般通過邏輯門電路控制RXD、TXD和GND三針信號,從而自動對半雙工或全雙工的485串口進行控制。通過轉(zhuǎn)換器,我們就可以像開發(fā)通用的RS-232串口一樣來快速開發(fā)基于RS-485串口的上位機通信軟件。

(1)初始化程序設(shè)計

在初始化程序中,主要是設(shè)定好整個幀結(jié)構(gòu)的命令數(shù)組、傳輸波特率、以及一些必須的串口初始設(shè)定。具體的操作如下面代碼說明

Dim Tcommand(7) As Byte ‘開辟命令幀的幀長度數(shù)組

MSComm.CommPort = 1 ‘設(shè)定需要使用的串口,當然這里可以用輸入方式靈活設(shè)定。暫定為1#口

MSComm.Settings="2400,n,8,1" ‘設(shè)定傳輸?shù)牟ㄌ芈屎托r灧绞?/p>

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

MSComm.InputMode =comInputModeBinary ‘設(shè)定為二進制的數(shù)據(jù)流方式

MSComm.InputLen = 0 ‘一次全部讀入所需要的數(shù)據(jù)

……

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

(2)命令字發(fā)送

命令字發(fā)送應(yīng)該嚴格按照Modbus規(guī)約所設(shè)計的幀格式和上下位機在該規(guī)約基礎(chǔ)上所定義的通信協(xié)議。參考表1的通信協(xié)議順序,編寫如下的VB代碼來實現(xiàn)命令的發(fā)送。

Tcommand (0) = address ‘ address為設(shè)定的接受地址輸入的變量

Tcommand (1) = Val("&h" + "03")

……(其他的通信協(xié)議,并計算CRC校驗代碼)

Tcommand (6) = CRC(1)

Tcommand (7) = CRC(0)

frmcontrol.MSComm.Output = Tcommand

……

(3)上位機接收和數(shù)據(jù)處理

根據(jù)表2的回送通信協(xié)議,上位機解析所接受的數(shù)據(jù),并進行必要的處理。一般而言從下位機發(fā)送上來的數(shù)據(jù)都是有一定的幀長度。特別是對于一些固化好的智能儀表。所以最好的方法是按照通信回送的幀長度,在上位機程序中分別開辟兩個同樣長度的數(shù)組。一個作為接受數(shù)組,用來一次性接收串口緩沖區(qū)中的數(shù)據(jù);另一個為安全數(shù)組,用來復(fù)制接收數(shù)組中的數(shù)據(jù)并進行解析。這樣可以提高整個系統(tǒng)的容錯能力。

LoopUntil frmcontrol.MSComm.InBufferCount = 9

InByte = frmcontrol.MSComm.Input

For i = 0 To (count - 1)

InSafeArray(i) = InByte(i)

Next i

其代碼中的inbyte()就是接收數(shù)組,而InSafeArray()就是我們再開辟的安全數(shù)組。

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

按照Modbus規(guī)約的校驗方式,RTU模式的校驗方式為CRC校驗方式;而ASCII模式為LRC校驗。一般的智能儀表多采用RTU的CRC校驗方式。根據(jù)生成多項式的不同,CRC校驗通常有以下幾種:CRC-12 (傳6bit);CRC-16(美國標準,傳8bit);CRC-CCITT(歐洲標準,傳8bit);CRC-32(point-to-point同步傳輸中使用) 。目前儀表類比較普遍的是CRC-16的校驗碼。其生成多項式為X16+X15+X2+1。在算法實現(xiàn)上,我們可以先預(yù)置一個16位的寄存器FFFF(全1),然后把8位的2進制數(shù)據(jù)(一個字節(jié))與16位的CRC寄存器低8位異或,并把結(jié)果放回CRC寄存器同時寄存器內(nèi)容右移,MSB補0,并檢查移出的LSB。如果LSB為0則繼續(xù)右移動,為1則CRC寄存器與多項式異或。重復(fù)上面操作到一個8bit字節(jié)完成,再繼續(xù)對下一個數(shù)據(jù)進行相同處理,直到所有數(shù)據(jù)結(jié)束。這個時候CRC寄存器中的數(shù)據(jù)就是我們所要的CRC碼了。實現(xiàn)代碼如下:

CRC16Lo = &HFF ‘CRC16Lo為CRC寄存器低8位

CRC16Hi = &HFF ‘CRC16Hi為CRC寄存器高8位

CL = &H1

CH = &HA0 ‘A001 H 是CRC-16多項式代碼

For i = 0 To UBound(Data)

CRC16Lo = CRC16Lo Xor Data(i) ‘每一個數(shù)據(jù)與CRC寄存器異或

For index = 0 To 7

UseHi = CRC16Hi

UseLo = CRC16Lo

CRC16Hi = CRC16Hi \ 2

CRC16Lo = CRC16Lo \ 2 ‘右移一位

If ((UseHi And &H1) = &H1) Then ‘如果高位字節(jié)最后一位是1的話

CRC16Lo = CRC16Lo Or &H80 ‘低位字節(jié)右移后前面補1

End If

If ((UseLo And &H1) = &H1) Then ‘‘如果LSB 為1,則與多項式進行異或

CRC16Hi = CRC16Hi Xor CH

CRC16Lo = CRC16Lo Xor CL

End If

Next index

Next i

4 下位機工作系統(tǒng)設(shè)計簡介

下位機一般是使用固化好通信協(xié)議及工作指令的單片機。因為測控系統(tǒng)多采用的是單發(fā)多收的通信機制,所以在下位機要允許用戶預(yù)先設(shè)定本機的地址碼,并且保證不能重復(fù)。此外,要注意通信波特率必須與上位機的波特率相匹配。在下位機軟件開發(fā)中,要遵循Modbus規(guī)約的通信幀結(jié)構(gòu)對上位機傳輸?shù)拿钸M行解析:非呼叫對象應(yīng)能及時重新恢復(fù)等待接受狀態(tài);響應(yīng)呼叫的下位機要解析命令代碼并進行相應(yīng)的功能處理,對非法的命令操作要能回送報錯信息。

在具體的工程開發(fā)中,下位機多是采用各個廠家出品的基與Modbus規(guī)約的智能儀表。這樣雖然簡化了我們開發(fā)的工作量,但是下位機的合理安排與設(shè)計能降低系統(tǒng)誤碼率、提高可靠性。因此是每個工業(yè)系統(tǒng)設(shè)計人員所不應(yīng)該忽略的重要部分。在工業(yè)控制中,因為各種干擾源的存在且一般下位機數(shù)量較大,要對RS-485芯片選型有很認真的考慮。條件許可的話盡量選用抗電擊和有較大級連驅(qū)動能力的芯片。理論上485芯片的級連能力至少32門,目前很多芯片廠家都能使工業(yè)級的級連數(shù)達到128以上。在實際應(yīng)用中應(yīng)該讓系統(tǒng)具有一定的富余度,一般級連數(shù)不能超過該器件滿載的70%。在選配RS232到RS485轉(zhuǎn)換頭的時候也應(yīng)該盡量選用有源的轉(zhuǎn)換器,以提高驅(qū)動能力和穩(wěn)定性。此外,工業(yè)現(xiàn)場的降噪、隔離、布線、屏蔽等等措施的合理與否也會對最后系統(tǒng)的穩(wěn)定產(chǎn)生影響。

5 結(jié)束語

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

6 參考文獻

【1】 Visual Basic 6.0程序員指南;(美)Microsoft公司著;北京希望電子出版社;1999.2;P9-22,P304-394

【2】 實用Visual Basic 6教程;(美)Bob Reselman,Richard Peasley著;清華大學出版社;2001.3; P489-500

【3】 基于MODBUS協(xié)議通信的設(shè)計與實現(xiàn) ; 潘洪躍 ;計量技術(shù) ; 2002. No 4 ;P35-36

標簽:

點贊

分享到:

上一篇:基于列車傳動系統(tǒng)的24脈波供...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號