• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      嵌入式系統(tǒng)中MODBUS通信的教學研究與實踐

      2019-07-08 03:32王雪
      無線互聯(lián)科技 2019年8期
      關(guān)鍵詞:校驗碼通信協(xié)議串口

      王雪

      摘 ? 要:文章針對MODBUS通信協(xié)議進行了實踐和教學研究。首先,指出了MODBUS協(xié)議的重要性以及地位作用;其次,分析了MODBUS幀的結(jié)構(gòu)和通信原理,再利用一個通信項目分析了MODBUS通信的詳細過程和開發(fā)代碼;最后,指出MODBUS通信過程中需要注意的問題,并進行了總結(jié),這對于MODBUS項目的研究與開發(fā)有重要的參考價值。

      關(guān)鍵詞:MODBUS通信協(xié)議;STC單片機;485通信;工業(yè)物聯(lián)網(wǎng)

      1 ? ?網(wǎng)絡通信概述

      隨著計算機通信技術(shù)的發(fā)展,越來越多的計算機系統(tǒng)連接到網(wǎng)絡當中,網(wǎng)絡通信成為當前信息科學最為熱點的問題之一,尤其在工業(yè)控制與物聯(lián)網(wǎng)領(lǐng)域,如何安全、快速、便捷地傳送數(shù)據(jù),成為衡量工業(yè)發(fā)展水平的重要標志之一。與傳統(tǒng)PC機相比,工業(yè)領(lǐng)域的信息通信的特點[1]在于:通信主機結(jié)構(gòu)類型不盡相同;通信環(huán)境有可能會受到輻射干擾;通信設(shè)備成本限制;通信組網(wǎng)信息安全;網(wǎng)絡拓撲結(jié)構(gòu)各異。在這種背景下,選擇什么樣的通信方式和通信協(xié)議,就顯得異常關(guān)鍵。

      2 ? ?MODBUS通信協(xié)議

      MODBUS[2]是由施耐德電氣(現(xiàn)在的Modicon公司)于1979年為PLC之間的通信而研發(fā)的一種串行通信協(xié)議,它為連接至不同類型總線或網(wǎng)絡的設(shè)備之間提供了C/S通信,目前已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標準。自1979年以來,使成千上萬的自動化設(shè)備能夠通信,很好地解決工業(yè)領(lǐng)域面臨的通信難題,成為目前主流的工業(yè)物聯(lián)網(wǎng)通信協(xié)議。

      MODBUS協(xié)議定義了一個與基礎(chǔ)通信層無關(guān)的簡單協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU)。特定總線或網(wǎng)絡上的 MODBUS協(xié)議映射能夠在應用數(shù)據(jù)單元(Application Data Unit,ADU)上引入一些附加域。啟動MODBUS事務處理的客戶機創(chuàng)建MODBUS應用數(shù)據(jù)單元。功能碼向服務器指示將執(zhí)行哪種操作。MODBUS協(xié)議建立了客戶機啟動的請求格式。MODBUS事務處理流程如圖1所示。

      3 ? ?MODBUS通信實踐與教學

      3.1 ?總體結(jié)構(gòu)

      采用單片機與PC上位機的串口通信方式,并采用RS485總線進行信號傳輸,以保證信號的總體質(zhì)量。單片機一端作為服務器端,不主動發(fā)送數(shù)據(jù),只是等待應答客戶端請求的數(shù)據(jù)。PC機作為客戶端,負責啟動請求與接收響應。

      與RS232相比,采用RS485總線的好處在于:(1)傳輸方式不同。RS-232采取不平衡傳輸方式,即所謂單端通信。而RS485則采用平衡傳輸,即差分傳輸方式。在穩(wěn)定性和抗干擾性方面都有明顯優(yōu)勢。(2)傳輸距離不同。RS-232適合本地設(shè)備之間的通信,傳輸距離一般不超過20 m。而RS-485的傳輸距離為幾十米到上千米。(3)主機數(shù)量不同。RS-232只允許一對一通信,而RS-485接口在總線上是允許連接收發(fā)器多達128個。

      3.2 ?MODBUS軟件設(shè)計

      MODBUS公共功能碼是MODBUS協(xié)議通用的功能碼,這個功能碼是預先被定義好的,并且需要保證是唯一的、公開證明的。對應于每個操作訪問,相關(guān)程序代碼如下:

      void readCoil(void); //讀線圈

      void readRegisters(void); //讀寄存器

      void forceSingleCoil(void); //強制單個線圈

      void presetSingleRegister(void); //設(shè)置單個寄存器

      void presetMultipleRegisters(void); //設(shè)置多個寄存器

      void forceMultipleCoils(void); //強制多個線圈

      3.3 ?MODBUS通信從機軟件設(shè)計

      MOBUS通信的主要過程包括:(1)進行系統(tǒng)初始化設(shè)置,主要包括定時器初始化,串口初始化,中斷服務函數(shù)的編寫和變量定義。(2)定時處理,不是指定時器與計數(shù)器的初始化,而是指判斷一個完整的MODBUS幀是否結(jié)束的時間。關(guān)于區(qū)分兩個幀的間隔時間,有許多衡量方法,一般采用延時幾十微秒的方法。(3)循環(huán)監(jiān)聽MODBUS狀態(tài),一旦收到完整的數(shù)據(jù)幀,便開始處理,利用前面講到的MODBUS庫函數(shù)進行處理。在完成讀寫任務后,按照MODBUS幀規(guī)則,應答數(shù)據(jù)通過MODBUS總線傳回客戶端。部分初始化代碼如下。

      //串口初始化代碼

      void UartInit (ULONG baud, UCHAR mode)

      { IE=0x90;

      TMOD = (TMOD & 0X0F) | 0X20;

      TH1 = -22118400L/12/32/9600;

      TL1 = -22118400L/12/32/9600;

      TR1 = 1;

      SCON = 0X50;

      PCON |= 0X80; }

      //串口中斷服務函數(shù)代碼

      void commIntProc(void) interrupt 4

      { if (!RI) return;

      RI = 0;

      receTimeOut = 20;

      receBuf[receCount] = SBUF;

      receCount ++;

      receCount &= 0x0f; }

      4 ? ?開發(fā)過程需要注意的問題

      4.1 ?單片機型號的選擇

      單片機最常用的主要包括89C51和89C52系列,許多型號的單片機均可采用這種型號的工程。然而,單片機開發(fā)時最好要用自己的工程型號以及頭文件。如本例用到的STC15系列單片機,需要在建立工程時便選定型號,并且加入其特有的頭文件:#include “stc15.h”。這樣,才能保證工程能夠編譯通過并正確下載到芯片中。

      4.2 ?波特率的控制

      在傳輸過程中,客戶機與服務器的波特率設(shè)置必須完全一致,否則將接收不到正確的數(shù)據(jù)。受到傳輸距離和單片機性能的約束,在速度選擇上要適中,具體情況要通過實驗得以驗證,一般不宜過高或過低。

      4.3 ?傳輸距離

      MODBUS通信物理層多采用的是串行通信,在通信過程中不同類型的串行通信差別很大,如RS232和RS485在通信原理和通信性能上都存在很大差異,在開發(fā)過程中,應該根據(jù)需要合理選擇,避免造成信號不穩(wěn)定。

      4.4 ?CRC校驗碼

      循環(huán)冗余校驗碼(Cyclic Redundancy Check,CRC)可以有效地檢測到傳輸問題導致的數(shù)據(jù)錯誤,它的原理是利用CRC算法將數(shù)據(jù)幀轉(zhuǎn)換成一個CRC檢驗碼,接收方在接收到數(shù)據(jù)以后,再重新計算校驗碼并與發(fā)送時的檢驗碼相比對,以檢驗數(shù)據(jù)的準確性。在實踐過程中,CRC校驗碼的生成和檢測一般直接利用庫函數(shù)完成,不是MODBUS研究的重點,在開發(fā)和教學過程中應當注意區(qū)分。

      4.5 ?節(jié)點數(shù)量

      有的項目可能需要幾百甚至上千個節(jié)點進行485通信,從理論上講,無論是MODBUS還是485總線都是有數(shù)量限制的,MODBUS的數(shù)量最多240個。485總線根據(jù)芯片的不同,差異也很大,在幾十到幾百之間。同時,還受到線路長度的影響。如果想讓更多的設(shè)備連接在一起,需要采用中繼器或者多串口服務器一類的設(shè)備進行網(wǎng)絡拓撲。

      5 ? ?結(jié)語

      通過對MODBUS的系統(tǒng)研究與實驗論證,證明MODBUS協(xié)議在單片機平臺上,利用RS485通信是十分可靠并可以實現(xiàn)的,可以應用到嵌入式系統(tǒng)等相關(guān)課程的教學當中。通過合理的組織教學,讓學生能夠熟悉并掌握工業(yè)現(xiàn)場的應用技術(shù),更接近市場的人才需求,內(nèi)容適合物聯(lián)網(wǎng)相關(guān)專業(yè)的學生學習。同時,還要注意講授內(nèi)容的取舍,把重點放在MODBUS協(xié)議本身,以免使學生產(chǎn)生畏難心理。

      猜你喜歡
      校驗碼通信協(xié)議串口
      淺談AB PLC串口跟RFID傳感器的通訊應用
      基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設(shè)計
      基于DMX512通信協(xié)議的多路轉(zhuǎn)發(fā)器設(shè)計與研究
      基于NS-3的PLC多頻通信協(xié)議仿真平臺設(shè)計與實現(xiàn)
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
      基于FPGA的循環(huán)冗余校驗碼設(shè)計
      基于并行控制的FPGA多串口拓展實現(xiàn)
      RSSP-I、RSSP-Ⅱ及SAHARA三種安全通信協(xié)議實現(xiàn)技術(shù)簡介
      基于FPGA和NAND Flash的存儲器ECC設(shè)計與實現(xiàn)
      朝阳县| 峨眉山市| 富顺县| 朝阳县| 海安县| 乌鲁木齐县| 湄潭县| 宁安市| 栾川县| 平远县| 青浦区| 富蕴县| 日照市| 社会| 浦城县| 师宗县| 广饶县| 兖州市| 石泉县| 黄山市| 马尔康县| 祥云县| 东阿县| 贵定县| 门头沟区| 溧阳市| 荣成市| 新竹县| 北京市| 包头市| 漳平市| 兰州市| 同心县| 新河县| 秦安县| 昆明市| 黑水县| 越西县| 揭阳市| 漳平市| 衡山县|