无线智能照明系统ARM客户端软件的设计
eeskill 2021-09-15

基于物联网的照明控制系统以ZigBee、单片机、传感器、C#和PHP程序设计为主要技术手段,包括照明控制单元、ZigBee无线传输层(含网关)、PC展示及控制层3个层次的现场控制单元、CC2430无线传输网络、ARM网关硬件单元、ARM网关客户端软件、基于C#的服务端软件、基于PHP的展示软件等6个子系统,用于实现一套模拟城市照明控制系统。

本课题首先规划了WSN协调器与ARM网关的串口通讯协议及ARM客户端与PC服务端的TCP/IP通讯协议.然后基于Windows CE 6.0操作系统,运用C#编程语言开发了ARM的客户端软件。经测试,客户端软件实现了按规划的协议将协调器上传数据发往服务端和将服务端下发数据发往协调器的功能,性能稳定,具有一定的实用价值。

1 需求分析

1.1 物联网照明控制系统的组成及工作过程

1.1.1 系统组成

物联网照明控制系统由感知层子系统、传输层子系统、应用层子系统三个部分组成,如图1所示。其中,感知层子系统由开关量照明控制节点组成。传输层子系统包括基于CC2430的ZigBee无线传输网和基于TCP/IP的局域网传输网。应用层子程序系统由运行于服务器上的服务端软件及其它展示软件组成,本系统包括Web展示软件和服务器Server软件。如图1所示。

1.1.2 系统运行过程

在物联网照明控制系统中,所有感知层节点的控制指令均由应用层子系统通过服务端下发给传输层ARM网关客户端,然后由ARM处理器通过串口下发给CC2430协调器,再由后者通过ZigBee无线网络下发给CC2430终端节点。执行的操作指令主要包括注册网络、获取网络参数、下发控制指令等3个方面。

1)注册网络

系统启动后,CC2430协调器首先建立无线网络,路由器和终端节点在发现网络后,会主动加入网络,并上传网络参数(物理地址、网络地址、节点类型等)。

2)获取网络参数

系统运行中,为及时发现掉线节点,系统会周期性去询问节点,要求返回网络参数。获取网络参数的流程。

3)下发控制指令

当需要改变各被控对象的运行状态时,系统就需要下发各类控制指令。

1.2 ARM客户端软件的功能需求分析

ARM网关是传输层子系统的核心设备,主要完成数据转发、协议转换、命令代理和映射、本地存储等功能,支持无线传感器网络内部数据协同和汇聚,支持ZigBee接入、TCP /IP网络接入,从而桥接无线传感器网络与互联网。

ARM客户端软件主要用于实现接收ZigBee无线传感网络协调器上传的数据,然后发送到服务器。同时,对于服务器下发的一些控制命令进行解析,并通过串口传输到无线网络的协调器。

ARM网关整体上采用分层设计方案,体系结构如图1所示。硬件部分主要包括ZigBee通信节点、S3C2440 ARM主控模块、USB及网络等外设模块。软件部分包括软件支持层、应用层。图2中,软件支持层由硬件驱动、Windows CE操作系统以及支持Z—Stack的协议栈等构成。应用层由地址适配层、应用协议层、业务逻辑应用程序三部分构成,地址适配层用于Zigbee地址和以太网IP地址与应用层地址的映射,应用协议层是用于规范节点通信的数据帧格式,二者相互配合可实现节点间数据的透明传输。

本课题所需开发的是软件部分的应用层软件,涉及协议转换、数据转发、人机交互等功能,宜采用软件设计中的三层架构进行软件开发。所谓三层架构,是指数据访问层、业务逻辑层以及窗体表示层。本课题主要涉及业务逻辑层和窗体表示层的设计与功能实现。

2 通信协议规划

2.1 通信协议规划原则

1)透明传输,将控制与传输分离。协议的规划不宜采用按功能方式规划,而应采用分层方式实施,以便明确边界。对于本系统而言,整个协议从下自上为分三层,如图3所示。

