分享
基于虚拟仪器和Arduno...体计数报警统计分析系统设计_魏元焜.pdf
下载文档

ID:2259021

大小:1.87MB

页数:4页

格式:PDF

时间:2023-05-04

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于 虚拟仪器 Arduno 计数 报警 统计分析 系统 设计 魏元焜
wwwele169com|105实验研究0 引言在货物装箱统计、人流量分析等领域中,计数统计或计数报警功能使用广泛。尤其在对数据分析有要求的背景下,单一的数据统计的价值相对较低,更多时候人们期望对统计到的计数数据进行时段、峰谷平等更加智能的分析。这一需求要求系统具备多点控制能力,且需要一个高度可制定的数据分析平台。针对这一需求,本文设计了基于虚拟仪器和Arduino 的多路物体计数报警统计分析系统。虚拟仪器的灵活性,使系统具有高度的可制定特性。为实现多点管理,以Modbus 协议构建数据通信网络,以 Arduino 作为终端主控芯片,简化终端的设计。1 系统概述系统分为采集终端和数据分析平台两个部分。采集终端负责检测物体的经过,在完成指定个次数的计数后,发出报警信号,并将报警信息也上传到数据分析平台。报警可选择由采集终端的操作人员手动解除或由数据分析平台解除。数据分析平台记录各个终端的报警参数和历史数据。除了可以查询各个终端的实时数据外,还可以根据各个平台的历史数据给出分析结果,以适应不同终端的特殊计数和报警需求,并分析出不同终端位置的数据量特点。多个终端和平台之间以 Mod bus 总线连接。分析平台作为Modbus 主机,挂接由采集终端构成的 Modbus 从机。Modbus为平台与终端之间提供了规范化的接口,既便于系统的扩展,也方便终端寻址、报警类型区分等个性化控制。系统整体设计框图如图 1 所示。2 系统实现 2.1 制定 Modbus-RTU 通信规则Modbus 是一种工业协议标准,由 Modicon(现为施耐德电气)于 20 世纪 70 年代后期创建,如今已普遍用于可编程控制器、智能仪表之间的通信,是连接工业设备的最广泛使用的协议。Modbus 协议规范是公开发布的,该协议的使用是免费的13。本文采用的是 RS-485 上的 Modbus-RTU 协议,这是Modbus 协议中一种常用的、相对简单的串行协议,可以通过传统的 UART 技术进行传输。系统实现 Modbus-RTU 通信的关键在于采集终端上Modbus 寄存器的布局使用情况,以及采集终端和分析平台上的 Modbus 软件实现。本文系统中的计数报警采集终端的 Modbus 寄存器布局如表 1 所示。采集终端和分析平台分别采用不同的软件平台实现,因基于虚拟仪器和 Arduino 的多路物体计数报警统计分析系统设计魏元焜,吴丹阳(辽宁机电职业技术学院,辽宁丹东,118009)基金项目:辽宁省教育厅2019年度科学研究经费项目(LX201905);辽宁机电职业技术学院院级科研项目(201908)。摘要:计数报警在轻工业生产、安防监控等领域有广泛的应用。在大数据背景下,单一的采集终端无法满足复杂的统计需求。文本利用虚拟仪器技术,以LabVIEW平台实现对多个计数报警终端发送的多路数据进行远程监视和统计分析。以Modbus-RTU协议进行总线通信,建立了设备通信网络,实现了平台对多个报警终端的管理,可以灵活添加和删除终端。实验表明本文的设计功能可行可靠,有望用于实际的生产实践当中。关键词:虚拟仪器;LabVIEW;Arduino;ModbusPCLabVIEWQMH架构 NI Modbus库控制分析逻辑Arduino Leonardo#1Arduino Modbus库控制逻辑光电开关LED按键Arduino Leonardo#2Arduino Modbus库控制逻辑光电开关LED按键Arduino Leonardo#NArduino Modbus库控制逻辑光电开关LED按键图 1 系统整体设计框图DOI:10.16589/11-3571/tn.2023.03.008106|电子制作 2023 年 2 月实验研究此 Modbus 的实现方式有所不同。但只要都遵循表 1 的寄存器布局规则,则上下位机就可以建立统一的通信规则,进而实现计数和报警数据的分布存储和分析。表1 计数报警采集终端中的Modbus寄存器布局寄存器类型寄存器地址作用Coil0 x00光电开关状态Coil0 x01当前报警状态Holding0 x00当前计数值Holding0 x01计数报警值 2.2 采集终端2.2.1 采集端硬件构成采集终端采用 Arduino Leonardo 作为主控。Arduino Leonardo 是基于 ATmega32u4 一个微控制器板。它有 20个数字输入/输出引脚(其中 7 个可用于 PWM 输出、12个可用于模拟输入),一个 16 MHz 的晶体振荡器,一个Micro USB 接口,一个 DC 接口,一个 ICSP 接口,一个复位按钮。它包含了支持微控制器所需的常用功能,可以简单地通过将其连接到计算机的 USB 接口,或者使用 AC-DC 适配器,再或者用电池来驱动它4。Leonardo 与其他 Arduino 控制器的不同之处在于直接使用了 ATmega32u4 的 USB 通信功能,取消了 USB 转UART 芯片。这使得 Leonardo 不仅可以作为一个虚拟的(CDC)串行/COM 端口,还可以作为鼠标或者键盘连接到计算机5。为实现采集终端的功能,将 Arduino 与光电开关模块、LED 和按键连接,光电开关模块数据由 D2 引脚读取,LED由 D3 引脚输出控制信号,按键信号由 D7 引脚读取。图 2给出了采集终端的实物图。图 2 采集终端实物图2.2.2 采集端软件实现Modbus 在 采 集 终 端 采 用 Arduino 官 方 提 供 的Arduino Modbus 库来实现。这一工具库可在 ArduinoI DE的库管理器中搜索并直接安装。另外需要同时安装 Arduino Modbus 库 依 赖 的 Arduino RS485 库。由 于 Modbus 总线的通信主要是主机发出查询指令,从机被动应答,因此 Arduino 的 Modbus 库将 Modbus 从机看作服务器,Modbus 主机看作客户端,从机的 Modbus 对象被命名为 Modbus RTUServer。从 机 利 用 Arduino Modbus 库实现 Modbus 通信分为初始化、查询和更新几个阶段,涉及 modbusServer 对象的常用方法有:begin()、poll()、end()以及一些寄存器的配置和读写方法。采集终端的软件分为初始化和主循环两个部分。初始化部分需要完成计数变量、报警变量等数据初始化以及 LED状态初始化,以及 Modbus 总线和寄存器的初始化。主循环部分包括光电开关数据更新、按键数据更新、LED 状态更新、计数变量、报警变量等数据的更新,以及 Modbus请求查询和按硬件情况更新 Modbus 寄存器。采集终端的功能主要由以下几个步骤实现:(1)初始化变量和引脚int PeStateOld=LOW;int PeStateNew=LOW;int PassState=LOW;/光电开关状态int AlarmState=LOW;/当前报警状态long CurCnt=0;/当前计数值long AlmNum=20;/计数报警值初始化const int PeSwitchPin=2;/光电开关连接 D2const int LedPin=3;/LED 接 D3const int KeyPin=7;/按键连 D7pinMode(PeSwitchPin,INPUT);/设置引脚输入pinMode(LedPin,OUTPUT);/设置引脚输出pinMode(KeyPin,INPUT);/设置引脚输入(2)初始化 Modbus 总线ModbusRTUServer.begin(0 x33,9600);/指定Modbus 从机的设备号和通信波特率。ModbusRTUServer.configureCoils(0 x00,2);/按表 1为光电开关状态和当前报警状态开辟 Modbus 线圈寄存器空间。ModbusRTUServer.configureHoldingRegisters(0 x00,2);/按表 1 为当前计数值和计数报警值开辟 Modbus 保持寄存器空间。(3)开始主循环,更新硬件状态利用 digitalWrite 和 digitalRead 更新硬件状态。其中,PeStateOld 和 PeStateNew 分别记录相邻两次的光电开关状态,光电开关输出的上升沿代表有物体经过,则PassState 被赋值为 HIGH。PassState 的上升沿使当前计数值 CurCnt 自增 1,CurCnt 也可由分析平台或采集终端的按键清零。当 CurCnt 数值超过 AlmNum 规定的报警上限时,则 AlarmState 置 1,并以此数值驱动 LED,使其点亮 0.5s。wwwele169com|107实验研究(4)硬件状态映射到 Modbus 寄存器按表 1 映射关系,将光电开关状态和报警状态映射到线圈寄存器,关键代码如下:modbusServer.coilWrite(0 x00,PeStateNew);modbusServer.coilWrite(0 x01,AlarmState);按表 1 映射关系,将当前计数值和计数报警值映射到保持寄存器,关键代码如下:int holdingRegisterWrite(0 x00,CurCnt);获取 ModbusClient(Modbus 主机)的数据查询请求,关键代码如下:ModbusRTUServer.poll();返回步骤(3),循环往复。2.3 分析平台分析平台基于 Windows PC 运行,利用 NI LabVIEW 软件编写实现。LabVIEW 具有所见即所得的界面设计特点,可缩减软件设计周期;配合 LabVIEW 成熟的设计模式(软件设计框架),可以提高软件的可维护性,便于功能的增加或删减。2.3.1 分析平台软件框架本 文 采 用 LabVIEW 的 队 列 消 息 处 理 器(Queued Message Handler,QMH)设计模式搭建分析平台的软件框架。QMH 可由模板创建。创建好的 QMH 模板中,Main.vi是整个程序的入口。Main.vi 包含两个 while 循环,类似于两个线程,它们是 CPU 分配时间的最小单位,可以共享局部变量。两个 while 循环中,一个负责处理来自界面和用户自定义的事件。根据具体事件要求,发送不同消息给另一个while 循环消息处理循环。根据设计需要,也可以建立多个消息处理循环,根据设计规划,将同一类消息发送给不同的循环。在本文中,保留了模板中的事件处理循环和消息处理循环。消息处理循环用于统一处理 Modbus 通信,因此称为 Modbus 通信循环。另外,为每一个采集终端单独设置一个 while 循环,用于处理不用采集终端的消息,这一设计方式对平台对不同采集终端数据的独立分析是有利的。QMH 中的第二个要素是消息队列,在模板中以库的形式出现,被命名为 Message Queue.lvlib。LabVIEW 中的库类似于面向对象编程中的类,在消息队列库中,封装了消息队列的数据类型、对外可见的公有函数和私有函数。对外的公有函数包括:Create All Message Queues(创建所有消息队列)、Obtain Message Queue(获取消息队列)、Enqueue Message(消息入队)和 Dequeue Message(消息出队)。Create All Message Queues 函数一次性创建Main.vi 所需的所有消息队列,并以簇的形式将所有消息队列的引用打包输出。Obtain Message Queue 可以创建单一的消息队列。Enqueue Message 将一个或多个消息压入指定消息队列,这是一个多态 VI,可向指定队列一次性压入一个或多个消息,因而可以一次性发送多个连续的指令,这一特性在状态机设计模式中可以用于一次性指定后续的连续多个状态。消息入队时可选择消息入队优先级,低优先级入队,是将消息压

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开