灌溉系统辅助开发平台的设计与实现

2022-01-24 07:10任崇浩张继军
关键词:灌溉系统模拟器线程

任崇浩,张继军

灌溉系统辅助开发平台的设计与实现

任崇浩,张继军*

山东农业大学信息科学与工程学院, 山东 泰安 271018

针对灌溉系统项目受限于硬件环境导致开发效率低的问题,基于Aardio语言和SQLite数据库,采用MVC设计模式及多线程技术,面向客户端/服务器架构灌溉系统,设计了可提供虚拟测试环境的辅助开发平台。首先分析了客户端/服务器架构灌溉系统的组网特点以及平台功能的实现原理,然后依据上述分析设计了虚拟硬件模型、虚拟硬件数据库及硬件环境模拟器,最后完成平台构建并将其应用于某灌溉系统项目的开发。经测试,平台可实现对传感控制设备输入输出特性的模拟,减少开发人员对真实硬件环境的依赖,提高开发效率与灵活性。

灌溉系统; 平台开发; 软件设计

随着物联网技术的日益普及,以灌溉系统为代表的农业信息化系统正逐步发展,为传统的农业灌溉提供了信息化手段,提高了生产效率,节省了水利资源。由于此类项目的开发及部署需要依赖硬件设备环境,因此存在开发环境搭建复杂、问题排查困难、开发灵活性差等问题。

针对上述问题,目前有两种解决方案:第一种方案是采用Mock技术,例如基于Java的JMock,基于C++的Google Mock和Cpputest等技术[1-3]。这些技术通过伪造接口的方式辅助项目的开发与测试,仅适用于与其采用同种编程语言的项目。由于伪造的接口与项目存在耦合,且不同项目采用的编程语言或技术有所不同[4,5],因此Mock技术缺乏通用性,不适合作为首选方案。第二种方案是采用硬件环境模拟方法,主要分为三类:第一类是虚拟传感技术[6,7],实现难度大且缺少通用性;第二类是以Matlab为代表的硬件在环仿真和以LabVIEW为代表的虚拟仪器[8-10],仿真能力强但配置复杂,且属于商业产品,存在经济成本;第三类是用于辅助软件开发的虚拟硬件环境[11-15],多应用于特定领域,特别是用于嵌入式应用软件系统的开发。前两类研究倾向于“仿真”,而本文则属于第三类的研究,更关注对硬件环境输入输出特性的模拟。

基于上述分析,提出一种面向客户端/服务器(C/S)架构灌溉系统的辅助开发平台(Auxiliary Development Platform,简称ADP),通过模拟灌溉系统所需要的硬件环境输入输出(I/O)特性,为灌溉系统的开发提供虚拟测试环境,提高开发效率和灵活性。

1 ADP原理与总体设计

1.1 ADP原理

C/S架构灌溉系统运行在基于网络路由器组建的局域网中,通过TCP/IP通信远程控制硬件设备(例如继电器、各类相关的传感器等,我们统称为“被控硬件设备”),从而实现对灌溉环境的监控,一个灌溉系统的组网结构如图1所示。

图 1 灌溉系统组网结构

为了便于说明与描述,我们将“被控硬件设备”分为“主设备”和“子设备”两大类。主设备是指具有独立IP,可直接作为客户端的硬件设备,如串口服务器、网络继电器、网络传感器等;而子设备是指不具有独立IP,需依靠主设备中继才能与服务器通信的硬件设备,如普通传感器、普通继电器等。

我们将上述设备接收服务器指令并返回执行结果的过程称为响应。通常来说,存在两种响应路径:一是经过网络路由器和主设备,由子设备负责响应;二是经过网络路由器到达主设备,由网络继电器、网络传感器等主设备负责响应。由于服务器只关注响应结果,并不关心经过哪种路径,因此主设备与子设备的组合仍可视为主设备,如串口服务器与普通传感器的组合可视为网络传感器。这里称这类组合为“抽象主设备”,并与主设备统称为客户端,则响应路径可抽象为:经网络路由器至客户端,由客户端负责响应。如图2大括号左侧所示。

由于服务器根据IP识别客户端并进行通信,因此可利用本地环回网络作为虚拟局域网,并创建与真实客户端(主设备或抽象主设备)具有相同IP、端口及响应行为的虚拟客户端(统称虚拟硬件),从服务器的角度看,两种客户端没有实质区别,唯一的区别仅在于:前者的响应数据来源于真实硬件环境(如图2实线框区域所示),后者的响应数据来源于用户定义的响应规则(如图2虚线框区域所示)。基于上述原理,可构建ADP,使开发人员能够批量创建虚拟硬件以模拟真实硬件环境的I/O特性,实现虚拟测试环境,辅助灌溉系统的开发与测试。

