• 
    

    
    

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

      基于虛擬儀器和Arduino的多路物體計數(shù)報警統(tǒng)計分析系統(tǒng)設(shè)計

      2023-02-19 14:28:16魏元焜吳丹陽
      電子制作 2023年3期
      關(guān)鍵詞:寄存器隊列消息

      魏元焜,吳丹陽

      (遼寧機電職業(yè)技術(shù)學(xué)院,遼寧丹東, 118009)

      0 引言

      在貨物裝箱統(tǒng)計、人流量分析等領(lǐng)域中,計數(shù)統(tǒng)計或計數(shù)報警功能使用廣泛。尤其在對數(shù)據(jù)分析有要求的背景下,單一的數(shù)據(jù)統(tǒng)計的價值相對較低,更多時候人們期望對統(tǒng)計到的計數(shù)數(shù)據(jù)進行時段、峰谷平等更加智能的分析。這一需求要求系統(tǒng)具備多點控制能力,且需要一個高度可制定的數(shù)據(jù)分析平臺。針對這一需求,本文設(shè)計了基于虛擬儀器和Arduino的多路物體計數(shù)報警統(tǒng)計分析系統(tǒng)。虛擬儀器的靈活性,使系統(tǒng)具有高度的可制定特性。為實現(xiàn)多點管理,以Modbus協(xié)議構(gòu)建數(shù)據(jù)通信網(wǎng)絡(luò),以Arduino作為終端主控芯片,簡化終端的設(shè)計。

      1 系統(tǒng)概述

      系統(tǒng)分為采集終端和數(shù)據(jù)分析平臺兩個部分。采集終端負責(zé)檢測物體的經(jīng)過,在完成指定個次數(shù)的計數(shù)后,發(fā)出報警信號,并將報警信息也上傳到數(shù)據(jù)分析平臺。報警可選擇由采集終端的操作人員手動解除或由數(shù)據(jù)分析平臺解除。

      數(shù)據(jù)分析平臺記錄各個終端的報警參數(shù)和歷史數(shù)據(jù)。除了可以查詢各個終端的實時數(shù)據(jù)外,還可以根據(jù)各個平臺的歷史數(shù)據(jù)給出分析結(jié)果,以適應(yīng)不同終端的特殊計數(shù)和報警需求,并分析出不同終端位置的數(shù)據(jù)量特點。

      多個終端和平臺之間以Mod bus總線連接。分析平臺作為Modbus主機,掛接由采集終端構(gòu)成的Modbus從機。Modbus為平臺與終端之間提供了規(guī)范化的接口,既便于系統(tǒng)的擴展,也方便終端尋址、報警類型區(qū)分等個性化控制。系統(tǒng)整體設(shè)計框圖如圖1所示。

      圖1 系統(tǒng)整體設(shè)計框圖

      2 系統(tǒng)實現(xiàn)

      ■2.1 制定Modbus-RTU通信規(guī)則

      Modbus是一種工業(yè)協(xié)議標準,由Modicon(現(xiàn)為施耐德電氣)于20世紀70年代后期創(chuàng)建,如今已普遍用于可編程控制器、智能儀表之間的通信,是連接工業(yè)設(shè)備的最廣泛使用的協(xié)議。Modbus協(xié)議規(guī)范是公開發(fā)布的,該協(xié)議的使用是免費的[1~3]。

      本文采用的是RS-485上的Modbus-RTU協(xié)議,這是Modbus協(xié)議中一種常用的、相對簡單的串行協(xié)議,可以通過傳統(tǒng)的UART技術(shù)進行傳輸。

      系統(tǒng)實現(xiàn)Modbus-RTU通信的關(guān)鍵在于采集終端上Modbus寄存器的布局使用情況,以及采集終端和分析平臺上的Modbus軟件實現(xiàn)。本文系統(tǒng)中的計數(shù)報警采集終端的Modbus寄存器布局如表1所示。

      采集終端和分析平臺分別采用不同的軟件平臺實現(xiàn),因此Modbus的實現(xiàn)方式有所不同。但只要都遵循表1的寄存器布局規(guī)則,則上下位機就可以建立統(tǒng)一的通信規(guī)則,進而實現(xiàn)計數(shù)和報警數(shù)據(jù)的分布存儲和分析。

      表1 計數(shù)報警采集終端中的Modbus寄存器布局

      ■2.2 采集終端

      2.2.1 采集端硬件構(gòu)成

      采集終端采用Arduino Leonardo作為主控。Arduino Leonardo是基于ATmega32u4一個微控制器板。它有20個數(shù)字輸入/輸出引腳(其中7個可用于PWM輸出、12個可用于模擬輸入),一個16 MHz的晶體振蕩器,一個Micro USB接口,一個DC接口,一個ICSP接口,一個復(fù)位按鈕。它包含了支持微控制器所需的常用功能,可以簡單地通過將其連接到計算機的USB接口,或者使用AC-DC適配器,再或者用電池來驅(qū)動它[4]。

      Leonardo與其他Arduino控制器的不同之處在于直接使用了ATmega32u4的USB通信功能,取消了USB轉(zhuǎn)UART芯片。這使得Leonardo不僅可以作為一個虛擬的(CDC)串行/COM端口,還可以作為鼠標或者鍵盤連接到計算機[5]。

      為實現(xiàn)采集終端的功能,將Arduino與光電開關(guān)模塊、LED和按鍵連接,光電開關(guān)模塊數(shù)據(jù)由D2引腳讀取,LED由D3引腳輸出控制信號,按鍵信號由D7引腳讀取。圖2給出了采集終端的實物圖。

      圖2 采集終端實物圖

      2.2.2 采集端軟件實現(xiàn)

      Modbus在采集終端采用Arduino官方提供的Arduino Modbus庫來實現(xiàn)。這一工具庫可在ArduinoI DE的庫管理器中搜索并直接安裝。另外需要同時安裝Arduino Modbus庫依賴的Arduino RS485庫。由于Modbus總線的通信主要是主機發(fā)出查詢指令,從機被動應(yīng)答,因此Arduino的Modbus庫將Modbus從機看作服務(wù)器,Modbus主機看作客戶端,從機的Modbus對象被命名為Modbus RTUServer。從機利用Arduino Modbus庫實現(xiàn)Modbus通信分為初始化、查詢和更新幾個階段,涉及modbusServer對象的常用方法有:begin()、poll()、end()以及一些寄存器的配置和讀寫方法。

      采集終端的軟件分為初始化和主循環(huán)兩個部分。初始化部分需要完成計數(shù)變量、報警變量等數(shù)據(jù)初始化以及LED狀態(tài)初始化,以及Modbus總線和寄存器的初始化。主循環(huán)部分包括光電開關(guān)數(shù)據(jù)更新、按鍵數(shù)據(jù)更新、LED狀態(tài)更新、計數(shù)變量、報警變量等數(shù)據(jù)的更新,以及Modbus請求查詢和按硬件情況更新Modbus寄存器。

      采集終端的功能主要由以下幾個步驟實現(xiàn):(1)初始化變量和引腳

      (2)初始化Modbus總線

      ModbusRTUServer.begin(0x33, 9600); //指 定Modbus從機的設(shè)備號和通信波特率。

      ModbusRTUServer.configureCoils(0x00, 2); //按表1為光電開關(guān)狀態(tài)和當前報警狀態(tài)開辟Modbus線圈寄存器空間。

      ModbusRTUServer.configureHoldingRegisters(0x00,2); //按表1為當前計數(shù)值和計數(shù)報警值開辟Modbus保持寄存器空間。

      (3)開始主循環(huán),更新硬件狀態(tài)

      利用digitalWrite和digitalRead更新硬件狀態(tài)。其中,PeStateOld和PeStateNew分別記錄相鄰兩次的光電開關(guān)狀態(tài),光電開關(guān)輸出的上升沿代表有物體經(jīng)過,則PassState被賦值為HIGH。PassState的上升沿使當前計數(shù)值CurCnt自增1,CurCnt也可由分析平臺或采集終端的按鍵清零。當CurCnt數(shù)值超過AlmNum規(guī)定的報警上限時,則AlarmState置1,并以此數(shù)值驅(qū)動LED,使其點亮0.5s。

      (4)硬件狀態(tài)映射到Modbus寄存器

      按表1映射關(guān)系,將光電開關(guān)狀態(tài)和報警狀態(tài)映射到線圈寄存器,關(guān)鍵代碼如下:

      按表1映射關(guān)系,將當前計數(shù)值和計數(shù)報警值映射到保持寄存器,關(guān)鍵代碼如下:

      獲取ModbusClient(Modbus主機)的數(shù)據(jù)查詢請求,關(guān)鍵代碼如下:

      返回步驟(3),循環(huán)往復(fù)。

      ■2.3 分析平臺

      分析平臺基于Windows PC運行,利用NI LabVIEW軟件編寫實現(xiàn)。LabVIEW具有所見即所得的界面設(shè)計特點,可縮減軟件設(shè)計周期;配合LabVIEW成熟的設(shè)計模式(軟件設(shè)計框架),可以提高軟件的可維護性,便于功能的增加或刪減。

      2.3.1 分析平臺軟件框架

      旅游開發(fā)價值-充分挖掘古建筑本身具有的歷史文化與象征意義,將其開發(fā)打造成旅游觀光場所,不僅可以促進地方經(jīng)濟發(fā)展,而且是打造地方特色的重要實物載體。

      本文采用LabVIEW的隊列消息處理器(Queued Message Handler,QMH)設(shè)計模式搭建分析平臺的軟件框架。

      QMH可由模板創(chuàng)建。創(chuàng)建好的QMH模板中,Main.vi是整個程序的入口。Main.vi包含兩個while循環(huán),類似于兩個線程,它們是CPU分配時間的最小單位,可以共享局部變量。兩個while循環(huán)中,一個負責(zé)處理來自界面和用戶自定義的事件。根據(jù)具體事件要求,發(fā)送不同消息給另一個while循環(huán)— 消息處理循環(huán)。根據(jù)設(shè)計需要,也可以建立多個消息處理循環(huán),根據(jù)設(shè)計規(guī)劃,將同一類消息發(fā)送給不同的循環(huán)。在本文中,保留了模板中的事件處理循環(huán)和消息處理循環(huán)。消息處理循環(huán)用于統(tǒng)一處理Modbus通信,因此稱為Modbus通信循環(huán)。另外,為每一個采集終端單獨設(shè)置一個while循環(huán),用于處理不用采集終端的消息,這一設(shè)計方式對平臺對不同采集終端數(shù)據(jù)的獨立分析是有利的。

      QMH中的第二個要素是消息隊列,在模板中以庫的形式出現(xiàn),被命名為Message Queue.lvlib。LabVIEW中的庫類似于面向?qū)ο缶幊讨械念?,在消息隊列庫中,封裝了消息隊列的數(shù)據(jù)類型、對外可見的公有函數(shù)和私有函數(shù)。對外的公有函數(shù)包括:Create All Message Queues(創(chuàng)建所有消息隊列)、Obtain Message Queue(獲取消息隊列)、Enqueue Message(消息入隊)和Dequeue Message(消息出隊)。Create All Message Queues函數(shù)一次性創(chuàng)建Main.vi所需的所有消息隊列,并以簇的形式將所有消息隊列的引用打包輸出。Obtain Message Queue可以創(chuàng)建單一的消息隊列。Enqueue Message將一個或多個消息壓入指定消息隊列,這是一個多態(tài)VI,可向指定隊列一次性壓入一個或多個消息,因而可以一次性發(fā)送多個連續(xù)的指令,這一特性在狀態(tài)機設(shè)計模式中可以用于一次性指定后續(xù)的連續(xù)多個狀態(tài)。消息入隊時可選擇消息入隊優(yōu)先級,低優(yōu)先級入隊,是將消息壓入隊尾,而高優(yōu)先級入隊是將消息壓入消息隊列隊首,便于在消息出隊時優(yōu)先出隊。Dequeue Message用于從指定隊列中從隊首提取一個消息。

      本文為實現(xiàn)系統(tǒng)功能,為N個采集終端創(chuàng)建了N+1個消息隊列。即為每個采集終端獨立創(chuàng)建一個消息隊列,多出的一個消息隊列用于Modbus通信,即Modbus通信循環(huán)的專用消息隊列。

      消息的數(shù)據(jù)類型是一個簇(類似于C語言中的結(jié)構(gòu)體),包含了消息本身(字符串類型)和一個消息參數(shù)(變體類型,類似于C語言中的空類型,即void)。這樣的設(shè)計方式可以將任意類型的數(shù)據(jù)以變體的形式發(fā)送,在接收時按對應(yīng)數(shù)據(jù)類型從變體中恢復(fù)出來。但這種類型的數(shù)據(jù)發(fā)送需要開辟大量內(nèi)存空間,因此對于大量數(shù)據(jù),最好發(fā)送引用,以減少不必要的內(nèi)存開銷。

      2.3.2 分析平臺Modbus通信實現(xiàn)

      分析平臺的Modbus通信可通過NI的Modbus庫1.21實現(xiàn)。NI Modbus庫不是LabVIEW自帶的,但安裝過程相對簡單,其提供了較為完整的功能。NI Modbus庫提供了LabVIEW 7.1、8.2、8.5以及8.6幾個早期關(guān)鍵版本,但8.6版的兼容性較好,可以使其兼容LabVIEW2019乃至更高版本的LabVIEW。因此安裝時將86文件夾中的三個文件夾:help、user.lib以及vi.lib復(fù)制到安裝目錄下,并直接與同名文件夾合并即可。重啟LabVIEW軟件,在程序框圖右擊,調(diào)出函數(shù)選板,在用戶庫大類下,看到NI Modbus項則表明安裝成功。

      工具包中有幾個關(guān)鍵函數(shù),是實現(xiàn)分析平臺作為Modbus主機(即Arduino Modbus庫中的Modbus Client)與作為Modbus從機的采集終端進行Modbus通信所必需的,包括:

      (1)MB Serial Init:用于對初始化Modbus總線所在的串口資源,包括指定串口號、波特率、校驗位、是否采用流控、超時毫秒以及Modbus模式等信息,完成初始化后,即輸出初始化成功的串口資源號。

      (2)MB Serial Master Query:用于Modbus主機向從機發(fā)起查詢指令。這是一個多態(tài)VI,可根據(jù)查詢寄存器類型選擇對應(yīng)參數(shù)類型的重寫VI。其中的關(guān)鍵參數(shù)包括指定從機號、寄存器類型對應(yīng)的起始寄存器地址和要讀寫的數(shù)量。

      2.3.3 分析平臺數(shù)據(jù)分析功能實現(xiàn)

      就實現(xiàn)單一采集終端數(shù)據(jù)讀取而言,LabVIEW的程序框圖非常簡單,如圖3所示。

      圖3 單一采集終端的數(shù)據(jù)查詢的LabVIEW程序

      圖中給出的示例分為初始化、數(shù)據(jù)讀寫和資源回收三個階段。在初始化階段,利用MB Serial Init函數(shù)指定Modbus主機所連接的串口號,從而打開所在串口資源引用,后續(xù)的Modbus操作都需要利用這個引用找到需要讀寫的硬件資源。在數(shù)據(jù)讀寫階段,相應(yīng)的Modbus從機寄存器進行讀寫,同時需要指定Modbus通信模式(RTU)和從機號。由于Modbus從機有運行周期,所以主機的讀寫頻率應(yīng)適應(yīng)從機讀寫周期。當程序退出后,需要回收相應(yīng)的硬件資源,關(guān)閉打開的串口。

      但當采集中端數(shù)量變多時,主機對從機的請求數(shù)據(jù)就會出現(xiàn)積壓,因此必須分類管理,否則會出現(xiàn)通信沖突。這時就需要利用分析平臺的QMH軟件框架對數(shù)據(jù)通信進行規(guī)劃管理。即為每一個采集終端設(shè)置一個消息請求循環(huán)(while循環(huán)實現(xiàn)的消息處理循環(huán)),每個采集終端的消息處理循環(huán)將自己的Modbus請求發(fā)送給QMH的Modbus消息循環(huán),即使出現(xiàn)消息積壓,所有消息也都會在Modbus消息處理循環(huán)的隊列中被有序組織,并依次發(fā)送給Modbus總線。從而有效地避免了數(shù)據(jù)沖突。每一個采集中端的消息處理循環(huán)可按其優(yōu)先級設(shè)置不同的采樣周期,以最大化提升信息傳輸效率。

      3 結(jié)束語

      傳統(tǒng)的技術(shù)報警設(shè)備通常是主機和從機的一對一控制,對于一個主機掛有多個從機的情況,則需要對數(shù)據(jù)通信進行統(tǒng)一調(diào)度。Modbus總線為這種消息集中管理提供了硬件基礎(chǔ),而LabVIEW的QMH軟件架構(gòu)為消息統(tǒng)一調(diào)度提供了軟件基礎(chǔ)。本文的設(shè)計方法擴展性強,有望應(yīng)用于實際的產(chǎn)品設(shè)計當中。

      猜你喜歡
      寄存器隊列消息
      Lite寄存器模型的設(shè)計與實現(xiàn)
      隊列里的小秘密
      基于多隊列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      一張圖看5G消息
      在隊列里
      豐田加速駛?cè)胱詣玉{駛隊列
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      消息
      消息
      消息
      丁青县| 乐清市| 囊谦县| 泌阳县| 资溪县| 田东县| 达尔| 岑溪市| 伊宁县| 广汉市| 广西| 金寨县| 桦南县| 龙南县| 沛县| 寿阳县| 察隅县| 新竹市| 大连市| 仙游县| 海安县| 阳江市| 苍溪县| 富民县| 景泰县| 佛学| 河北区| 台南县| 青海省| 延安市| 遵义市| 遂宁市| 平利县| 全州县| 双城市| 二手房| 合作市| 华亭县| 铜川市| 孟津县| 大化|