技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > VC下實(shí)現(xiàn)基于Modbus協(xié)議的DCS與遠(yuǎn)程I/O系統(tǒng)通信

VC下實(shí)現(xiàn)基于Modbus協(xié)議的DCS與遠(yuǎn)程I/O系統(tǒng)通信

時(shí)間:2008-09-03 10:03:00來源:ronggang

導(dǎo)語:?本文在分析Modbus協(xié)議及其通信原理的基礎(chǔ)上,結(jié)合工程實(shí)際,提出了一種在工業(yè)PC機(jī)上實(shí)現(xiàn)串行通信的方法,并在Visual C++6.0環(huán)境下開發(fā)了通信的應(yīng)用程序,實(shí)現(xiàn)了基于Modbus協(xié)議的DCS與遠(yuǎn)程I/O系統(tǒng)通信
摘 要:本文在分析Modbus協(xié)議及其通信原理的基礎(chǔ)上,結(jié)合工程實(shí)際,提出了一種在工業(yè)PC機(jī)上實(shí)現(xiàn)串行通信的方法,并在Visual C++6.0環(huán)境下開發(fā)了通信的應(yīng)用程序,實(shí)現(xiàn)了基于Modbus協(xié)議的DCS與遠(yuǎn)程I/O系統(tǒng)通信。 關(guān)鍵詞:Modbus協(xié)議; DCS; 遠(yuǎn)程I/O; 串行通信 1 引言   近年來隨著工控領(lǐng)域自動(dòng)化水平的大幅提高,許多廠、礦企業(yè)原有的控制系統(tǒng)陸續(xù)開始各種軟硬件的升級(jí)和改造。改造過程中,數(shù)據(jù)通信的合理、可靠關(guān)系到現(xiàn)場(chǎng)一系列大型設(shè)備的安全。由于整個(gè)工程往往由不同的單位分別完成,各部分之間的整合性必須得到保證,因此工業(yè)控制系統(tǒng)中常使用標(biāo)準(zhǔn)的協(xié)議進(jìn)行接口通信。   Modbus協(xié)議 是一種工業(yè)通信和分布式控制系統(tǒng)協(xié)議,由MODICON公司出品,現(xiàn)已被眾多的硬件生產(chǎn)廠商所支持并廣泛應(yīng)用于工業(yè)控制領(lǐng)域。DCS即集散控制系統(tǒng),是以微處理器為核心的操作顯示集中、控制功能分散的工業(yè)控制系統(tǒng)。安全可靠的性能和成熟的使用技術(shù)使得DCS廣泛地應(yīng)用于電力、冶金、石油化工、造紙、制藥等行業(yè)。   陜西某電廠改擴(kuò)建工程包括兩部分系統(tǒng):DCS,遠(yuǎn)程I/O數(shù)據(jù)采集系統(tǒng)。這兩部分之間采用Modbus協(xié)議進(jìn)行接口串行通信 。 2 Modbus通信協(xié)議   2.1 協(xié)議簡介   Modbus是一種主從網(wǎng)絡(luò),允許一個(gè)主機(jī)(Master)和一個(gè)或多個(gè)從機(jī)(Slave)通信,支持兩種有效的傳送方式 :RTU(Remote Terminal Unit,遠(yuǎn)程終端裝置)和 ASCII(美國標(biāo)準(zhǔn)信息交換碼)。兩種方式的命令格式是相同的,采用何種方式取決于對(duì)通信速度的要求。要求速度快的要用RTU方式,而對(duì)通信速度要求不高的可用ASCⅡ碼方式。協(xié)議的內(nèi)容主要包括寄存器讀寫、開關(guān)量I/O等命令的格式。   本項(xiàng)目工程通信要求采用RTU方式,以下介紹、分析的命令格式均為標(biāo)準(zhǔn)的Modbus協(xié)議格式,所用的數(shù)據(jù)示例均引自工程中的應(yīng)用實(shí)例。   2.2 主、從機(jī)命令格式   主機(jī)和從機(jī)之間采用查詢與應(yīng)答方式進(jìn)行通信,每一種查詢命令報(bào)文都對(duì)應(yīng)著一種應(yīng)答報(bào)文。主機(jī)發(fā)出的查詢命令報(bào)文格式如表1所示:   表1 主機(jī)查詢命令報(bào)文格式
  地址碼“02”表示主機(jī)要求查詢02號(hào)從機(jī),功能碼“04”表示主機(jī)要求讀保持寄存器操作,起始數(shù)據(jù)“00 00”表示從第1個(gè)數(shù)據(jù)開始讀,數(shù)據(jù)長度“00 40”表示要求讀取64個(gè)模擬量數(shù)據(jù)。   CRC校驗(yàn)碼:即循環(huán)冗余校驗(yàn)碼,當(dāng)本機(jī)計(jì)算得的CRC碼與接收到的CRC碼一致時(shí) 方認(rèn)為命令校驗(yàn)正確并進(jìn)行操作,否則返回出錯(cuò)信息或放棄此命令。具體參見下文2.3。   從機(jī)接收到表1所示命令時(shí)的正確信息應(yīng)答報(bào)文格式如表2所示:   表2 從機(jī)應(yīng)答命令報(bào)文格式
  表中“02、04”如前所述,“80”為從機(jī)發(fā)送數(shù)據(jù)的字節(jié)個(gè)數(shù),即數(shù)據(jù)共發(fā)送了128個(gè)字節(jié)(64個(gè)數(shù)據(jù));“00 10 … 01 3A”為第1~64個(gè)數(shù)據(jù)的高、低字節(jié)值。   從機(jī)應(yīng)答命令中的地址碼、功能碼必須與主機(jī)查詢命令相同;命令中的模擬量數(shù)據(jù)必須按高位字節(jié)在前、低位字節(jié)在后的順序放置,而CRC碼與此相反,是低位字節(jié)在前、高位字節(jié)在后。   如果發(fā)生錯(cuò)誤或異常,從機(jī)將返回主機(jī)出錯(cuò)命令,格式如表3所示:   表3 從機(jī)返回出錯(cuò)命令報(bào)文格式
  “84”是與主機(jī)查詢命令中功能碼“04”相對(duì)應(yīng)的出錯(cuò)功能碼,出錯(cuò)碼“03”表明主機(jī)查詢命令中的“數(shù)據(jù)長度”項(xiàng)有錯(cuò),例如超出了最大數(shù)據(jù)量等。   在其他工程應(yīng)用中,Modbus協(xié)議的各種功能碼、出錯(cuò)碼的含義及其具體選擇、使用可參見參考文獻(xiàn)[1]。   2.3 錯(cuò)誤檢測(cè)方法   標(biāo)準(zhǔn)的Modbus協(xié)議串行通信網(wǎng)絡(luò)采用兩種錯(cuò)誤檢測(cè)方法。一是奇偶校驗(yàn),對(duì)每個(gè)字符都可用;二是幀檢測(cè)(CRC 或LRC),應(yīng)用于整個(gè)命令報(bào)文。   RTU方式下幀檢測(cè)采用的是CRC校驗(yàn),方法是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過程對(duì)命令中連續(xù)的8位字節(jié)各當(dāng)前寄存器中的值進(jìn)行處理 。最終寄存器中的值,就是命令字符串中所有的字節(jié)都執(zhí)行之后的CRC校驗(yàn)碼值。   下面給出Visual C++ 6.0下CRC校驗(yàn)碼計(jì)算函數(shù):   WORD CRC_Calc (PBYTE buf, UINT num)   {   UINT i, j;   WORD temp, crc = 0xFFFF;   for ( i = 0; i < num; i ++){   temp = buf[ i ] & 0x00FF;   crc ︿= temp;   for ( j = 0; j < 8; j ++){   if ( crc & 0x0001)   {crc >>= 1;crc ︿= 0xA001;}   else crc >>= 1;  ?。?   }   return crc;  ?。?   計(jì)算得的CRC校驗(yàn)碼添加到命令中時(shí),必須按低位字節(jié)在前、高位字節(jié)在后的順序放置。例如,對(duì)表1所示的主機(jī)查詢命令調(diào)用計(jì)算函數(shù)得到其CRC碼為C9F1,則命令中最后兩個(gè)字節(jié)是F1、C9。 3 硬件構(gòu)架   系統(tǒng)中通信網(wǎng)絡(luò)采用點(diǎn)對(duì)點(diǎn)方式,即網(wǎng)絡(luò)中只有一臺(tái)主機(jī)和一臺(tái)從機(jī)。將一臺(tái)工業(yè)PC機(jī)模擬PLC作為從機(jī)(遠(yuǎn)程I/O數(shù)據(jù)采集系統(tǒng)),采用RS-485信號(hào)與DCS主機(jī)進(jìn)行串口通信。通信的模擬量參數(shù)為#1機(jī)組217點(diǎn)、#2機(jī)組217點(diǎn)和公用部分48點(diǎn),共計(jì)三個(gè)數(shù)據(jù)塊482點(diǎn)。   系統(tǒng)的硬件實(shí)現(xiàn)如圖1所示: [align=center] 圖1 系統(tǒng)硬件接口框圖[/align]   主機(jī)、從機(jī)之間裝有一對(duì)臺(tái)灣研華公司的ADAM4520轉(zhuǎn)換器,用于完成RS-232與RS-485信號(hào)的轉(zhuǎn)換,實(shí)現(xiàn)長距離的通信。另外,此轉(zhuǎn)換器還需要+24V直流電源。 4 軟件設(shè)計(jì)   4.1 軟件功能   主機(jī)通信子程序已內(nèi)嵌在DCS系統(tǒng)中,以下介紹從機(jī)通信子程序的設(shè)計(jì)和開發(fā)。   從機(jī)操作系統(tǒng)為Win2000,程序設(shè)計(jì)平臺(tái)為VC++6.0 ,通信程序采用Win32的API函數(shù)讀、寫串口。   程序的界面設(shè)計(jì)主要包括:一個(gè)復(fù)選框,用于選擇通信的數(shù)據(jù)塊;一系列下拉列表,用于設(shè)置通信的串口參數(shù);網(wǎng)絡(luò)狀態(tài)顯示控件。復(fù)選框的內(nèi)容是#1、#2及公用部分三個(gè)數(shù)據(jù)塊,下拉列表主要包括設(shè)定波特率(9600bps)、起始位(1位)、數(shù)據(jù)位(7位)、奇偶校驗(yàn)位(1位)、停止位(1位),有無奇偶檢驗(yàn)(無)等,設(shè)置的內(nèi)容均可以調(diào)整。   程序的功能設(shè)計(jì)請(qǐng)參見通信子程序以及解析應(yīng)答模塊的流程圖,分別如圖2、3所示: [align=center] 圖2 從機(jī)通信子程序流程圖[/align]   從機(jī)通信子程序采取了多線程的工作方式。程序首先設(shè)置與DCS相同的串口參數(shù)以進(jìn)行串口初始化,并按照DCS的要求選定通信的數(shù)據(jù)塊,之后創(chuàng)建一個(gè)偵聽串口事件線程CommWatchThread( ),由此線程監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài)及主機(jī)發(fā)送來的命令消息等各種串口事件,再調(diào)用相應(yīng)的函數(shù)對(duì)事件進(jìn)行處理。 [align=center] 圖3 從機(jī)解析應(yīng)答模塊流程圖[/align]   解析應(yīng)答模塊共有兩個(gè)函數(shù):RecvData( )、SendData( )。當(dāng)RecvData( )函數(shù)成功讀取到主機(jī)的查詢命令后,首先對(duì)數(shù)據(jù)量和校驗(yàn)碼進(jìn)行校驗(yàn),如果有錯(cuò),則由SendData( )向主機(jī)返回相應(yīng)的出錯(cuò)命令報(bào)文;如果正確,則由SendData( )按照命令中要求的起始數(shù)據(jù)和數(shù)據(jù)量讀取數(shù)據(jù)庫,準(zhǔn)備應(yīng)答命令報(bào)文,并調(diào)用CRC計(jì)算函數(shù)計(jì)算出CRC碼添加到命令的最后兩個(gè)字節(jié)中,發(fā)送給主機(jī)。   由于通信系統(tǒng)網(wǎng)絡(luò)采用點(diǎn)對(duì)點(diǎn)方式且只進(jìn)行模擬量數(shù)據(jù)的通信,所以從機(jī)程序的解析、應(yīng)答模塊在對(duì)命令進(jìn)行校驗(yàn)的時(shí)候只進(jìn)行了數(shù)據(jù)量和CRC校驗(yàn),省略了地址碼和功能碼等的校驗(yàn),以節(jié)省時(shí)間,提高通信的效率。   4.2 軟件特點(diǎn)   1、 采用VisualC++面向?qū)ο蟮脑O(shè)計(jì)方法編寫通信軟件程序,模擬PLC通信的原理在工業(yè)PC機(jī)上實(shí)現(xiàn)基于Modbus協(xié)議的串行通信,操作方便。   2、 采用多線程技術(shù)和消息驅(qū)動(dòng)的工作方式,可以充分利用計(jì)算機(jī)系統(tǒng)的資源,避免瓶頸的產(chǎn)生,達(dá)到將系統(tǒng)進(jìn)行合理組織的目的,有效地避免了網(wǎng)絡(luò)數(shù)據(jù)的沖突,使得數(shù)據(jù)通信安全可靠。 5 結(jié)束語   本文介紹了使用工業(yè)PC機(jī)通過Modbus協(xié)議實(shí)現(xiàn)DCS與遠(yuǎn)程I/O系統(tǒng)進(jìn)行串口數(shù)據(jù)通信的過程,采用VC開發(fā)的通信軟件已成功應(yīng)用于陜西某電廠的改造工程,這種通信方式靈活方便,可靠性高,完全達(dá)到了預(yù)期的要求。了解Modbus協(xié)議是我們掌握PLC、智能儀表、單片機(jī)等通信機(jī)制的重要內(nèi)容,對(duì)過程監(jiān)控、數(shù)據(jù)采集等系統(tǒng)中使用PC機(jī)進(jìn)行串行通信的軟件開發(fā)本文不失為具有普遍的意義。 參考文獻(xiàn):   [1] Modicon Modbus Protocol Reference Guide[EB/OL]. June 1996, MODICON, Inc.   [2] Mark Nelson著.瀟湘工作室譯.串行通信開發(fā)指南[M].北京:中國水利水電出版社,2000年   [3] 王常力,廖道文.集散型控制系統(tǒng)的設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,1993年.   [4] Davis Chapman著.駱長樂譯.學(xué)用Visual C++ 6.0.北京:清華大學(xué)出版社,1999年.

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:功率模塊的過電流保護(hù)

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

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

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

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

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

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

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