图 2 ADP功能原理

1.2 ADP总体设计

ADP主要包括虚拟硬件模型、虚拟硬件数据库、硬件环境模拟器三大功能主体。虚拟硬件模型是一种可编程的、允许自定义响应规则的程序模板,分为通信层、翻译层和内核层(详细内容见第2节虚拟硬件模型的设计);虚拟硬件数据库用于存放用户定义的虚拟硬件数据,包括硬件数据表和规则模块表(详细内容见第3节虚拟硬件数据库的设计);硬件环境模拟器以虚拟硬件模型为依据,以虚拟硬件数据库内的硬件数据为基础,启动虚拟硬件实例并对其运行状态进行监控,分为运行环境层和数据交互层(详细内容见第4节硬件环境模拟器的设计)。ADP为功能主体提供可视化界面,主要包括读写虚拟硬件数据库、命令硬件环境模拟器启动或关闭虚拟硬件实例、接收硬件环境模拟器反馈的虚拟硬件运行状态等功能。总体设计如图3所示。

图 3 ADP总体设计

2 虚拟硬件模型的设计

虚拟硬件模型本质上是根据输入响应输出的映射。针对硬件设备指令及通信协议不统一的特点,为提高模型通用性,采用通信层(Message Layer,简称M层)、翻译层(Translation Layer,简称T层)、内核层(Core Layer,简称C层)三层架构模式,其中,M层负责消息转发,T层负责消息解码和编码,C层负责消息响应。具体结构流程如图4所示。

图 4 虚拟硬件模型结构流程图

为方便表述,定义为虚拟硬件输入(Input)消息所组成的向量,为虚拟硬件输出(Output)消息所组成的向量。

=[1,2,3,…,i] (1)

=[1,2,3,…,o] (2)

则对于iÎ,Î{1,2,…,},存在oÎ,Î{1,2,…,},使得映射(i)=o成立。

对于T层,定义、分别代表解码(Decode)与编码(Encode)结果组成的向量,对于C层,定义代表响应(Response)结果组成的向量。

由于M层仅负责收发消息,不进行其它处理,因此M(i)=iM(o)=o,则对任意的iÎ,存在T(i)=d,(d)=rT(r)=edÎ,rÎ,eÎ,,,Î{1,2,…,}。由于T编码的结果由M直接转发,因此e=o,可推得,对于任意iÎ,都可由公式(6)得出oÎ。

3 虚拟硬件数据库的设计

由于灌溉项目的开发会涉及多个硬件设备,为实现虚拟硬件的重用,避免重复创建,需要利用虚拟硬件数据库保存用户定义好的虚拟硬件,以供随时调用。数据库主要包括硬件数据表和规则模块表,具体如下。

(1)硬件数据表。用于存放虚拟硬件完整信息,分为两类数据:一是内部识别数据,包括硬件ID、名称、类型和描述信息,用于ADP识别和管理;二是行为规则数据,包括通信规则、翻译规则、响应规则,对应虚拟硬件模型的通信层、翻译层和内核层,用于存放各层接口的实现函数。具体结构如表1所示,具体接口函数及其说明见第5节表3。

表 1 硬件数据表

(2)规则模块表。用于存放规则名称、规则内容、规则类型等数据,用户创建虚拟硬件时,可从规则模块表中直接选用已有规则,或在所选规则基础上进行编辑,实现通信、翻译、响应规则的重用,具体结构如表2所示。

表 2 规则模块表

为保证扩展性,虚拟硬件启动时会动态加载数据库中各层接口函数的实现代码并执行。因此,虽然ADP目前实现的接口函数主要针对C/S架构灌溉系统,但开发人员可以自行编写接口实现代码并存储在虚拟硬件数据库中,使其可应用于其它系统架构或通信协议。

4 硬件环境模拟器的设计

硬件环境模拟器负责虚拟硬件的启动、监控和关闭,由于虚拟硬件需要实时侦听服务器指令,因此采用多线程技术防止阻塞。模拟器分为运行环境层、数据交互层两层,其中,运行环境层负责接收并执行来自ADP的命令,数据交互层负责接收虚拟硬件报告的运行状态并转发给ADP。模拟器各层、ADP以及虚拟硬件均为独立线程,主要通过消息循环实现线程通信。具体设计如下。

(1)启动虚拟硬件。当运行环境层接到启动虚拟硬件的命令时,会依据虚拟硬件模型创建独立线程,在线程中动态加载通信层、翻译层、内核层接口实现函数,完成虚拟硬件实例化,并记录虚拟硬件ID及线程ID,此时灌溉系统服务器将与实例建立连接。

(2)监控虚拟硬件。虚拟硬件在响应服务器指令的同时,会向数据交互层的消息循环发送线程消息,报告运行状态,数据交互层会将虚拟硬件的信息和运行状态统一提交至ADP监控界面。

