周 欣,王宜怀,姚望舒,葛新越
(苏州大学 计算机科学与技术学院,江苏 苏州 215006)
随着窄带物联网(narrow band internet of things,NB-IoT)[1]基站的广泛部署,相应的物联网监控系统也逐步增多,如文献[2]和文献[3]将NB-IoT应用于智能抄表领域,文献[4]和文献[5]针对智能农业场景。这类以数据采集为主,简单控制为辅的测控系统,其功能存在一定相似性,每次研发一套完整的应用系统会造成重复工作,且开发周期较长。文献[6]中设计了一种面向物联网应用系统,为NB-IoT应用系统的开发提供方法。但各类物联网应用开发过程涉及内容较多,包含终端程序、应用服务器及人机交互系统的感知、计算、通信等功能的实现,开发难度较大,且整体系统的适应性与灵活性无法满足日益变化的用户需求。组态软件以配置的形式灵活组合各功能模块,生成适合不同用户需求的应用软件,具有易于开发、便于扩展的特点。
基于上述情况,本文在使用NB-IoT进行通信的嵌入式测控系统的基础上,引入组态的思想,提出一种对流程、数据与界面进行配置开发的低成本、高通用性、高可靠性的智能监控软件开发方法。该方法对终端节点、应用服务器、人机交互系统的数据采集、实时控制、嵌入式通信、数据处理等功能进行配置,使其适用性与灵活性得以加强。用户可以通过修改配置触发动态配置,做到快速开发,同时也减少了直接更改软件的风险。
本文使用的NB-IoT测控系统总体架构如图1所示,由NB-IoT终端节点、NB-IoT基站、蜂窝物联核心网、IoT业务平台、应用服务器及人机交互系统组成。其中NB-IoT基站、蜂窝物联核心网和IoT业务平台由运营商负责管理维护,主要负责部署站点,优化通信接口和为应用层提供相关服务。
图1 NB-IoT测控系统总体架构
NB-IoT终端节点、应用服务器和人机交互系统作为测控系统的主要部分,由系统开发者负责功能设计与实现,各部分之间相互配合完成数据采集、传输、显示和控制的功能。NB-IoT终端节点采集信息发送到应用服务器存储,用户通过人机交互系统进行数据查看,也可通过人机交互系统发送控制命令,由终端节点解析后对执行机构进行控制。
在NB-IoT测控系统架构中引入组态的思想,对NB-IoT终端节点、应用服务器和人机交互系统进行可配置开发,形成了一种基于组态和NB-IoT通信的可配置开发软件(NB-IoT embedded configuration software,NB-ECS)。NB-ECS架构如图2所示,分为组态开发平台和运行平台两个部分。
图2 基于NB-IoT的可配置软件架构
(1)组态开发平台
组态开发平台是可配置软件架构的核心部分,负责提供对数据、界面、流程的可配置服务,包括对终端接入传感器与执行机构的引脚功能配置、控制关系配置、设备信息配置;对应用服务器与人交互系统构成的监控软件进行数据配置、功能界面配置与用户信息配置,具有较强的可配置功能,能够适用于大多数简单监控场景。
(2)运行平台
运行平台包含NB-IoT终端节点、应用服务程序与人机交互系统的运行环境与程序,通过组态开发平台对各个部分进行配置,运行平台中的各部分内容通过加载相应的配置信息完成功能的初始化与运行,形成一套完整的NB-IoT测控系统架构。
针对NB-ECS架构的可配置特性,结合监控软件的功能需求,对NB-IoT终端节点、组态开发平台、监控平台及数据通信协议进行设计开发。在此框架下,测控系统由组态开发平台完成功能配置生成相应的应用软件,下载至对应的运行环境中运行。同时运行状态下,具备一定的可配置功能,配合不同的通信命令实现配置信息的动态更新。
NB-IoT终端节点的硬件部分由主控芯片最小系统、NB-IoT通信模组外围电路,传感器接口和其它辅助电路组成,与接入传感器一同构成具有信息采集控制功能的硬件实体,如图3所示。
图3 NB-IoT终端硬件实体
主控芯片最小系统为芯片提供电源、晶振、写入等服务,保证芯片的运行;通信模组外围电路包含电源模块,eSIM卡电路和GNSS天线电路,并利用电平转换电路与主控芯片通过UART通信方式连接;主控芯片通过ADC、GPIO、PWM等接口电路对外提供引脚服务,与传感器和执行机构进行连接,完成数据的采样与控制功能,本文采用USB接口的形式便于传感器的自由组合。
主控芯片提供软件服务,负责数据采集、运算和控制等操作,并能配合相应的命令实现参数的动态可配置。针对以上功能,将主控芯片的Flash区分为4个部分:BootLoader区、用户代码区、更新代码区和配置信息区。BootLoader区作为驻留在主控芯片中具有一定的硬件设备启动及程序跳转功能,能与更新代码区配合实现对用户程序的更新。用户代码区是用户应用程序的存储区域,与配置信息区相互配合,实现终端节点的可配置及数据采集控制等功能。
用户程序作为终端节点软件的核心模块,其主程序运行流程如图4所示。初始配置参数通过组态开发平台存储在对应Flash区域(即配置信息区),芯片启动后读取位于该区域中的配置信息,并对相关硬件模块初始化和中断使能,随后进入NB-IoT通信模块的启动,获取IMSI号,建立与基站及服务器的连接;启动完毕后,进入主循环。主循环按照其数据采集、运算、控制和动态配置的功能,可划分成6个任务:
(1)采集任务:随着定时器中断计时达到设定时间,执行该任务。该任务中,依次使用配置的传感器对外界环境进行检测,例如对温湿度、开关状态等模拟量与开关量的输入状态进行采集,并保存相应的采集结果。
(2)LCD显示任务:针对需要使用LCD进行屏幕显示的应用,支持LCD显示功能,将采集信息与控制状态显示在LCD屏幕上。
(3)通信发送任务:使用NB-IoT作为通信方式,将当前采集信息、控制状态等数据进行组帧,发送至应用服务器进行数据库存储与显示。
(4)通信解析任务:随着数据接收中断接收到完整数据帧,在此任务中进行数据帧解析,根据不同命令执行控制任务或参数配置更新任务。
(5)控制任务:分为自动控制和远程控制两种,自动控制时可根据预先设置的控制关系,依照采集信息,对相应的执行机构进行控制;也可根据数据帧解析结果对执行机构进行远程调控。
(6)参数配置更新任务:作为动态可配置功能的主要执行部分,此任务可根据解析的数据对各类参数进行动态的更新,并存入配置信息区保存,使得在程序运行过程中,兼具数据采集和参数可配置功能。
图4 用户主程序运行流程
除上述任务之外还包括两个中断服务例程:
(1)定时器中断:用于计时,提供时间节拍,并为采集任务的执行提供服务;
(2)数据接收中断:NB-IoT通信模组与UART之间通过AT指令进行通信,利用UART接收中断完成数据接收与组帧操作,为通信解析任务提供服务。
各任务与中断服务例程的相互配合,保证用户程序的运行。根据终端节点的运行流程,对终端节点的可配置信息进行定义,结构体关系如图5所示,包含设备信息与控制逻辑两部分。设备信息结构体较为简单,是对节点名称、网络服务地址等进行描述,该字段用于网络连接地址设置和存储设备唯一标识,用于区分不同节点;控制逻辑由多个结构体嵌套组成,表示的是传感器与执行机构的模块属性及其之间的控制关系,涉及各类开关量与模拟量对应采集变量名称以及运行状态范围。通过组态开发平台进行参数配置,各参数值预先存储在相应的Flash区域中,结合用户代码实现嵌入式终端节点的可配置开发以及配置参数的动态修改。
2.2.1 交互界面设计
组态开发平台按照NB-ECS结构分为嵌入式配置与监控软件配置,使用Microsoft Visual Studio作为开发工具进行C# WinForm应用窗体的开发,借助WeifenLuo.WinFormsUI.Docking实现多界面的组合布局,界面按照图6划分成4个部分,具体功能与实现如下:
图5 组态信息结构体
图6 组态开发平台配置界面
(1)工具栏窗体。用于各类可配置模块的展示,通过选择对应的模块完成相应的配置。根据测控系统的一般功能,按照终端节点与监控平台进行区分,提取不同类型的可配置模块,如开关量输入配置、模拟量输出配置、控制关系、通信连接等。
以TreeView控件作为展示平台生成相应的可配置参数列表、终端节点与监控平台作为控件父节点,各可配置模块作为子节点,以图元的形式呈现。每个图元模块包含模块名称、父节点分类,显示图标、单击事件和对应可配置窗体。当选择对应的可配置模块时触发相应的窗体创建事件,进行参数的配置。
(2)已配置信息窗体。在工具栏中选择的模块完成配置后,配置信息会显示在已配置信息区。除此之外,还可以对已配置内容进行编辑修改。
(3)程序代码或配置文件窗体。在完成配置后会自动生成相应的配置文件或程序代码,对应文件将显示在此窗体中,配置模式下不可被手动修改。
(4)信息输出窗体。用于状态提示,可以显示运行状态、编译生成状态信息等信息。
通过上述组态开发平台各部分窗体的相互配合,可完成对具体项目及功能的配置,而项目相关的配置信息也会存储在对应的配置文件中。
2.2.2 配置文件存储格式
嵌入式端的配置信息在组态开发平台中通过JSON文件按照键值对的方式存储,结构较为简单,易于解析[7]。不同芯片引脚及其可复用功能存在差异,pin.json文件记录芯片型号、各引脚编号与引脚可复用功能,并保存当前引脚使用状态,其对应格式如图7所示。
图7 pin.json文件配置格式
当选择工具栏中对应的开关量输入与输出,模拟量输入与输出模块时,根据引脚是否被使用状态(use字段)及可复用功能(fun字段),与模块名称对比,筛选出相应的可配置引脚,配置成功后设置该引脚use字段为使用。
同时已配置信息窗体对应的控制逻辑关系数据使用配置参数文件config.json记录,其结构如图8所示,对已配置引脚及其属性、控制关系、设备信息等进行保存。与pin.json文件相互配合,构成终端节点相应的可配置数据,实现引脚功能的可复用与可配置,也实现了终端节点功能、流程的可配置。
图8 config.json文件配置格式
上述JSON文件用于在当前开发平台中保存可配置信息,实际配置信息在相应编译后按照相应结构体存储在终端节点对应的Flash区域中,也可在运行过程中进行动态的修改。
服务器端程序和人机交互系统组成的监控软件的可配置信息由工程样式、通信连接设置、监听设备、通信命令帧、数据类型定义5个部分。
(1)窗体/工程样式。存储简单设置窗体名称、图标与设定样式;
(2)通信连接设置。存储服务器连接地址,由服务器IP和端口号构成。服务器程序使用不同的端口区分服务,对应于使用不同的通信协议与终端节点与人际交互系统进行通信,分别使用HCIComTarget和WebsocketTarget作为标签进行区分。终端节点与人机交互系统分别使用设定地址进行连接;
(3)监听设备。存储终端节点的唯一标识——IMSI号,表明当前程序侦听的终端设备;
(4)通信命令帧。存储本程序使用的通信命令,不同通信命令的数据格式存在不同,通过此处进行定义数据帧各字段内容,便于区分与解析;
(5)数据类型定义。是对通信命令帧的补充,对通信命令中的各字段的详细信息进行定义,包含多个标签,如字段变量名称、变量显示名称、数据类型、可读可写状态。各标签之前为并列关系,可进行动态的删减,配合进行数据的可配置。
上述信息使用XML文件进行存储,具有结构化和可扩展的特点,并可进行标签的自定义[8],有助于数据节点的定义和动态增减,输出的文件存储格式如图9所示。服务器程序根据XML文件进行动态解析,实现对服务器数据库存储格式,界面显示设置以及数据可视化显示等的动态修改,与通信协议相互配合实现了数据传输和界面显示的可配置。
图9 监控系统XML文件配置格式
监控平台是对终端采集数据进行存储与显示的软件,服务器程序在接收到来自终端节点发送的数据,解析后按照预定格式写入数据库,并将相关数据发送至连接的人机交互系统显示。作为监控软件的核心部分,数据库中各数据表通过XML文件进行完善,各数据表名称与功能见表1。
表1 数据
对XML文件的数据类型定义字段进行解析提取,将预先设定的变量名称、变量类型等信息存储写入数据属性表中。该数据表内容可随配置数据进行动态修改,保证与通信命令一致。并利用横纵表转换存储[9]的方式,自动完成上行数据表、下行数据表及采样数据表的创建。
数据可配置的实现,也确定了人机交互系统的数据界面的动态可配置。人机交互系统通过获取服务器程序发送的数据,解析生成相应的界面并进行数据的动态显示,从而实现了界面的可配置。
数据在终端节点、组态开发平台与监控平台之间进行传递。终端节点的传感器采集信息与执行机构执行情况在主控芯片进行整合,并通过通信模组发送至服务器端,再由服务器端进行数据推送给相应的人机交互系统。组态开发平台的配置信息及人机交互系统返回的信息都将发送至服务器端解析,再返回给终端节点,完成配置或控制功能。对应于通信流程中的不同的阶段使用不同的通信方式及数据格式。
终端节点使用NB-IoT通信方式,始终与服务器程序进行连接。其主要数据帧格式如图10所示。
图10 终端程序数据帧格式
帧头、帧尾各为两字节,确定一帧数据的开始与结束;帧长为不包含帧头、帧长、CRC校验、帧尾字段的数据长度,由于NB-IoT通信模组限制,单帧数据长度在500字节以内(即N不超过500字节);CRC校验位的使用保证数据的完整性与准确性;命令、IMSI号、服务器IP、服务器端口及发送时间为通信固定字段。根据不同的命令,对应于不同的数据帧,其数据字段携带信息存在差异,一共分为4种情况。
“U0”,采集数据发送帧,数据由终端节点发送至服务器端,携带传感器采集信息及执行结构当前执行状态,以JSON数据格式存储,转换成字节数组存放在数据字段,由服务器程序完成数据解析与存储。
“U1”,数据回发帧,由服务器端发送至终端节点,是对采集数据发送帧的反馈,用户或服务器程序依据数据分析决定是否对当前控制状态进行调整,数据同样以JSON格式存在数据字段。
“C0”,信息配置帧,由服务器端发送至终端节点,组态开发平台生成的配置信息发送至服务器端后,服务器端按照终端节点组态信息结构体生成数据字段,终端节点解析后完成对可配置参数的更新。
“C1”,设备信息帧,由服务器端发送至终端节点,组态开发平台生成的设备信息发送至服务器端后,按照终端节点设备信息结构体生成数据字段,终端节点解析后,完成对设备信息的更新。
服务器端与组态开发平台,人机交互系统之间使用WebSocket[10]通信方式,其消息推送功能,能够保证数据的实时传输,而JSON数据格式的使用则实现了数据传输的动态性。其数据格式如图11所示,包含命令名称、数据发送方、数据接收方、传输密码、实际数据等内容。通过对命令名称区分组态开发平台的数据配置命令,或人机交互系统与服务器程序之间的数据交互命令。并可根据数据字段完成界面显示文本框的动态创建,或数据可视化分析等。
图11 数据格式
使用基于NB-ECS框架开发出来的组态开发平台,能够较好实现可配置开发,目前已应用于某智能农业项目中,对农业大棚的墒情进行检测。
农业大棚的墒情检测反应土壤含水量的多寡,受到光照强度、大气温度、土壤湿度等因素的影响,对于不同农作物,其生存条件也存在差异,为向农作物提供适宜的生存环境,提高农作物的产量,选取如表2所示的传感器与执行机构,对农作物的生长环境进行实时检测,并根据检测结果进行调整,保证农作物的生长。
表2 传感器与执行机构
针对上述农业应用场景,将组态开发平台、应用服务器程序与人机交互系统均运行于Windows操作系统中。终端节点使用ARM Cortex M4F内核的低功耗芯片STM32L431Rc,其对应的Flash为256 K,RAM大小为64 K[11],并具有丰富的通用I/O接口。选用ME3616作为NB-IoT通信模组,支持串口AT指令、支持TCP、UDP、MQTT和COAP协议,具有高性能和低功耗等特点[12]。
依据相应传感器与执行机构选型,选择合适的引脚接入终端节点,并使用组态开发平台对各传感器与执行机构进行引脚功能和控制关系的配置,并设置采集数据名称,如环境温度、土壤湿度等。将配置完成的软硬件实体安装至对应的运行环境中,其监控界面如图12所示。实验运行过程中,可根据农作物需求修改传感器设定的阈值参数,保证作物处于合适环境下,也可增加如二氧化碳浓度、土壤pH值检测的传感器,增加对环境状态的检测与调节。长时间的运行实验结果表明,该组态软件开发的嵌入式监控系统可以根据不同农业检测目标进行调整,快速应用于不同的农业场景中。
在对如工厂环境、水质状态等应用场景进行监测时,也可依据需求进行传感器与执行机构的选择与接入,利用NB-ECS组态开发平台进行配置开发,同样能做到监控系统的快速开发与应用,体现了本文所述的配置软件的普适性。
图12 监控界面
本文提出一种面向NB-IoT测控系统的可配置软件开发方法,在NB-IoT测控系统框架的基础上引入组态的思想,对终端节点、应用服务器、人机交互系统进行可配置开发。并阐述了终端节点的运行流程、数据结构与存储形式,组态开发平台的可配置文件存储,监控软件的数据库设计与界面生成,通信协议等的实现方法,从而完成对基于 NB-IoT 的测控软件的流程、界面和数据的可配置,在不重新编写程序的情况下,简化软件开发过程。最后以智能农业的可配置开发为例,验证该开发方法的可行性和通用性。实验结果表明,运用该方法开发的NB-IoT嵌入式监控软件能够满足多变的用户需求,也能提高开发效率,具有一定的通用性。