2)本系统WSN类型节点由协调器、路由器、传感器节点三种组成,拓扑结构有树状形、星形网络等。由于本系统控制点不多、分布范围较窄,故采用星形网络拓扑结构。支持

ZigBee无线网广播、点对点通信。

2.2 ARM网关通讯协议详细帧格式规划

ARM网关通讯协议详细帧格式规划包括注册网络、获取网络参数、返回网络参数、下发操作指令、上传操作结果等协议的规划。

1)注册网络通讯协议

注册网络是指当终端节点或路由器新加入网络后,主动向上级节点发送源节点网络参数的过程。从信息流向来看,注册网络的信息是由CC2430终端节点出发,经协调器转发至PC。

2)获取网络参数通讯协议

获取网络参数是PC根据人机交互需要,通过WSN协调器下发获取网络参数指令,终端节点或路由器收到指令后,向上级节点返回源节点的网络参数。本系统中只有当节点自动注册网络失败时,才从服务器手动发送指令获取节点网络参数。从信息流向来看获取网络参数包括从PC到客户端,再由客户端发往协调器,最终到路由器和终端节点的下行发送指令,以及上行返回网络参数两个方面。

3)返回网络参数通讯协议

当节点收到由客户端转发来自服务端的获取网络指令后,自动向客户端返回节点的网络参数,再由客户端向服务端返回数据。

4)下发操作指令通讯协议

本系统中PC下发控制指令,是通过WSN协调器下发开灯或关灯指令,终端节点或路由器收到指令后,向上级节点返回源节点的执行结果。从信号流向来看,指令是由PC发出,经串口发送到客户端,再由客户端经串口将指令送入WSN协调器,然后下发到终端节点。

5)上传操作结果通讯协议

本系统中控制上传控制指令,是通过WSN协调器上传到PC下发选择开灯或关灯指令,终端节点或路由器收到指令后,向上级节点返回源节点的执行结果(包括提取到的温度、湿度以及灯光亮度参数)。从信号流向来看,指令是由PC发出,经串口送入WSN协调器,然后下发到终端节点,再经串口传输到单片机。

3 ARM客户端软件设计

3.1 业务逻辑层的设计

业务逻辑层涉及数据处理SerialPortClass.cs,包括搜寻设备可用的串口、打开串口、关闭串口、下发指令并接收数据4种方法。对应方法如表1所示。

3.2 业务逻辑层的功能实现

1)SearchSerialPorts方法

该方法主要用于搜寻设备可用串口,其详细代码如下:

2)OpenSerialPort方法

该方法主要用于打开串口,该方法先判断串口是否已经打开(0-打开串口成功;1-串口被占用;2-打开串口异常;3-打开串口失败;),然后在串口未被占用的情况下,打开串口。

3)CloseSeriaIPort方法

该方法主要用于关闭串口,该方法先判断串口是否已经打开(串口未打开,无需关闭),然后在串口已打开情况下,关闭串口(0-关闭串口成功;1-串口未打开;2-关闭串口失败;3-关闭串口异常。

4)SendDataToPort方法

该方法主要用于下发指令并接收数据,定义一个byte[]类型封装变量cmd,首先判断串口是否打开。若打开,则通过第一个默认通道发送cmd,并返回true,若未打开,直接返回false。

3.3 窗体表示层的设计

1)添加窗体文件并设计窗体

窗体表示层的设计,在设计器中选择“项目→添加Windons窗体”,打开“添加新项”对话框。选择“Windons”模板,添加frmClient.cs窗体,根据需求设计frmClient.cs窗体,如图4所示。

2)frmClient窗体代码文件(frmClient.cs)的结构

在frmClient.cs中,首先需要定义一些全局变量,实例化有关公共对象,然后编写诸如连接设备(串口)、断开设备(串口)、接收数据、转发数据等事件的处理方法。

3.4 窗体表示层的功能实现

1)frmClient_Load事件处理方法

在frmClient窗体加载事件处理过程中,需搜寻并获取当前可用串口号写入ComboBox控件cbbSerialPort的Items中并显示,并设置默认的波特率。其中,通过调用业务逻辑层的Get_Ports方法获取可用串口。