(3)关闭虚拟硬件。由于虚拟硬件对服务器指令的持续监听本质上也是一种循环,与消息循环存在冲突,因此无法通过消息循环控制虚拟硬件,这里利用以虚拟硬件ID命名的线程标志位进行控制:当硬件环境模拟器接到关闭虚拟硬件的命令时,首先将标志位设置为假,然后等待虚拟硬件线程ID返回停止信号(虚拟硬件内部通过标志位判断是否需要停止,由用户在通信层接口函数内实现,见第5节图6),若超时,则直接终止目标线程。

硬件环境模拟器具体运行结构如图5所示。

图 5 硬件环境模拟器运行结构图

5 ADP构建

5.1 技术选型

技术选型主要包括编程语言的选择和数据库的选择。对于数据库的选择,由于ADP属于单机程序,无需考虑高并发情况,因此轻量级的开源数据库SQLite是最优方案;对于编程语言的选择,综合考虑资源占用、执行速度、可扩展性以及可视化界面的开发效率,国产编程语言Aardio具有明显的优势,尤其是其允许在运行时动态执行代码的特性,为ADP的扩展性提供了良好的基础,因此选择Aardio作为开发语言。

5.2 具体实现

对于ADP的整体实现,我们采用MVC的设计方式进行,因篇幅有限不便展示代码,本小节仅讨论ADP的核心功能,即虚拟硬件实例化的实现方式,主要包括三项内容。

(1)为虚拟硬件实例创建单独的线程。这里需用到Aardio提供的thread.create()函数。

(2)动态执行接口函数。虚拟硬件实例化时,首先通过loadcodex()为预留接口动态加载用户定义的通信层、翻译层、内核层接口函数代码,供主函数调用,具体接口说明如表3所示。

表 3 虚拟硬件实例化预留接口

(3)引入纤程机制,使三层接口分工合作。通信层作为纤程,在侦听指令时拥有线程控制权,接收指令后通过fiber.yield()将控制权和指令数据交给主函数,主函数调用翻译层和内核层处理完成后,调用fiber.resume()将响应数据以及线程控制权返回给通信层。

实例化过程中所采用的关键函数的说明如表4所示,虚拟硬件实例的代码执行流程如图6所示(有关图中“标志位”的解释详见第4节“关闭虚拟硬件”)。

表 4 采用的Aardio关键函数

图 6 虚拟硬件实例代码执行流程

6 ADP演示与应用

我们所开发的灌溉系统主要包括灌溉控制、气象监测、土壤墒情监测等功能,共涉及2种主设备和5种子设备(如表5所示)。根据开发需要,利用ADP创建了5个虚拟硬件(如表6所示),其中,通信层接口函数基于TCP/IP协议实现;翻译层接口函数分两类实现:针对子设备,基于Modbus协议实现,针对主设备,由于其采用字符串格式AT指令,可直接转发;内核层接口函数基于设备指令手册实现,实现代码不再赘述。

此处以土壤墒情监测为例演示ADP,所涉及的虚拟硬件(ID为SQFWQ,详见表6)以串口服务器和土壤温湿度电导率传感器所组成的整体(抽象主设备)为模拟对象,负责向服务器反馈各墒情点的土壤温度、湿度及电导率。

表 5 设备信息表

表 6 虚拟硬件配置表

启动灌溉系统服务器以及ID为SQFWQ的虚拟硬件,此时ADP监控区域显示该虚拟硬件收到了来自服务器的实时指令消息,这些指令已通过翻译层解码为字符串格式,如图7所示。同时,服务器接收并显示了虚拟硬件的响应消息,共包含4个墒情点的数据,如图8所示。

目前,基于ADP开发的灌溉系统原型产品已投入使用,软件部分的工作量约2人/月,开发周期内用于现场测试的工作量约6人/日。与传统的开发方式相比,利用ADP创建的虚拟测试环境,85%以上的开发工作可远程进行,具有较高的灵活性和效率。图9和图10展示了项目实际部署情况。

图 7 ADP界面

图 9 灌溉系统主控设备部署图

图 10 灌溉系统外景图

7 结论

针对灌溉系统项目受限于硬件环境导致开发效率低的问题,通过分析C/S架构灌溉系统通信特点,提出一种具有三层架构的虚拟硬件模型,基于模型构建了可提供虚拟测试环境的辅助开发平台,并将其应用到某灌溉系统项目的开发中,显著提高了开发效率和灵活性。与现有硬件仿真模拟的研究成果相比,主要优点表现在三点:一是无耦合,利用平台辅助开发的项目,无需修改代码即可直接迁移至真实硬件环境进行实际测试和部署;二是易使用,用户可根据项目需要,通过可视化界面创建并执行多种不同规则的虚拟硬件;三是可编程,允许用户根据需要自行实现虚拟硬件通信层、翻译层、内核层的接口函数,使平台不仅适用于C/S架构项目,也可以应用于其它架构的项目中。平台不足之处在于,当前虚拟硬件数据库中的硬件数据较少,如果新增不同厂家的设备可能需要重新定义虚拟硬件,针对此问题,下一步的研究工作将主要围绕丰富虚拟硬件数据库中的硬件数据进行,进一步提高平台的易用性和适用性。

