技術(shù)頻道

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

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

時(shí)間:2007-12-13 10:30:00來(lái)源:ronggang

導(dǎo)語(yǔ):?本文主要介紹Modbus RTU規(guī)約,及在VB6.0編程環(huán)境下通過(guò)RS-485串口實(shí)現(xiàn)主控臺(tái)PC機(jī)與智能儀表間基與該規(guī)約通信的具體實(shí)現(xiàn)方法
摘要:本文主要介紹Modbus RTU規(guī)約,及在VB6.0編程環(huán)境下通過(guò)RS-485串口實(shí)現(xiàn)主控臺(tái)PC機(jī)與智能儀表間基與該規(guī)約通信的具體實(shí)現(xiàn)方法。 關(guān)鍵詞:Modbus RTU;通信協(xié)議;RS-485;CRC校驗(yàn) 1 引言 隨著時(shí)代的進(jìn)步,越來(lái)越多的企業(yè)開(kāi)始向生產(chǎn)和管理自動(dòng)化轉(zhuǎn)變。各種智能儀表不斷地應(yīng)用到生產(chǎn)生活的各個(gè)領(lǐng)域。在工業(yè)控制方面,RS-485總線由于平衡差分傳輸特性具有的干擾性好、傳輸距離遠(yuǎn) 、有較大級(jí)連能力等特點(diǎn),非常適合于組成工業(yè)級(jí)的多機(jī)通信系統(tǒng)。Modbus RTU規(guī)約是Modicon公司的注冊(cè)商標(biāo),是目前國(guó)際智能化儀表普遍采用的主流通訊協(xié)議之一。在各個(gè)工業(yè)儀器儀表大量使用的今天,Modbus RTU協(xié)議和RS-485總線得到了最為廣泛的應(yīng)用。本文主要從應(yīng)用的角度介紹在一個(gè)工業(yè)控制系統(tǒng)中,實(shí)現(xiàn)該技術(shù)的具體方案。 2 Modbus RTU 通訊協(xié)議簡(jiǎn)介 (1) Modbus RTU協(xié)議簡(jiǎn)介 Modbus RTU通訊協(xié)議是Modicon公司的注冊(cè)商標(biāo)。采用主從問(wèn)答方式工作,其規(guī)范已在國(guó)際互聯(lián)網(wǎng)上公布,是目前國(guó)際智能化儀表普遍采用的主流通訊協(xié)議之一。目前,國(guó)內(nèi)許多生產(chǎn)商已在他們的產(chǎn)品和系統(tǒng)中遵循該協(xié)議標(biāo)準(zhǔn)。該協(xié)議有兩種傳輸模式即RTU模式和ASCII模式。其中RTU模式信息幀中的8位數(shù)據(jù)包括兩個(gè)4位16進(jìn)制字符,相對(duì)于ASCII模式,RTU模式表達(dá)相同的信息需要較少的位數(shù),且在相同通訊速率下具有更大的數(shù)據(jù)流量。因此通常情況下,一般工業(yè)智能儀器儀表都是采用RTU模式的Modbus規(guī)約。 (2) Modbus 通信格式 當(dāng)通訊命令由發(fā)送設(shè)備(上位機(jī))發(fā)送至接收設(shè)備(下位機(jī))時(shí),符合相應(yīng)地址碼的下位機(jī)就會(huì)響應(yīng)命令,并根據(jù)約定的通信協(xié)議讀取信息、數(shù)據(jù)校驗(yàn)并且執(zhí)行相應(yīng)的功能操作。返回的幀結(jié)構(gòu)包含地址碼、功能碼、數(shù)據(jù)以及CRC校驗(yàn)碼。 (3)上下位機(jī)通信幀約定格式 其中的儀表地址在使用的電壓表中是為一個(gè)字節(jié)定義的,所以最多到256個(gè)。下位機(jī)與上位機(jī)的通信波特率一般可自由設(shè)定,但必須保證上下機(jī)的通信波特率對(duì)應(yīng)匹配。
3 上位機(jī)通信軟件設(shè)計(jì)方案 上位機(jī)的通信軟件采用VB6.0的開(kāi)發(fā)環(huán)境。在VB6.0中對(duì)串口進(jìn)行編程可以使用Mscomm控件加快開(kāi)發(fā)進(jìn)度。該控件主要是為RS-232的通用串口而設(shè)計(jì)。所以為了利用PC上現(xiàn)有的RS-232接口,通常是使用RS232/485的轉(zhuǎn)換器。這些轉(zhuǎn)換器一般通過(guò)邏輯門(mén)電路控制RXD、TXD和GND三針信號(hào),從而自動(dòng)對(duì)半雙工或全雙工的485串口進(jìn)行控制。通過(guò)轉(zhuǎn)換器,我們就可以像開(kāi)發(fā)通用的RS-232串口一樣來(lái)快速開(kāi)發(fā)基于RS-485串口的上位機(jī)通信軟件。 (1)初始化程序設(shè)計(jì) 在初始化程序中,主要是設(shè)定好整個(gè)幀結(jié)構(gòu)的命令數(shù)組、傳輸波特率、以及一些必須的串口初始設(shè)定。具體的操作如下面代碼說(shuō)明 Dim Tcommand(7) As Byte ‘開(kāi)辟命令幀的幀長(zhǎng)度數(shù)組 MSComm.CommPort = 1 ‘設(shè)定需要使用的串口,當(dāng)然這里可以用輸入方式靈活設(shè)定。暫定為1#口 MSComm.Settings="2400,n,8,1" ‘設(shè)定傳輸?shù)牟ㄌ芈屎托r?yàn)方式 MSComm.InBufferSize = 1024 ‘開(kāi)辟數(shù)據(jù)緩沖區(qū) MSComm.InputMode =comInputModeBinary ‘設(shè)定為二進(jìn)制的數(shù)據(jù)流方式 MSComm.InputLen = 0 ‘一次全部讀入所需要的數(shù)據(jù) …… 上面的代碼一般都是串口初始化必須進(jìn)行設(shè)定的幾個(gè)部分。根據(jù)個(gè)人需要可以在VB6.0中做一個(gè)初始化界面,對(duì)各個(gè)參數(shù)(如波特率、使用串口等)進(jìn)行自由設(shè)定和更改,以提高初始化設(shè)定的靈活性和通用性。 (2)命令字發(fā)送 命令字發(fā)送應(yīng)該嚴(yán)格按照Modbus規(guī)約所設(shè)計(jì)的幀格式和上下位機(jī)在該規(guī)約基礎(chǔ)上所定義的通信協(xié)議。參考表1的通信協(xié)議順序,編寫(xiě)如下的VB代碼來(lái)實(shí)現(xiàn)命令的發(fā)送。 Tcommand (0) = address ‘ address為設(shè)定的接受地址輸入的變量 Tcommand (1) = Val("&h" + "03") ……(其他的通信協(xié)議,并計(jì)算CRC校驗(yàn)代碼) Tcommand (6) = CRC(1) Tcommand (7) = CRC(0) frmcontrol.MSComm.Output = Tcommand …… (3)上位機(jī)接收和數(shù)據(jù)處理 根據(jù)表2的回送通信協(xié)議,上位機(jī)解析所接受的數(shù)據(jù),并進(jìn)行必要的處理。一般而言從下位機(jī)發(fā)送上來(lái)的數(shù)據(jù)都是有一定的幀長(zhǎng)度。特別是對(duì)于一些固化好的智能儀表。所以最好的方法是按照通信回送的幀長(zhǎng)度,在上位機(jī)程序中分別開(kāi)辟兩個(gè)同樣長(zhǎng)度的數(shù)組。一個(gè)作為接受數(shù)組,用來(lái)一次性接收串口緩沖區(qū)中的數(shù)據(jù);另一個(gè)為安全數(shù)組,用來(lái)復(fù)制接收數(shù)組中的數(shù)據(jù)并進(jìn)行解析。這樣可以提高整個(gè)系統(tǒng)的容錯(cuò)能力。 LoopUntil frmcontrol.MSComm.InBufferCount = 9 InByte = frmcontrol.MSComm.Input For i = 0 To (count - 1) InSafeArray(i) = InByte(i) Next i 其代碼中的inbyte()就是接收數(shù)組,而InSafeArray()就是我們?cè)匍_(kāi)辟的安全數(shù)組。 (4)CRC校驗(yàn)的實(shí)現(xiàn)方法 按照Modbus規(guī)約的校驗(yàn)方式,RTU模式的校驗(yàn)方式為CRC校驗(yàn)方式;而ASCII模式為L(zhǎng)RC校驗(yàn)。一般的智能儀表多采用RTU的CRC校驗(yàn)方式。根據(jù)生成多項(xiàng)式的不同,CRC校驗(yàn)通常有以下幾種:CRC-12 (傳6bit);CRC-16(美國(guó)標(biāo)準(zhǔn),傳8bit);CRC-CCITT(歐洲標(biāo)準(zhǔn),傳8bit);CRC-32(point-to-point同步傳輸中使用) 。目前儀表類比較普遍的是CRC-16的校驗(yàn)碼。其生成多項(xiàng)式為X16+X15+X2+1。在算法實(shí)現(xiàn)上,我們可以先預(yù)置一個(gè)16位的寄存器FFFF(全1),然后把8位的2進(jìn)制數(shù)據(jù)(一個(gè)字節(jié))與16位的CRC寄存器低8位異或,并把結(jié)果放回CRC寄存器同時(shí)寄存器內(nèi)容右移,MSB補(bǔ)0,并檢查移出的LSB。如果LSB為0則繼續(xù)右移動(dòng),為1則CRC寄存器與多項(xiàng)式異或。重復(fù)上面操作到一個(gè)8bit字節(jié)完成,再繼續(xù)對(duì)下一個(gè)數(shù)據(jù)進(jìn)行相同處理,直到所有數(shù)據(jù)結(jié)束。這個(gè)時(shí)候CRC寄存器中的數(shù)據(jù)就是我們所要的CRC碼了。實(shí)現(xiàn)代碼如下: CRC16Lo = &HFF ‘CRC16Lo為CRC寄存器低8位 CRC16Hi = &HFF ‘CRC16Hi為CRC寄存器高8位 CL = &H1 CH = &HA0 ‘A001 H 是CRC-16多項(xiàng)式代碼 For i = 0 To UBound(Data) CRC16Lo = CRC16Lo Xor Data(i) ‘每一個(gè)數(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é)右移后前面補(bǔ)1 End If If ((UseLo And &H1) = &H1) Then ‘如果LSB 為1,則與多項(xiàng)式進(jìn)行異或 CRC16Hi = CRC16Hi Xor CH CRC16Lo = CRC16Lo Xor CL End If Next index Next i 4 下位機(jī)工作系統(tǒng)設(shè)計(jì)簡(jiǎn)介 下位機(jī)一般是使用固化好通信協(xié)議及工作指令的單片機(jī)。因?yàn)闇y(cè)控系統(tǒng)多采用的是單發(fā)多收的通信機(jī)制,所以在下位機(jī)要允許用戶預(yù)先設(shè)定本機(jī)的地址碼,并且保證不能重復(fù)。此外,要注意通信波特率必須與上位機(jī)的波特率相匹配。在下位機(jī)軟件開(kāi)發(fā)中,要遵循Modbus規(guī)約的通信幀結(jié)構(gòu)對(duì)上位機(jī)傳輸?shù)拿钸M(jìn)行解析:非呼叫對(duì)象應(yīng)能及時(shí)重新恢復(fù)等待接受狀態(tài);響應(yīng)呼叫的下位機(jī)要解析命令代碼并進(jìn)行相應(yīng)的功能處理,對(duì)非法的命令操作要能回送報(bào)錯(cuò)信息。 在具體的工程開(kāi)發(fā)中,下位機(jī)多是采用各個(gè)廠家出品的基與Modbus規(guī)約的智能儀表。這樣雖然簡(jiǎn)化了我們開(kāi)發(fā)的工作量,但是下位機(jī)的合理安排與設(shè)計(jì)能降低系統(tǒng)誤碼率、提高可靠性。因此是每個(gè)工業(yè)系統(tǒng)設(shè)計(jì)人員所不應(yīng)該忽略的重要部分。在工業(yè)控制中,因?yàn)楦鞣N干擾源的存在且一般下位機(jī)數(shù)量較大,要對(duì)RS-485芯片選型有很認(rèn)真的考慮。條件許可的話盡量選用抗電擊和有較大級(jí)連驅(qū)動(dòng)能力的芯片。理論上485芯片的級(jí)連能力至少32門(mén),目前很多芯片廠家都能使工業(yè)級(jí)的級(jí)連數(shù)達(dá)到128以上。在實(shí)際應(yīng)用中應(yīng)該讓系統(tǒng)具有一定的富余度,一般級(jí)連數(shù)不能超過(guò)該器件滿載的70%。在選配RS232到RS485轉(zhuǎn)換頭的時(shí)候也應(yīng)該盡量選用有源的轉(zhuǎn)換器,以提高驅(qū)動(dòng)能力和穩(wěn)定性。此外,工業(yè)現(xiàn)場(chǎng)的降噪、隔離、布線、屏蔽等等措施的合理與否也會(huì)對(duì)最后系統(tǒng)的穩(wěn)定產(chǎn)生影響。 5 結(jié)束語(yǔ) 作者在實(shí)際的測(cè)控系統(tǒng)項(xiàng)目開(kāi)發(fā)中,通過(guò)VB6.0結(jié)合SQL數(shù)據(jù)庫(kù)編程,開(kāi)發(fā)了基于該通信協(xié)議的上位機(jī)的測(cè)控管理軟件,并利用RS-485總線實(shí)現(xiàn)了對(duì)基于該規(guī)約的各種下位機(jī)的監(jiān)控和數(shù)據(jù)處理。在生產(chǎn)活動(dòng)自動(dòng)化,通信協(xié)議規(guī)范化,信息交流國(guó)際化的今天,充分利用現(xiàn)有的成熟而規(guī)范的通信協(xié)議能最大限度地節(jié)約開(kāi)發(fā)成本,降低開(kāi)發(fā)風(fēng)險(xiǎn),提高系統(tǒng)的兼容性和可移植性。Modbus RTU規(guī)約作為智能儀器儀表領(lǐng)域大量使用的國(guó)際化通信協(xié)議,必將得到更加普遍的推廣和應(yīng)用。 6 參考文獻(xiàn) 【1】 Visual Basic 6.0程序員指南;(美)Microsoft公司著;北京希望電子出版社;1999.2;P9-22,P304-394 【2】 實(shí)用Visual Basic 6教程;(美)Bob Reselman,Richard Peasley著;清華大學(xué)出版社;2001.3; P489-500 【3】 基于Modbus協(xié)議通信的設(shè)計(jì)與實(shí)現(xiàn); 潘洪躍;計(jì)量技術(shù); 2002. No 4;P35-36

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于臺(tái)達(dá)變頻器同步解決方案...

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

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

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

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

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

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

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