2)btnConnectCoor_Click事件处理方法

该方法用于连接协调器,首先提取串口名称、波特率,然后实例化一个串口操作对象并调用业务逻辑层OpenSerialPort方法打开串口,如果打开串口成功,则为已经打开的串口添加DataReceived事件并设置串口连接。如果打开串口不成功,则进行错误提示。

3)btnClosePort_Click事件处理方法

该方法用于断开协调器,首先实例化一个串口操作类对象,然后调用业务逻辑层CloseSerialPort方法关闭串口,如果关闭串口成功,则设置串口连接。如果关闭串口不成功,则进行错误提示。

4)btnStartListen_Click事件处理方法

该事件执行启动上传功能,要实现该操作需先实例化客户端和网络数据流,再连接服务端,通过调用SendMessage方法将网关接入到服务器,并通过串口上传数据到服务器,同时调用ReceiveMessage方法接收来自服务器发向协调器的指令。

5)btnStopListen_Click事件处理方法

该事件执行停止上传功能,关闭客户端与服务器之间的传输,并断开网关接与服务器。

6)btnSendToServer_Click事件处理方法

该事件执行手动上传功能,通过调用SendMessage方法手动向服务端上传网关配置。

7)btnCleaeWSN_Click事件处理方法该事件执行清空WSN无线网络消息的功能。

8)btnClearTcpIP_Click事件处理方法该事件执行清空TCP/IP局域网消息功能。

4 系统测试

4.1 ARM网关客服端软件功能测试

利用VS20005软件生成SmartHomeClient.exe应用文件,然后连接WinCE6.0,利用同步软件将SmartHomeClient.exe应用文件复制到WinCE 6.0操作平台,然后打开在Win CE6.0操作平台中打开SmartHomeClient.exe应用文件。如图5所示。然后连接协调器和服务端,开启“启动上传”按钮,协调器向服务端上传节点数据,服务端下发操作指令,观察网关是否有数据传输。

4.2 系统调试

1)连接服务器

在服务端打开的情况下,开启“启动上传”,连接服务器成功则提示“接入服务器”,并在lbServerMsg中显示来自服务器的信息。

2)组网

在已连接协调器和服务器的情况下,复位节点,通过协调器向网关发送节点信息,再由网关将节点信息转发至服务器,进行组网。

3)服务器下发操作指令

服务器通过网关向协调器发送开灯指令,在已经开灯的情况下,服务器通过网关向协调器发送光照、湿度、温度采集指令。

经测试本系统网关客户端软件,实现了数据的上传和下发功能,达到了设计目的。

5 结束语

