波多野结衣无码一区,久久久噜噜噜久久中文免费,亚洲性爱一区二区免费看,久久国产国内精品国语对白

首頁
視頻
讓中國物聯(lián)網(wǎng)領先世界
關于
構(gòu)建萬物互聯(lián)的智能世界
搜索
歷史搜索
搜索發(fā)現(xiàn)

基于Modbus RTU的串口調(diào)試軟件的實現(xiàn)

2022-01-10 17:00:09| 來源:網(wǎng)絡| | 0

        文中介紹了Modbus RTU通訊協(xié)議的特點,闡述了該協(xié)議在VC2005編程環(huán)境下申口調(diào)試軟件的具體實現(xiàn)方法。并編制了相關的程序,該程序采用了模塊化思想,結(jié)構(gòu)清晰,操作簡便,實現(xiàn)了良好的ModbusRTU報文儲存及管理機制,使用多線程兼顧界面顯示和數(shù)據(jù)通訊,完全兼容ModbuaRTU通訊協(xié)議,可用于自定義功能碼的Modbus兼容設備的調(diào)試,克服了普通Modbus調(diào)試軟件僅能用于Modbus標準功能碼調(diào)試的不足。實踐證明,該程序編制思想合理、運行穩(wěn)定、操作簡便易行,為工業(yè)自動化中Modbus設備的調(diào)試帶來方便。

        

        一、ModbusRTU通信協(xié)議簡介

        Modbus通信協(xié)議是Modieon公司開發(fā)的一種通信協(xié)議,它采用主從問答方式工作,是一種真正開放、標準的、免收許可費的網(wǎng)絡通信協(xié)議。廣泛用于自動化控制器和測控儀表,現(xiàn)已成為一種公認的通用工業(yè)標準。如今Modbus協(xié)議已經(jīng)成為我國工業(yè)自動化網(wǎng)絡協(xié)議規(guī)范的國家標準之一。不同廠商生產(chǎn)的控制設備可以籍此連成工業(yè)網(wǎng)絡。進行集中監(jiān)控。該協(xié)議有2種傳輸模式,即RTU模式和ASCII模式。對于ASCII模式,一個信息幀中的每8位的字節(jié)作為2個ASCII字符傳輸;而對于RTU模式。信息幀中的8位數(shù)據(jù)作為2個4位16進制字符,相對于ASCII模式,RTU模式表達相同的信息需要較少的位數(shù),且在相同通信速率下具有更大的數(shù)據(jù)流量。因此通常情況下,一般工業(yè)智能儀表儀器都是采用RTU模式的Modbus規(guī)約。

        

        二、ModbusRTU傳輸過程

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

        ModbusRTU采用主從方式,若主機設備發(fā)送一個信息,則可從一臺從機設備返回一個響應,類似的,當一臺從機設備接受信息時,它就組織一個從機設備的響應信息,并返回至原發(fā)送信息的主機設備。

        當通訊命令由主機發(fā)送至從機時,符合相應地址碼的從機接收通訊命令,并根據(jù)功能碼及相關要求讀取信息,如果CRC校驗無誤,則執(zhí)行相應的任務,然后把執(zhí)行結(jié)果返送給主機。

        表1 Modbus RTU信息幀格式

        Modbus RTU信息幀格式

        Modbus RTU的查詢響應周期如圖1所示。

        Modbus RTU的查詢響應周期

        

        三、基于ModbusRTU的串口調(diào)試軟件實現(xiàn)

        3.1主體架構(gòu)

        軟件采用兩個線程,主線程顯示主界面,用來設置數(shù)據(jù)。報文處理線程用來監(jiān)聽報文幀、分析報文、取出主界面設置的數(shù)據(jù)并打包作出回應[6l。

        對于各部分的功能用類進行封裝處理,力求使程序簡潔易懂、便于移植。程序中所用的各種模塊如下[7,8]:

        (1)線程問數(shù)據(jù)傳送模塊:用于主線程與子線程間傳送主界面所設置的數(shù)據(jù),采用全局變量進行線程間通信,使用互斥體(CMutex)進行線程同步。

        (2)串口數(shù)據(jù)收發(fā)模塊:用于串口打開、關閉等常用操作及串口數(shù)據(jù)的收發(fā),為保證串口收發(fā)模塊的靈活性,模塊中串口數(shù)據(jù)的收發(fā)程序采用了串口操作相關的WindowsAPI函數(shù)。

        (3)Modbus協(xié)議模塊:對串口數(shù)據(jù)收發(fā)模塊再次封裝并實現(xiàn)了ModbusR,rU的各種報文規(guī)范。定義了報文格式的兩種結(jié)構(gòu)——PDU(協(xié)議數(shù)據(jù)單元)和ADU(應用數(shù)據(jù)單元),及兩者相互轉(zhuǎn)化的方法。并在此基礎上實現(xiàn)了對接受報文的判斷解析和對欲發(fā)送報文組織打包。

        (4)CRC校驗模塊:用于生成發(fā)送報文的16位CRC校驗碼,并對接受的報文再次生成CRC校驗碼以便于與原校驗碼進行比對。

        報文處理線程的流程圖如圖2所示。

        圖2報文處理線程流程圖

        3.2報文數(shù)據(jù)的存儲及管理

        為了存儲報文中的數(shù)據(jù),在內(nèi)存中劃分出來一個256Bytes大小的報文緩沖區(qū)。收到的報文和打包好的報文都暫存在該區(qū)域中。也就是說對報文的解析和打包就變成了對報文緩沖區(qū)的操作[9,10]。為了更好地管理報文緩沖區(qū),定義了兩個結(jié)構(gòu)PDU一HANDLE模擬是PDU(報文數(shù)據(jù)單元),其中PDU—HANDLE模擬的是PDU(報文數(shù)據(jù)單元),ADU一CONTROI模擬的是ADU(協(xié)議數(shù)據(jù)單元)[11l。二者定義如下:

        struet PDU—HANDLE

        {

        unsignedchar*PDUBuffPtr;//PUD數(shù)據(jù)指針

        urlsigned

        char FunctionCode;//請求功能代碼

        umigrled$l'92rt PD‰h;//PDU字節(jié)長度

        unsigned

        char Exeeptiong硝e;//異常代碼

        };

        Sta"uct ADU_CONTROL,

        {

        unsigned char*ADUBuffPtr;//ADU緩沖區(qū)指針,指向報文緩沖區(qū)

        unsigned char ADULength;//設備地址

        unsigned short ADULength;//ADU字節(jié)長度

        };

        對PDU_HANDIE和ADU_CONTROL操作的函數(shù)主要有PackDU2PDU()、ClearPDUBuf()、PackP_DU2ADU()。其主要流程是:

        1)收到合法的報文后,對結(jié)構(gòu)ADU-CONTROL進行填充。報文被存儲在ADU—CoNTROL的成員AD切3uffPtr指向的內(nèi)存單元中。報文其它相關信息(從機地址,報文長度)填充到ADU—CONTRoI.的剩余成員中。

        2)執(zhí)行PackADU2PDU()。完成ADU向PDU的轉(zhuǎn)換。此步主要完成CRCl6校驗碼比對,并依據(jù)ADU—CONTRoI的成員完成對PDU_HANDLE的填充,以便于后續(xù)對PDU內(nèi)容的分析處理。

        3)執(zhí)行ClearPDUBuf() ,清空PDU數(shù)據(jù)緩沖區(qū)內(nèi)容。此時已經(jīng)完成對接受報文的分析,要清空PDU數(shù)據(jù)緩沖區(qū)內(nèi)容.以裝填欲發(fā)送的PDU數(shù)據(jù)。

        4)執(zhí)行PackPDU2ADU()。使PDU頭部加上設備地址,尾部附加CRcl6校驗碼。此時封裝成了完整的報文,以便發(fā)送。

        3.3功能碼及相應處理函數(shù)本程序?qū)Σ煌墓δ艽a設置了不同的處理函數(shù)。

        出了部分標準功能碼及相應的處理函數(shù)。Modbus調(diào)試軟件一般作為從機。對主機發(fā)來的符合Modbus協(xié)議的報文進行解析回應。普通的Modbus調(diào)試軟件一般只能對上述四種標準功能碼進行解析回應。但是對于實際的Modbus設備來說。這四種功能碼是遠遠不夠的,更多的時候需要自定義功能碼來完成相關的功能。為了完成對自定義功能碼的調(diào)試??梢栽谡{(diào)試軟件中加入自定義功能碼處理函數(shù)。這樣便可以使此程序有更強的針對性[7]。

        表2部分標準Modbus功能碼及其處理函數(shù)

功能碼對應函數(shù)功能描述
0x01ReadCoils讀線圈
0x02ReadDiscretlnputs讀離散輸入量
0x03ReadHoldReg讀保持繼存器
0x04ReadInputReg讀輸入繼存器

        3.4程序的界面

        圖3所示為MoDbusRTU串日調(diào)試軟件的主界面。圖4為上位機軟件與ModbosRTU串口調(diào)試軟件的通信界面??梢钥闯鲈揗odbus RTU調(diào)試軟件工作正常。

         ModbusRTU串口調(diào)試軟件界面

        圖3 ModbusRTU串口調(diào)試軟件界面

        上位機軟件與ModbusRTU串口調(diào)試軟件的通信界面

        圖4上位機軟件與ModbusRTU串口調(diào)試軟件的通信界面

        

        四、結(jié)束語

        利用上述方法,在VC2005環(huán)境下編制的基于ModbusRTU的串口調(diào)試軟件,在某自動化企業(yè)小型PLC研發(fā)項目的上位機與下位機通信調(diào)試中得到應用。既能對標準Modbus功能碼進行調(diào)試,也可對自定義功能碼進行調(diào)試。實踐證明程序運行穩(wěn)定、可靠,操作簡便、易行。為自定義功能碼的Modbus RTU串口調(diào)試提供了一條簡潔、可行的解決方法。

        

        

聯(lián)系銷售
銷售王經(jīng)理微信 銷售王經(jīng)理
微信公眾號 微信公眾號
服務熱線
400-6688-400