技術頻道

      基于Modbus協議的智能壓力傳感器研發

      1 引言

        20世紀90年代以來,在傳感技術基礎上結合微處理器技術發展起來的智能能傳感技術成為國際上研究的熱點。傳感器領域的智能化得到了快速發展,出現了不同種類的智能化傳感器產品。但是,單一智能化傳感器并不能充分發揮智能化的優點,只有將其與計算機聯網才能真正將智能化傳感器的特點全面發揮出來。本文根據 rs-485總線以差分平衡方式傳輸信號,具有抗干擾性好、傳輸距離遠等特點,通過一對雙絞線作為傳輸介質將現場設備與上位機連起來,使系統結構大為簡化,同時這也大大降低了系統安裝、調試以及維護的成本。通過目前國際上普遍采用的modbus通信協議進行編寫,方便操作人員的閱讀及使用。

      2 modbus rtu通信協議

        modbus協議是莫迪康公司1978年發明用于電子控制器進行控制和通信的協議。

        modbus協議已經被接受轉化成為中國國家標準gb/t 19582-2008 《基于modbus協議的工業自動化網絡規范》。

        modbus協議采用主從(master-slave)技術,是一種問答方式的通信協議。modbus通訊協議有兩種傳送方式:rtu方式和ascii方式,相對于ascii方式,rtu模式表達相同的信息需要較少的位數,且在相同通訊速率下具有更大的數據流量。因此本文采用的是modbus rtu模式[2]。

        使用rtu模式時,消息發送至少要以3.5個字符時間的停頓間隔開始(如表1中的t1-t2-t3-t4所示)。傳輸的第一個域是設備地址。可以使用的傳輸字符是十六進制的0-9,a-f。功能碼是每幀通訊信息的第二個字節,根據modbus協議規定 ,不同功能碼對應數域格式不盡相同,常用的功能碼有 1、2、3、4、5、6、15 和 16 , 分別表示讀線圈、讀輸入狀態、讀保持寄存器、讀輸入寄存器、寫單個線圈、寫單個輸入狀態、寫多個線圈, 寫多個保持寄存器。本文根據需要主要是用的3、6、16功能碼。網絡設備不斷偵測網絡總線,當第一個域(地址域)接收到,每個設備都進行解碼以判斷是否發給自己。在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓標定了消息的結束。一個新的消息可在此停頓后開始。

        整個消息幀必須作為一連續的流傳輸。如果在幀完成之前有超過3.5個字符時間的停頓時間,接收設備將刷新不完整的消息并假定下一字節是一個新消息的地址域。同樣地,如果一個新消息在小于3.5個字符時間內接著前一消息開始,接收的設備將認為它是前一消息的延續。這將導致一個錯誤,因為在最后的crc 域的值不可能是正確的[3]。一典型的rtu模式的消息結構如表1所示。

      3 系統硬件設計

        智能傳感器(intelligent sensor)是具有信息檢測與處理功能的傳感器。智能傳感器帶有微處理機,具有采集、處理、交換信息的能力,是傳感器集成化與微處理機相結合的產物。本設計中智能壓力傳感器的組成如圖1所示。

      圖1 基于c8051f350的智能壓力傳感器的方框圖

        整個系統按照各部分功能可分為電源模塊、溫度采集模塊、模擬信號調理模塊、數據通信模塊等部分。本設計使用c8051f350作為數據采集后的微處理器,c8051f350內部有一個全差分24位sigma-delta模/數轉換器(adc),該adc具有在片校準功能。兩個獨立的抽取濾波器可被編程到1khz的采樣率[5]。可以使用內部的2.5v電壓基準,也可以用差分外部基準進行比率測量,其中在本設計中使用的是內部電壓基準。adc0中包含一個可編程增益放大器,有8種增益設置,最大增益可達128倍,增益調節范圍完全符合設計要求。

        設計采用陶瓷材料經特殊工藝精制而成的干式陶瓷壓阻壓力傳感器cps181,陶瓷是一種公認的高彈性、抗腐蝕、抗磨損、抗沖擊和振動的材料。陶瓷的熱穩定特性及它的厚膜電阻可以使它的工作溫度范圍高達-40~135℃,而且具有測量的高精度、高穩定性。電氣絕緣程度>2kv,輸出信號強,長期穩定性好[4]。設計使用ds18b20測量工作環境溫度。ds18b20具有以下特性:

        (1) 獨特的單線接口,只需一個接口引腳即可通信;

        (2) 不需要外部元件;

        (3) 可用數據線供電;

        (4) 不需要備份電源等。

        測量得到的溫度信號經過單線接口送入ds18b20或從ds18b20送出,因此從c8051f350到ds18b20僅需連接一條線。設計的通信通過rs485完成。因為rs-485的數據最高傳輸速率為10mbps;rs-485接口是采用平衡驅動器和差分接收器的組合,抗共模能力強,即抗噪聲干擾性好[6];rs-485接口的最大傳輸距離可達3000米;支持眾多常見的操作系統,易于實現不同網絡之間的通信。

      4 系統軟件設計

        4.1下位機通信程序的創新性設計


        系統的下位機程序主要是運用了大家熟悉的c語言進行編程,程序采用了模塊化思想,結構清晰易讀。主要包括系統初始化、更新傳感器溫度值、更新傳感器供電電壓值、更新傳感器零漂值、更新傳感器壓力值、由modbus協議對上位機發來的報文進行解釋形成任務標志、執行modbus協議的相應功能代碼任務、向上位機發送應答報文、故障診斷、電源管理等模塊。

        設計的創新點:自定義了一個寄存器數組,數組里包括地址、量程、增益、波特率、零漂、版本號、溫度、供電電壓、故障信息、壓力值等,并對他們進行了編號。寄存器分配一覽表如表2所示。

        (1)每一寄存器由兩個字節構成,高字節在前,低字節在后,高字節存放數值的高位,低字節存放數值的低位。例如:量程代碼存放于編號為01h的寄存器中,所占的兩個字節規定如下(其中xx為以16進制形式存放的量程代碼):

      寄存器編號 字節 高半字節 低半字節
      01h 高字節 0 0
      低字節 x x

        定義:傳感器地址、量程、增益、波特率分別占用一個寄存器(即兩個字節),它們的寄存器號分別為00h、01h、02h、03h,在modbus協議功能碼03中,起始地址高位、低位可以分別對應傳感器地址、量程、增益、波特率的高位、低位。

      (2) 在具體編寫程序時,把寄存器數組的所有只寫屬性放入flash

        然后初始化讀出。上位機發信息,下位機解釋相應命令,讀出或寫入相應數據。在編寫執行03、06、16任務模塊時我們把要讀取的寄存器數組的起始下標和要讀取的數據個數分別根據modbus功能碼中的起始地址高、低位和寄存器數高、低位設定成一個變量,這樣簡化了程序,可讀性強。

        (3)modbus協議規定,當設備使用rtu模式通信時,整個報文幀必須以連續的字符流發送。報文幀由時長至少為3.5個字符時間的空閑間隔區分。如果兩個字符之間的空閑間隔大于1.5個字符時間,則報文幀被認為不完整應該被接收節點丟棄。而在實際通信過程中由于每幀消息不定長,所以程序中最主要的問題是如何找到modbus消息幀的開始和結束時間點,并且要滿足兩個字符之間的空閑間隔和兩個報文幀之間的空閑間隔。程序的解決方法:接收采用中斷方式并采用了可重復觸發的可編程單穩方式進行處理,在利用modbus協議通信時保證了實時性接收。

        (4)對于報文發錯問題(即不符合要發送的報文),已用crc校驗程序對其處理。對于發送不符合要求的傳感器地址、功能代碼、數據、從機設備故障、從機設備忙碌、超時等問題,通過發送不正常響應信息來進行處理。而且上位機也編寫了相應的程序代碼。

        (5) 對于零漂、溫漂的補償以及線性化的問題,通過軟件進行補償處理的。實驗證明,系統精度可以控制在千分之五之內。

      4.2上位機通信程序的編寫

      圖2 modbus串口協議通信界面

        上位機串口通信是采用 visual basic語言編寫,visual basic提供了面向對象的可視化編程工具。開發人員只需按設計要求在屏幕上“畫”出所需的用戶界面來,并設置這些對象的屬性,不必為用戶界面設計而編寫大量的程序代碼[7]。相對于傳統編程語言,visual basic最突出的特點是事件驅動編程機制。每個事件都能驅動一段程序的運行。程序員只需編寫響應用戶動作的代碼,各個動作之間不一定有聯系,這樣的程序一般較短,且易于編寫和維護。在visual basic中為了完成串行通信,使用了mscomm控件,它可實現對串口的數據發送和接收。為了實現自動發送功能,還用到了timer控件。這兩個控件在程序運行時都是不可見的[8][9],在設計時把它們放在窗體的右上角即可。圖3為modbus串口協議通信界面。此串口通信主要完成的功能:

        (1)搜索傳感器配置信息:當用戶在用此傳感器時,可能不清楚掛接傳感器地址位置以及串口所使用的波特率,為此編寫了相應的程序方便用戶查詢。

        (2)讀傳感器配置信息,包括地址、量程、增益、波特率、程序代碼、修正系數、功能代碼等。此部分根據modbus功能碼03編寫,嚴格按照rtu幀格式編寫。

        (3)寫傳感器配置信息。用戶可以根據自己的要求,更改地址、量程、增益、波特率、程序代碼、修正系數、功能代碼等。此部分是根據根據modbus功能碼06或16編寫。

        (4) 采集傳感器工作狀態。包括傳感器壓力、供電電壓、環境溫度、零漂、故障信息等。
      modbus串口協議通信界面如圖2所示。

        部分程序如下:

      private sub timer1_timer()
      if star_find = true then `如果有啟動搜索命令標志
      area_num = area_num + 1
      mscomm1.outbuffercount = 0
      if area_num >= 248 then `如果現波特率下超出下位機地址范圍,則地址清零,重新換波特率搜索
      area_num = 0
      timer1.enabled = false
      ll= msgbox("該波特率下無法搜索到下位機地址,請改變波特率!", vbok, "提示")
      end if
      call start_find `開端口,將搜索命令發給下位機,并確定mscomm1.rthreshold屬性
      end if
      if star_read = true then `如果有啟動讀命令標志
      call start_read `開端口,將讀命令發給下位機,并確定mscomm1.rthreshold屬性
      end if
      if star_write = true then `如果有啟動寫命令標志
      call start_write
      `開端口,將配置信息強置給下位機,并確定mscomm1.sthreshold屬性
      end if
      if star_acq = true then `如果有啟動采集命令標志
      if acq_end = true then `如果有結束采集命令標志
      timer1.enabled = false `關閉時鐘
      acq_end = false `清除結束采集命令標志
      end if
      call start_read `開端口,將讀命令發給下位機,并確定mscomm1.rthreshold屬性
      end if
      end sub

        4.3 編程時應注意以下幾個問題

        (1) 下位機從應答到發送數據并返回回應消息有一定的時間間隔,程序已根據不同波特率對其進行設定。保證對下位機的信息正確讀取。

        (2) 在搜索傳感器配置信息時,若搜索不到,要有提示通信出錯信息,不能無限時間搜索。

        (3) 每一次的傳輸是0-255之間的數據,必須把inputmode屬性設置為1(默認為0),表示以二進制格式取回數據。否則當設置為0時,超過128的部分會被當成雙字節文字處理,結果出現錯誤。

      5 結束語

        利用上述的軟硬件設計方法,通過 vb6.0的mscomm控件可以做到基于modbus通信協議的上位機與下位機的相互通信。該方法編程簡單、實用,運行穩定可靠,操作簡便易行,通用性強,同時降低了開發成本,很好的滿足了工業現場的要求。

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 中文无码一区二区不卡αv| 久久久人妻精品无码一区| 八戒久久精品一区二区三区| 亚洲熟女www一区二区三区| 韩国精品一区视频在线播放 | 国产精品特级毛片一区二区三区| 91福利国产在线观看一区二区| 久久久久久免费一区二区三区| 日韩国产精品无码一区二区三区| 精品人妻码一区二区三区| 中文字幕一区日韩精品| 精品无码中出一区二区| 久久国产一区二区| 女同一区二区在线观看| 中文字幕日本一区| 波多野结衣一区二区三区| 波多野结衣一区二区三区高清av| 国产婷婷色一区二区三区| 99精品国产高清一区二区麻豆| 国产伦精品一区二区三区视频小说| 国产伦精品一区二区三区视频金莲| 无码人妻久久久一区二区三区| 国产成人欧美一区二区三区| 国产一在线精品一区在线观看| 亚洲一区二区三区在线观看蜜桃| 国产人妖视频一区在线观看| 久久久综合亚洲色一区二区三区 | 久久国产视频一区| 天堂一区二区三区精品| 久久久精品人妻一区亚美研究所 | 一区二区网站在线观看| 91视频国产一区| 亚洲中文字幕丝袜制服一区 | 中文字幕日韩精品一区二区三区| 免费视频精品一区二区| 亚洲av无码一区二区三区观看| 亚洲AV日韩精品一区二区三区| 国产经典一区二区三区蜜芽| 国产探花在线精品一区二区 | 国产一区二区精品久久凹凸| 波多野结衣AV一区二区三区中文 |