本文研究利用ZigBee无线通信技术组建无线网络,并将其使用于教室、走廊、街道的智能照明控制系统中。无线智能照明系统的设计是为了对建筑的照明设备实现集中统一的管理,将建筑的照明设备按场景分类进行控制,并根据室外光照调节照明设备的照度,从而,使建筑以及室内室外都有一个良好的光环境,并能够尽可能的节约能源。在智能照明控制系统中,使用无线通信的方式,可以避免有线电缆的铺设,降低了系统的安装成本与安装难度,同时也便于系统的移动,即可以整体的搬迁至另外的环境中进行使用,这样又在另一层面降低了系统的成本,以及缩短了系统回收利润的时间。为了达到系统所需要的功能与要求,在本设计中利用了成都无线龙公司的无线单片机系统作为系统的硬件开发平台,对系统中的节点设备进行了设计,完成了网络协调器、路由器控制终端设备以及其他网络节点的原理图设计。同时利用软件开发平台IAR环境,进行了系统的主程序设计,以及主程序流程图的绘制。利用Micresoft Visual Studio 2005开发环境对控制系统的设计制作,实现了真正的智能化。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
热门推荐
  • 相关技术文库
  • C语言
  • 编程
  • 软件开发
  • 程序
  • 10种排序算法C语言展示

    以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要。 排序算法 平均时间复杂度 最差时间复杂度 空间复杂度 数据对象稳定性 冒泡排序 O(n2) O(n2) O(1) 稳定 选择排序 O(n2) O(n2) O(1) 数

    05-11
  • 嵌入式驱动开发四个方向

    嵌入式大体分为以下四个方向: 一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。熟练掌握嵌入式硬件知识,熟悉硬件开发模式和设计模式,熟悉ARM32位处理器嵌入式硬件平台开发、并具备产品开发经验。精通

    05-06
  • Python“常用”代码片段

    整理的一些“常用”代码片段,分享给大家。 1、冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport(): for i in range(len(lis)-1): for j in range(len(lis)-1-i): if lis[j] > lis[j+1]: lis[j],lis[j+1] = lis[j+1],lis[j] retur

    05-06
  • 嵌入式术语中英文对照表

    ▎ A ASIC(专用集成电路) Application-Specific Integrated Circuit. A piece of custom-designed hardware in a chip. 专用集成电路。一个在一个芯片上定制设计的硬件。 address bus (地址总线) A set of electrical lines connected to the processor a

    05-07
  • C语言的十条杀手锏

    我们平常所说的执行效率就是使用相同的算法在相同输入条件下完成相同计算所产生的系统开销,目前来说一般会更多关注执行时间方面的开销。所有语言编写的代码最终要运行,都要转化成机器码。在更短的时间内完成相同的事那么效率就高。 下面说说如何提高C语言程

    04-30
  • Matlab用于二维图形绘制

    续上篇Matlab系列篇的二维图形,本篇将完成剩下二维图形部分篇章..... 交互式绘图 交互式绘图的意思就是可以使用鼠标对图形进行操作,具体的实现看待会的演示,首先了解几个会用到的函数:ginput、gtext和zoom,其中ginput只能用于二维图形绘制,另外两个还适

    04-28
  • 用Python 快速把物料编码快速匹配到BOM 里

    我们在处整理BOM时,有一件比较麻烦的工作,就是要从物料库里找到对应的元器件的物料编码并填入BOM中。我们通常的做法就是在物料库里每种物料逐一搜索,把对应的元器件的物料编码找出来,并填到BOM里。这种工作虽然没什么难度,但是如果BOM的元器件种类很多,

    04-21
  • 程序世界:线性代数是一种特定语言

    线性代数是什么? 在大学数学学科中,线性代数是最为抽象的一门课,从初等数学到线性代数的思维跨度比微积分和概率统计要大得多。很多人学过以后一直停留在知其然不知 其所以然的阶段,若干年之后接触图形编程或机器学习等领域才发现线性代数的应用无处不在,

    04-19
  • 一个故事讲什么是卷积

    引子 很多朋友和我一样,工科电子类专业,学了一堆信号方面的课,什么都没学懂,背了公式考了试,然后毕业了。 先说"卷积有什么用"这个问题。(有人抢答,"卷积"是为了学习"信号与系统"这门课的后续章节而存在的。我大吼一声,把他拖出去枪毙!) 讲一个故事:

    03-29
  • C语言函数为什么不能返回数组?

    C语言函数为什么不能返回数组? 在C语言程序开发中,我们不可以编写下面这样的代码: char f(void)[8] {char ret;// ...fill...return ret;}int main(int argc, char ** argv) {char obj_a[10]; obj_a = f();} 不可以编写这样的代码 这其实就是不能在C语言函

    03-15
  • 初学C语言,你的“行囊”需要准备什么呢?

    今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人: 克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的; 是他们发现了我们可以利用一个预先

    03-15
  • 如何让ARM代码执行速度更快?

    通过一定的风格来编写C程序,可以帮助C编译器生成执行速度更快的ARM代码。下面就是一些与性能相关的关键点: 1.对局部变量、函数参数和返回值要使用signed和unsigned int类型。这样可以避免类型转换,而且可高效地使用ARM的32位数据操作指令。 2.最高效的循环

    03-12
下载排行榜
更多
广告
X
广告