博客写作背景----项目中解决的问题
最近遇到一个基于TCP/IP网络的远程智能物联网系统,采用Arduino Uno控制器作为下位机,采用LabVIEW作为远程监控软件,两者通过网络实现通信。初步定为使用labview编写上位机程序进行处理。为啥用labview呢,因为LabVIEW是美国国家仪器公司(NI)的创新软件产品,其全称是实验室虚拟仪器工程平台(Laboratory Virtual Instrument Engineering Workbench),是一种基于G语言(Graphics Language,图形化编程语言)的测试系统软件开发平台。LabVIEW并不局限于虚拟仪器的开发,它的作用是为大型复杂测试系统提供通用的软件开发平台。目前,LabVIEW已经成为测试领域应用最广泛和最有前途的软件开发平台之一。
- 项目中解决的问题
于TCP/IP网络的远程智能物联网系统,采用Arduino Uno控制器作为下位机,采用LabVIEW作为远程监控软件,两者通过网络实现通信。
- 做题思路
提示:LabVIEW上位机部分需要完成以下功能:1)当家用电器的开关触发时,向下位机Arduino控制器发送指定厨房电器的状态切换命令,Arduino控制器通过W5100模块读取上位机的命令,进而控制固态继电器模组的闭合和断开,实现指定家用电器的打开/关闭;2)当前面板无操作而超时1秒时,依次向下位机Arduino控制器发送温度、煤气浓度、热释电传感器的读取命令,Arduino控制器通过W5100模块读取上位机的命令,读取所需的数据并通过W5100模块上传至LabVIEW上位机软件显示。LabVIEW前面板分为仪表盘显示、波形图显示和电器开关等部分,仪表盘部分用于显示当前的煤气浓度;波形图显示部分用于显示温度的变化趋势;电器开关部分用于控制各路电器的工作状态。同时,右下角的防盗指示灯显示热释电传感器的状态。远程家庭监控系统的LabVIEW上位机前面板如图所示。
2.LabVIEW程序框图设计
采用事件结构+超时结构来实现测量和控制两部分,在测量中使用条件结构+枚举的状态机来实现温度、气体浓度和热释电传感器数据的读取,将测量程序划分为3个状态:温度测量、气体检测和防盗指示。
为了更好地实现通信,制定如下的通信协议:帧头+操作码。0x55AA为帧头,操作码0x80为热释电传感器数据的采集,0x81为气体浓度的采集,0x82为温度采集,0x11为第一路继电器闭合,0x10为第一路继电器断开,0x21为第二路继电器闭合,0x20为第二路继电器断开,0x31为第三路继电器闭合,0x30为第三路继电器断开,0x41为第四路继电器闭合,0x40为第四路继电器断开。
LabVIEW上位机超时部分的程序框图如图
在将程序烧写到Arduino Uno控制器之后,用网线将W5100网络模块与计算机连接在同一个路由器的不同的LAN接口,在LabVIEW程序中使用“高亮执行代码”,观察TCP初始化能否成功。如不能,则重启Arduino Uno控制器。另外,在Arduino Uno控制器一端的路由器需要直接与公网相连接,而不是作为二级路由,同时需要设置路由器,使得Arduino Uno控制器的网络IP地址能够被远程的LabVIEW软件所侦听到。