[1] 冯俊池,连尧,董超,等.软件测试中的Mock辅助生成技术研究[J].电子测量技术,2019,42(6):48-51

[2] 刘小双,邓文,王燕.使用Google测试框架的软件单元测试[J].单片机与嵌入式系统应用,2019,19(10):9-11,15

[3] 罗峰,徐金鹏.基于单元测试的车载时钟同步协议开发方法[J].汽车技术,2019(5):1-5

[4] 田添.基于4G网络的农田灌溉远程监控系统设计与实现[J].山东农业大学学报(自然科学版),2019,50(6):977-979

[5] 姚引娣,王磊,花静云,等.基于B/S架构的LoRa远程温室监测系统[J].传感器与微系统,2021,40(1):78-80,84

[6] 胡瑾秋,郝笑笑,张来斌.基于虚拟传感技术的工业数据错误诊断方法[J].仪器仪表学报,2018,39(3):29-36

[7] 冯智睿,马令坤,黄苑玉.一种基于虚拟传感的双通道主动降噪方法[J].科学技术与工程,2021,21(6):2242-2247

[8] 吴应新,吴剑桥,杨雨航,等.油电混合果园自动导航车控制器硬件在环仿真平台设计与应用[J].智慧农业(中英文),2 020,2(4):149-164

[9] 付春流,陈德旺,尚艳艳,等.基于IAP的硬件在环测试系统升级研究[J].电子测量技术,2020,43(7):157-160

[10] 周奇勋,李鹏博,刘娜,等.基于LabVIEW的双余度伺服测控系统设计[J].仪表技术与传感器,2019(3):72-76

[11] 章阳,华皛,于伟,等.动车组制动系统软件开发集成测试平台研制[J].铁道机车车辆,2020,40(4):13-20

[12] 成正林,李学明,黄明明,等.机车传动系统控制逻辑纯软件仿真测试平台开发[J].机车电传动,2016(2):71-74

[13] 王洋,薛静,刘春龙,等.一种高速系统级虚拟测试环境实现技术[J].航天控制,2019,37(2):49-54

[14] 曲明成,崔乃刚,吴翔虎,等.嵌入式软件虚拟化测试技术标准框架研究[J].哈尔滨工业大学学报,2017,49(5):49-55,121

[15] Sinha S, Goyal NK, Mall R. Reliability and availability prediction of embedded systems based on environment modeling and simulation [J]. Simulation Modelling Practice and Theory, 2020,108(2088–8708):102246

Design and Realization of Auxiliary Development Platform for Irrigation System

REN Chong-hao, ZHANG Ji-jun*

271018,

This paper aims to address the problem of inefficient development of irrigation system projects due to the limitation of hardware environment. Based on the Aardio language and SQLite database, this paper adopts an MVC design pattern and multi-threading technology to design an auxiliary development platform for irrigation systems with client/server architecture, which provides a virtual test environment. First, we analyze the networking characteristics of the client/server architecture irrigation system and the principle of implementing the platform functions. We then design the virtual hardware model, virtual hardware database, and hardware environment simulator based on the above analysis. Finally, we built the platform and applied it to the development of the irrigation system project. We find that the platform can realize the simulation of input and output characteristics of sensing control devices, reduce developers' reliance on actual hardware environments, and improve development efficiency and flexibility.

Irrigation system; platformdevelopment; software design

TP391.9

A

1000-2324(2021)06-1002-07

2021-11-21

2021-11-28

任崇浩(1993-),男,硕士研究生,主要研究方向为农业信息服务技术与工程. E-mail:totomusic@qq.com

通讯作者:Author for correspondence.E-mail:zhangjijun@sdau.edu.cn

猜你喜欢
灌溉系统模拟器线程
实时操作系统mbedOS 互斥量调度机制剖析
驾驶模拟器转向系统的设计与研究
基于NSPSO算法涔天河灌区长藤结瓜灌溉系统的水资源优化配置研究
了不起的安检模拟器
高效节水灌溉系统为农作物提供“精准服务” 京郊农庄里的节水“新花样”
盲盒模拟器
划船模拟器
基于国产化环境的线程池模型研究与实现
仿生高效节水灌溉系统
计算机中的多线程问题