亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        魏元焜,吳丹陽(yáng)

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

        0 引言

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

        1 系統(tǒng)概述

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

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

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

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

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

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

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

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

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

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

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

        ■2.2 采集終端

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

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

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

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

        圖2 采集終端實(shí)物圖

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

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

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

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

        (2)初始化Modbus總線

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

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

        ModbusRTUServer.configureHoldingRegisters(0x00,2); //按表1為當(dāng)前計(jì)數(shù)值和計(jì)數(shù)報(bào)警值開(kāi)辟M(fèi)odbus保持寄存器空間。

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

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

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

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

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

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

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

        ■2.3 分析平臺(tái)

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

        2.3.1 分析平臺(tái)軟件框架

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

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

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

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

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

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

        2.3.2 分析平臺(tái)Modbus通信實(shí)現(xiàn)

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

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

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

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

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

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

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

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

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

        3 結(jié)束語(yǔ)

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

        猜你喜歡
        寄存器隊(duì)列消息
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        隊(duì)列里的小秘密
        基于多隊(duì)列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        一張圖看5G消息
        在隊(duì)列里
        豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        消息
        消息
        消息
        久久精品午夜免费看| 午夜一级韩国欧美日本国产| 亚洲色大成网站www永久一区| 999国产精品999久久久久久| av免费不卡国产观看| 少妇粉嫩小泬喷水视频www| 免费观看激色视频网站| 日日碰狠狠躁久久躁9| 国产偷窥熟女精品视频| 欧美深夜福利网站在线观看| 精品国产91久久综合| 国产亚洲成年网址在线观看| 国产内射视频在线观看| 最好的99精品色视频大全在线| 日韩极品在线观看视频| 极品av一区二区三区| 婷婷色综合视频在线观看| 免费a级毛片无码a∨中文字幕下载| 少妇无码吹潮| 国产亚洲精久久久久久无码77777| 色999欧美日韩| 亚洲中文字幕久爱亚洲伊人 | 欧美粗大猛烈老熟妇| 国产精品美女久久久久久大全| 校花高潮一区日韩| 午夜亚洲精品一区二区| 在线人妻va中文字幕| 国产自拍精品视频免费| 欧美牲交a欧美牲交aⅴ| 精品水蜜桃久久久久久久| 国产午夜无码视频免费网站| 日韩欧美在线观看成人| 国产一区二区三区成人av| 日本一区二区三区人妻| 50岁退休熟女露脸高潮| 少妇内射视频播放舔大片| 丰满少妇人妻无码超清| 在线观看一区二区三区国产| 最新国产毛2卡3卡4卡| 国产精品老熟女露脸视频 | 日本熟妇视频在线中出|