掌桥专利:专业的专利平台
掌桥专利
首页

一种基于NB-IoT和SCADA的流域水环境监测系统

文献发布时间:2024-04-18 19:58:30


一种基于NB-IoT和SCADA的流域水环境监测系统

技术领域

本发明涉及流域水环境治理领域,特别涉及一种基于NB-IoT和SCADA的流域水环境监测系统。

背景技术

水环境治理是公共卫生、社会发展和生态可持续性的关键部分。随着全球气候变化、城市化和工业化等因素的影响,水资源的稀缺性和水环境问题的严重性日益增加,因此水环境治理的重要性在当今社会越来越被重视。在线仪表监测数据监测技术在水环境治理中占据着极其重要的地位,在线仪表能够实时提供各项水质参数(如pH、溶解氧、电导率、浊度、有害物质含量等)、流量和水位等信息,这些数据是水环境治理决策的基础,通过实时监测,可以及时发现水质异常、水位突变、流量超标等问题,及时采取措施进行处理,避免问题进一步恶化。同时,通过对各项参数的长期监测,可以优化水处理设备的运行策略,如调整泵的启停时间,改变水厂的出水量等,以达到节能、减排和提高效率的目标。此外,准确、实时的水环境监测及有效的数据存储,可以预测未来的水质变化、水需求等,为水资源管理和水环境规划提供依据,为实现水环境的科学管理和可持续发展提供了有力的技术支持。

随着各项传感器技术、计算机网络通信技术的快速更新迭代,在线仪表监测技术也向着多元化、智能化和网络化的方向发展,许多在线仪表都具备自我校准、自我诊断、自我清洗等功能,大大减轻了人工维护的负担通过物联网技术,在线仪表可以实时将监测数据传输到远程服务器,实现远程监控和管理。但是这些监测技术往往存在设备成本高、数据质量控制有限、环境适应性不足等问题,尤其在水环境监测中,面临着监测范围广、设备繁多、环境条件变化大、数据量大等诸多问题,以上这些点对水环境监测系统的性能、稳定性、耐用性、安全性、易用性和数据处理能力等都提出了较高的要求。

目前在水环境领域的在线仪表数据采集中,多采用在线监测、遥感监测、手动采样等,但是这些方式普遍存在覆盖能力有限,功耗及成本较高、持久性差、采集效率地底下且数据不稳定,对数据的长期存储和有效利用不理想,在面对一些复杂的水环境监测环境的时候表现出许多不足。因此,流域水环境监测的多样性、成本及范围、适应性、数据处理等是本发明的难点及挑战。

发明内容

本发明旨在提供一种基于NB-IoT和SCADA的流域水环境监测系统,主要包括了数据采集模块、数据传输处理模块、数据展示模块三大方面,解决了现有流域水环境监测技术中监测成本高、覆盖性小、设备连接数量有限、数据利用不到位等问题。同时结合SCADA系统,实现了实时远程监控、数据分析和优化、多样化数据呈现、生产过程联动等功能。

本发明提供一种基于NB-IoT和SCADA的流域水环境监测系统,该系统包括数据采集模块、数据传输处理模块、数据展示模块;

数据采集模块,用于在原有的在线仪表上扩展添加NB-IoT模块的终端数据采集;

数据传输处理模块,用于接收NB-IoT模块的终端数据并进行处理得到目标数据,并将目标数据存储在关系型数据库中,有n个分站通过工业网关OPC服务器的开放数据库连接客户端ODBC直接关联目标数据表,将目标数据实时传递给SCADA系统的过程数据库PDB;

数据展示模块;用于目标数据通过对象链接,采用组态的方式将目标数据在SCADA系统呈现给用户。

优选地,数据采集模块,还包括选择单元、硬件接入单元、软件集成单元和测试验证单元;

模块选择单元,用于模块选择,所选择的模块为NB-IoT模块,在选择NB-IoT模块时,主要选择关键参数,所述关键参数包括数据传输速率、功耗、射频性能、尺寸、温度范围;

硬件接入单元,用于将NB-IoT模块通过设计的接口电路接入到在线仪表上,所述接口电路将在线仪表的数据信号转换成NB-IoT模块接收的数字信号;

软件集成单元,用于在线仪表添加对NB-IoT模块后建立通信连接,并将所接收的模拟信号的进行数据处理,所述数据处理采用以下步骤:

步骤1初始化模块:

使用UART(Universal Asynchronous Receiver-Transmitter通信异步收发器)或SPI(Serial Peripheral Interface串行外设接口)串行通信接口将NB-IoT模块与主控系统进行物理连接,连接后设置波特率、数据位、停止位参数,启动NB-IoT模块的网络连接,与NB-IoT基站建立通信连接;

步骤2设置参数:

设置NB-IoT模块的接入点名称APN(Access Point Name),使得NB-IoT模块连接NB-IoT网络并访问云服务器;选择传输协议为TCP,以及相应的端口号,用于向服务端发送数据包;之后设置数据传输的频率;

步骤3处理模块的信号:

101读取仪表传感器的监测数据,监测数据包括温度、湿度、压力信息;

102监测数据为模拟信号,进行模数A/D转换;

103对采集到的监测数据为原始数据进行校准、滤波和数据压缩,并将仪表的监测数据封装成通过NB-IoT网络传输的二进制数据包,同时也处理接收到的数据包;

测试验证单元,在完成硬件接入和软件集成之后,进行测试和验证,模拟真实环境的条件,查看系统是否能够正常地发送和接收数据;如果发现问题,返回步骤1和步骤2进行修改和调整;将NB-IoT模块与在线仪表集成完成后,将数据通过NB-IoT通信模式网络发送到就近的基站;所述NB-IoT通信模式通常采用DRX模式。

优选地,数据传输处理模块,包括硬件设备层、数据采集层、SCADA监控层;

硬件设备层,是将监测目标经过各类传感器的物理测量,得到物理测量数据,将物理量数据转换为可测量的信号量数据,通过模数转换器ADC,将连续的目标模拟信号转换为目标数字信号,目标数字信号被送到微处理器进行处理,所述的处理按以下步骤:

201信号滤波

对采集到的原始信号进行处理,去除其中的噪声和干扰,获得目标数据;根据数据类型和应用场景确定采用滤波的方法,所述滤波的方法包括低通滤波、中值滤波、高通滤波,其中,在线气体仪表选择低通滤波;

202错误校正

将目标数据使用动态校正进行错误校正;所述动态校正是根据实时的运行状态,或反馈数据对采集的数据进行校正;通过动态校正,根据实际情况对传感器输出进行实时目标数据调整;

203数据压缩

将目标数据压缩,所述数据压缩包含有损压缩和无损压缩,其中,对于仪表类数据采用无损压缩;

204数据转换

数据解压缩后将原始的采集数据转换封装为NB-IoT协议的数据格式进行传输;

数据采集层,将设备传回的数据进行数据接收、拥塞处理、协议解析,并将处理设备数据同时上报,所述数据采集层引入Redis消息流(Redis Stream)进行拥塞控制处理;

SCADA监控层,用于接收现场设备层采集到的原始数据并传递给SCADA系统,SCADA监控层主要是通过ODBC Client开放数据库连接客户端(Open Database Connectivity),将数据从MySQL数据库经过OPC Server过程控制对象链接服务器(OLE for ProcessControl Server)透传到SCADA的PDB过程数据库(Process DataBase),最终通过各种数据链接的形式呈现在组态界面。

优选地,数据展示模块还包括以下内容:

a、建立监测数据结合分布式SCADA架构:所述构建分布式SCADA架构,是将n个分控中心所采集本站点范围内的数据,最终汇入到总站,总站配置增强型冗余故障进行灾备预防,数据最终展示在iClient(Intelligent Client智能客户端);

b、实时数据显示:SCADA系统实时地显示从各种在线仪表收集到的数据,采用创建OCX控件和OLE对象,利用数据链接方法进行数据嵌入的关联展示;

c、历史数据存储和回放:SCADA系统存储的历史数据,采用Historian历史库来实现历史数据的收集、存储、压缩,所述收集是指SCADA历史曲线所需要的实时及历史监测数据、用户报表所需要的周期性统计到的监测值;将历史监测值数据与周期性收集的监测值阈值进行比对,当周期性统计的监测值的阈值数据大于预设阈值时,获取目标监测值进行数据压缩并存储,其中,所述阈值为周期内监测值与上一个周期内监测值相差;具体采用旋转门趋势算法(Swing Door Trending Algorithm)如下:

所述阈值为一个压缩因子C,对于数据点X,计算其斜率:

kx=(Yx-Yb)/(Xx-Xb)

如果当|kx-k|>C时,存储X点并以X为新的起始点,否则忽略X点;

其中,kx表示为数据点之间的斜率;在旋转门压缩算法中,斜率用来判断数据点是否应该被保留或丢弃;

Yx表示为目标数据点的Y轴值,通常是要存储的数据值;

Yb表示为前一个保留的数据点的Y轴值,作为Y轴基准点,它是目标数据点的前一个保留数据点;

Xx表示为目标数据点的X轴值,通常是时间戳或数据点的序号;

Xb表示为前一个保留的数据点的X轴值,作为X轴基准点,它是目标数据点的前一个保留数据点的时间戳或序号。

优选地,创建OCX控件包括如下步骤:

(1)创建OCX控件:创建一个自定义的OCX控件,所述OCX控件从过程数据库中收集目标数据,并在界面中进行展示;

(2)集成OCX控件:将自定义的OCX控件集成到SCADA系统中,通过ActiveX技术将自定义OCX控件嵌入到SCADA系统的图形界面中;

(3)数据关联:将OCX控件与在线仪表的数据源进行关联:将OCX控件目标数据拖拽至组态画面后,设置目标数据属性,选择在SCADA过程数据库中存储的点位标签,将实时目标数据的固定后缀一致的标签进行关联;

(4)实时更新:SCADA系统定期从在线仪表获取最新的目标数据,并通过OCX控件实时更新;通过定时刷新更新界面上展示的目标数据。

优选地,创建OLE对象步骤如下:

(1)创建OLE对象:使用支持OLE技术的应用程序(如Microsoft Office(微软办公软件套件)软件)来创建OLE对象,或者获取第三方提供的OLE对象;

(2)嵌入OLE对象:在SCADA系统的图形化用户界面中,将创建好的OLE对象嵌入到文档或报表中;用户通过对文档或报表进行操作来访问和控制嵌入的OLE对象;

(3)数据关联:SCADA系统通过数据链接技术将OLE对象与在线仪表收集到的数据进行关联;使得OLE对象能够显示相关的数据,之后将图表嵌入报表中,并动态显示在线仪表的实时目标数据;具体嵌入报表步骤如下:

a.创建报表:在SCADA系统的报表编辑器中,创建一个新的报表文件;

b.插入OLE对象:在报表中插入OLE对象,OLE对象为在线仪表收集到的数据的实时目标数据;

c.配置数据链接:设置OLE对象的数据源属性,选择SCADA过程数据库中自定义的在线仪表采集的数据值对应的数据标签,将报表中的OLE对象与实时数据值的来源进行关联,设置OLE对象的属性值source为过程数据库中的点位标签,当组态画面运行时,轮询更新在线仪表采集的数据值,使得报表中的OLE对象将会动态地显示与在线仪表相关联的实时目标数据值;

d.实时显示:建立数据链接,报表中的OLE对象将根据SCADA过程数据库中的监测目标数据实时刷新画面上的目标数据,通过记录实时值进而显示目标数据历史趋势。

优选地,数据链接方法如下步骤:

(1)数据源配置:配置与在线仪表通信的数据源、设定数据来源和通信协议;所述数据源是传感器、PLC可编程逻辑控制器或其他实时数据采集设备;

(2)数据关联:通过数据链接技术将数据源中的实时数据与图形化界面中的OCX控件或OLE对象关联起来;使得OCX控件实时显示在线仪表收集到的目标数据;

(3)实时更新:SCADA系统定期从数据源更新关联的目标数据,并通过OCX控件或OLE对象进行实时显示。

8.根据权利要求2所述的一种基于NB-IoT和SCADA的流域水环境监测系统,其特征在于,所述测试验证单元在NB-IoT通信模式上,通常采用DRX模式,具体是指在DRX模式下,设备不会持续接收信号,而是在预定的时间段DRX周期中打开其接收器,检查是否有传入的数据;如果有数据,设备将保持接收状态,否则,设备将关闭其接收器,进入低功耗状态;

DRX模式的主要组成部分有两个On-Duration激活持续时间和DRX不活动计时器(DRX Inactivity Timer);

On-Duration激活持续时间:是设备打开接收器,接收下行传输的时间段;在这个时间段设备需要消耗较多的能量;

DRX不活动计时器(DRX Inactivity Timer):当设备在激活持续时间(On-Duration):时间段接收到数据后,这个计时器开始计时。当计时器到达预定的时间,设备将关闭接收器,进入低功耗状态;

通过调整这两个参数,对设备的功耗和延迟进行设置;如果需要更低的功耗,可以增大DRX周期;如果需要更低的数据传输延迟,可以减小DRX周期;总能量消耗:E_total=

E_active+E_sleep;

活动期的能量消耗E_active与设备打开接收器进行通信的时间T_active成正比:

E_active=k_active*T_active

其中,k_active是一个常数,代表在单位时间内设备的能量消耗,T_active是设备处于激活状态的时间,即激活持续时间On-Duration;

休眠期的能量消耗E_sleep与设备关闭接收器进入低功耗状态的时间(T_sleep)成正比:

E_sleep=k_sleep*T_sleep

其中,k_sleep是一个常数,代表在单位时间内设备的能量消耗,T_sleep是设备处于休眠状态的时间,即DRX周期减去激活持续时间On-Duration。

优选地,数据采集层引入Redis消息(Redis Stream)流进行拥塞控制处理,具体包括如下步骤:

a、创建Stream:每个NB-IoT模块的数据作为一个单独的消息发送到一个统一的消息队列中,使用XADD命令将NB-IoT模块的数据添加到Stream数据流;提供秘钥key、消息ID和消息内容,其中,消息内容为key-value型数据,ID最常使用*,表示由Redis内存数据库自动生成消息ID;

b、处理Stream数据:数据采集层使用内存数据库Redis自带的XREAD或XREADGROUP命令读Stream中的数据;使用XREADGROUP处理分布式环境下的数据读取;通过XREADGROUP命令和消费者组,Redis实现消息队列系统,m个消费者可以并发地从Redis消息流中获取消息形成消费者群组,消费者群组是数据采集层通过Redis的XGROUP CREATE命令创建的,每个消费者群组按照监测类型命名一个唯一的名称,并通过消息ID与特定的Stream关联;XGROUP CREATE命令允许指定消费者群组的最后已读消息ID,新加入群组的消费者可以从指定的位置开始消费;

当消费者通过XREADGROUP命令从Stream消息流中读取消息时,Redis会查找群组中的未确认消息,并将其分配给消费者;不同消费者使用不同的消费者ID标识自己,每个消息都有一个全局唯一的ID,Redis使用消费者ID和消息ID来标识已确认消息,消费者ID由Redis自动生成时间戳加序列号;消息格式为:XACK key group ID[ID……],命令XACK返回成功确认的消息数据;所述XACK返回的成功确认的消息数量是指消费者端的消息数量与总的消息数量一致。

d、限制Stream大小:通过MAXLEN最大消息长度参数来限制Stream的大小,防止Stream无限制地增长,消息格式为:XTRIM key MAXLEN[~]count

采用利特尔定律Little's Law对数据队列进行调整优化:

L=λW

其中,L表示为Redis Stream中未处理的消息数量的平均队列长度;

λ表示为每秒钟到达Redis Stream的队列消息数量的平均到达生产者的生产率;

W表示为消息在Redis Stream中待处理的平均逗留时间;同时W与单个消息的处理速率R也成正比:W=RT;

T表示当前消息之前的未处理的消息个数,需要通过提高处理速度或增加消费者数量来改善;

优化调整方案如下:

(1)增加处理能力:如果消息产生率λ大于预设阈值时,增加消费者数量或优化消费者的处理效率R;

(2)减少等待时间:如果消息产生率λ与处理率R之间存在差异,当消息产生率与处理率>=阈值时,则差异较大,进行动态调整;

数据采集层的协议解析是指数据经过Stream队列后进行消息的协议解析,根据预先定义好的私有协议进行数据包的拆分、验证、结构化,得到最终的监测值:

所述拆分是将接收到的数据按照协议约定好的标识符逗号进行切割,切割为字符串数组,其中第一位代表消息ID,第二位代表消息类型,通过前两位判断在预定义的唯一ID和消息类型内的数据包是否合法,按照协议的偏移量形成数组并逐一解析;所述解析方法如下:

解析时将接收到的数据放在数组arr中,每一包的序列号为SensorNum,数据位为5位,校验位为3位,则遍历数组arr,计算每次的偏移量offset:

offset=3+(sensorNum-1)*5

其中,减一是由于数组的下标是从0开始,根据计算出来的offset遍历数组,得出所有数据包;

验证是将解析后的数据通过日志log输出在控制台,同时实时的查看仪表表头上的数据,对比数据是否一致,实际数据V等于采集数据V’,数据一致时表示协议解析正确,不一致时,打印每一步解析过程中的数据值,判断逻辑是否存在错误,如果代码实现逻辑无误,进一步使用wirshark抓包,查看原始数据包是否正确;所述原始数据包是否正确是通过查看真实仪表的显示屏上的目标数据是否和采集上来通过log日志打印出来的数据一致判断;

结构化是将拆分完成并验证后的目标数据进行结构化存储,创建监测数据结构体,将检测到的数值对应到数据类别和关键字段属性上,最终存储在MySQL关系型数据库中;所述验证后的数据为仪表采集到的不同监测项的真实模拟量数值、检测项类型。

优选地,SCADA监控层还包括如下步骤:

a、MySQL数据库存储:数据采集层将收到的NB-IoT数据存储在MySQL数据库中;数据经过后端的服务接收和解析后,通过JDBC(Java Database Connectivity Java数据库连接)直接将采集到的数据存入到MYSQL数据库中;

b、开放数据库连接客户端ODBC Client(Open Database Connectivity)和OPC服务器OPC Server的数据传输:通过工业网关OPC服务器IGS(Industrial Gateway OPCServer)的开放数据库连接客户端ODBC Client(Open Database Connectivity)从关系型数据库MySQL获取数据,通过使用标准化的开放数据库连接客户端ODBC(Open DatabaseConnectivity)和过程控制的OLE,最后通过过程控制对象链接服务器OPC Server(OLE forProcess Control Server)将数据传输到SCADA系统的过程数据库PDB(ProcessDataBase);

c、SCADA系统的数据处理和显示:在SCADA系统的过程数据库PDB中,创建AI模拟量点位,所述AI模拟量点位为以AI模拟输入的点位类型,用于接收连续变化的模拟信号,所述点位是用于标识和表示一个数据值的唯一地址或名称,每个模拟量或数字量都有一个唯一的点位,以便系统能够准确地识别和访问该数据;

同时设置点位的刷新频率、上下限值等参数,设置完成后,在scada画面中通过ocx控件、ole对象方式,设置其数据源属性值为所述点位标识,从PDB过程数据库中获取到目标监测数据,通过数据链接技术将目标监测数据实时呈现在组态软件ifix组态界面。

本发明实施例提供了一种基于NB-IoT和SCADA的流域水环境监测系统,解决了现有流域水环境监测技术中监测成本高、覆盖性小、设备连接数量有限、数据利用低的问题;本系统主要是数据采集模块通过在原有的在线仪表上扩展添加NB-IoT模块的终端数据采集;数据传输处理模块接收NB-IoT模块的终端数据并进行处理得到目标数据,并将目标数据实时传递给SCADA系统的过程数据库PDB;数据展示模块是将目标数据通过对象链接,采用组态的方式将目标数据在SCADA系统呈现给用户,实现了实时远程监控、数据分析和优化、多样化数据呈现、生产过程联动功能。

附图说明

图1是一种基于NB-IoT和SCADA的流域水环境监测系统示意图;

图2是一种基于NB-IoT和SCADA的流域水环境监测系统NB-IoT模块扩展流程示意图;

图3是一种基于NB-IoT和SCADA的流域水环境监测系统DRX模式工作示意图;

图4是一种基于NB-IoT和SCADA的流域水环境监测系统整体技术架构图示意图;

图5是一种基于NB-IoT和SCADA的流域水环境监测系统硬件层数据采集过程图;

图6是一种基于NB-IoT和SCADA的流域水环境监测系统可燃气体仪表接收数据过程图;

图7是一种基于NB-IoT和SCADA的流域水环境监测系统MQTT工作原理示意图;

图8是一种基于NB-IoT和SCADA的流域水环境监测系统Redis Stream处理流程图;

图9是一种基于NB-IoT和SCADA的流域水环境监测系统分布式与NB-IoT的应用架构图;

图10是一种基于NB-IoT和SCADA的流域水环境监测系统配置数据源图;

图11是一种基于NB-IoT和SCADA的流域水环境监测系统OPC Server实时数据截图;

图12是一种基于NB-IoT和SCADA的流域水环境监测系统历史数据存储配置图;

图13是一种基于NB-IoT和SCADA的流域水环境监测系统解析后的仪表监测数据图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

本发明实施例提供的一种基于NB-IoT窄带物联网(Narrow Band Internet ofThings,NB-IoT)和SCADA(Supervisory Control And Data Acquisition)系统,即数据采集与监视控制系统的流域水环境监测系统,如图1所示,该方法包括以下步骤:

本发明提供一种基于NB-IoT和SCADA的流域水环境监测系统,该系统包括数据采集模块、数据传输处理模块、数据展示模块;

数据采集模块,用于在原有的在线仪表上扩展添加NB-IoT模块的终端数据采集;

数据传输处理模块,用于接收NB-IoT模块的终端数据并进行处理得到目标数据,并将目标数据存储在关系型数据库中,有n个分站通过工业网关OPC服务器的开放数据库连接客户端ODBC直接关联目标数据表,将目标数据实时传递给SCADA系统的过程数据库PDB;

数据展示模块;用于目标数据通过对象链接,采用组态的方式将目标数据在SCADA系统呈现给用户。

在一个实施例中,数据采集模块,还包括选择单元、硬件接入单元、软件集成单元和测试验证单元;

模块选择单元,用于模块选择,所选择的模块为NB-IoT模块,在选择NB-IoT模块时,主要选择关键参数,所述关键参数包括数据传输速率、功耗、射频性能、尺寸、温度范围;

硬件接入单元,用于将NB-IoT模块通过设计的接口电路接入到在线仪表上,所述接口电路将在线仪表的数据信号转换成NB-IoT模块接收的数字信号;

软件集成单元,用于在线仪表添加对NB-IoT模块后建立通信连接,并将所接收的模拟信号的进行数据处理,所述数据处理采用以下步骤:

步骤1初始化模块:

使用UART(Universal Asynchronous Receiver-Transmitter通信异步收发器)或SPI(Serial Peripheral Interface串行外设接口)串行通信接口将NB-IoT模块与主控系统进行物理连接,连接后设置波特率、数据位、停止位参数,启动NB-IoT模块的网络连接,与NB-IoT基站建立通信连接;

步骤2设置参数:

设置NB-IoT模块的接入点名称APN(Access Point Name),使得NB-IoT模块连接NB-IoT网络并访问云服务器;选择传输协议为TCP,以及相应的端口号,用于向服务端发送数据包;之后设置数据传输的频率;

步骤3处理模块的信号:

101读取仪表传感器的监测数据,监测数据包括温度、湿度、压力信息;

102监测数据为模拟信号,进行模数A/D转换;

103对采集到的监测数据为原始数据进行校准、滤波和数据压缩,并将仪表的监测数据封装成通过NB-IoT网络传输的二进制数据包,同时也处理接收到的数据包;

测试验证单元,在完成硬件接入和软件集成之后,进行测试和验证,模拟真实环境的条件,查看系统是否能够正常地发送和接收数据;如果发现问题,返回步骤1和步骤2进行修改和调整;将NB-IoT模块与在线仪表集成完成后,将数据通过NB-IoT通信模式网络发送到就近的基站;所述NB-IoT通信模式通常采用DRX模式。

在一个实施例中,数据传输处理模块,包括硬件设备层、数据采集层、SCADA监控层;

硬件设备层,是将监测目标经过各类传感器的物理测量,得到物理测量数据,将物理量数据转换为可测量的信号量数据,通过模数转换器ADC,将连续的目标模拟信号转换为目标数字信号,目标数字信号被送到微处理器进行处理,所述的处理按以下步骤:

201信号滤波

对采集到的原始信号进行处理,去除其中的噪声和干扰,获得目标数据;根据数据类型和应用场景确定采用滤波的方法,所述滤波的方法包括低通滤波、中值滤波、高通滤波,其中,在线气体仪表选择低通滤波;

202错误校正

将目标数据使用动态校正进行错误校正;所述动态校正是根据实时的运行状态,或反馈数据对采集的数据进行校正;通过动态校正,根据实际情况对传感器输出进行实时目标数据调整;

203数据压缩

将目标数据压缩,所述数据压缩包含有损压缩和无损压缩,其中,对于仪表类数据采用无损压缩;

204数据转换

数据解压缩后将原始的采集数据转换封装为NB-IoT协议的数据格式进行传输;

数据采集层,将设备传回的数据进行数据接收、拥塞处理、协议解析,并将处理设备数据同时上报,所述数据采集层引入Redis消息流(Redis Stream)进行拥塞控制处理;

SCADA监控层,用于接收现场设备层采集到的原始数据并传递给SCADA系统,SCADA监控层主要是通过ODBC Client开放数据库连接客户端(Open Database Connectivity),将数据从MySQL数据库经过OPC Server过程控制对象链接服务器(OLE for ProcessControl Server)透传到SCADA的PDB过程数据库(Process DataBase),最终通过各种数据链接的形式呈现在组态界面。

在一个实施例中,数据展示模块还包括以下内容:

a、建立监测数据结合分布式SCADA架构:所述构建分布式SCADA架构,是将n个分控中心所采集本站点范围内的数据,最终汇入到总站,总站配置增强型冗余故障进行灾备预防,数据最终展示在iClient(Intelligent Client智能客户端);

b、实时数据显示:SCADA系统实时地显示从各种在线仪表收集到的数据,采用创建OCX控件和OLE对象,利用数据链接方法进行数据嵌入的关联展示;

c、历史数据存储和回放:SCADA系统存储的历史数据,采用Historian历史库来实现历史数据的收集、存储、压缩,所述收集是指SCADA历史曲线所需要的实时及历史监测数据、用户报表所需要的周期性统计到的监测值;将历史监测值数据与周期性收集的监测值阈值进行比对,当周期性统计的监测值的阈值数据大于预设阈值时,获取目标监测值进行数据压缩并存储,其中,所述阈值为周期内监测值与上一个周期内监测值相差;具体采用旋转门趋势算法(Swing Door Trending Algorithm)如下:

阈值为一个压缩因子C,对于数据点X,计算其斜率:

kx=(Yx-Yb)/(Xx-Xb)

如果当|kx-k|>C时,存储X点并以X为新的起始点,否则忽略X点;

其中,kx表示为数据点之间的斜率;在旋转门压缩算法中,斜率用来判断数据点是否应该被保留或丢弃;

Yx表示为目标数据点的Y轴值,通常是要存储的数据值;

Yb表示为前一个保留的数据点的Y轴值,作为Y轴基准点,它是目标数据点的前一个保留数据点;

Xx表示为目标数据点的X轴值,通常是时间戳或数据点的序号;

Xb表示为前一个保留的数据点的X轴值,作为X轴基准点,它是目标数据点的前一个保留数据点的时间戳或序号。

优选地,创建OCX控件包括如下步骤:

(1)创建OCX控件:创建一个自定义的OCX控件,所述OCX控件从过程数据库中收集目标数据,并在界面中进行展示;

(2)集成OCX控件:将自定义的OCX控件集成到SCADA系统中,通过ActiveX技术将自定义OCX控件嵌入到SCADA系统的图形界面中;

(3)数据关联:将OCX控件与在线仪表的数据源进行关联:将OCX控件目标数据拖拽至组态画面后,设置目标数据属性,选择在SCADA过程数据库中存储的点位标签,将实时目标数据的固定后缀一致的标签进行关联;

(4)实时更新:SCADA系统定期从在线仪表获取最新的目标数据,并通过OCX控件实时更新;通过定时刷新更新界面上展示的目标数据。

在一个实施例中,创建OLE对象步骤如下:

(1)创建OLE对象:使用支持OLE技术的应用程序(如Microsoft Office(微软办公软件套件)软件)来创建OLE对象,或者获取第三方提供的OLE对象;

(2)嵌入OLE对象:在SCADA系统的图形化用户界面中,将创建好的OLE对象嵌入到文档或报表中;用户通过对文档或报表进行操作来访问和控制嵌入的OLE对象;

(3)数据关联:SCADA系统通过数据链接技术将OLE对象与在线仪表收集到的数据进行关联;使得OLE对象能够显示相关的数据,之后将图表嵌入报表中,并动态显示在线仪表的实时目标数据;具体嵌入报表步骤如下:

a.创建报表:在SCADA系统的报表编辑器中,创建一个新的报表文件;

b.插入OLE对象:在报表中插入OLE对象,OLE对象为在线仪表收集到的数据的实时目标数据;

c.配置数据链接:设置OLE对象的数据源属性,选择SCADA过程数据库中自定义的在线仪表采集的数据值对应的数据标签,将报表中的OLE对象与实时数据值的来源进行关联,设置OLE对象的属性值source为过程数据库中的点位标签,当组态画面运行时,轮询更新在线仪表采集的数据值,使得报表中的OLE对象将会动态地显示与在线仪表相关联的实时目标数据值;

d.实时显示:建立数据链接,报表中的OLE对象将根据SCADA过程数据库中的监测目标数据实时刷新画面上的目标数据,通过记录实时值进而显示目标数据历史趋势。

在一个实施例中,数据链接方法如下步骤:

(1)数据源配置:配置与在线仪表通信的数据源、设定数据来源和通信协议;所述数据源是传感器、PLC可编程逻辑控制器或其他实时数据采集设备;

(2)数据关联:通过数据链接技术将数据源中的实时数据与图形化界面中的OCX控件或OLE对象关联起来;使得OCX控件实时显示在线仪表收集到的目标数据;

(3)实时更新:SCADA系统定期从数据源更新关联的目标数据,并通过OCX控件或OLE对象进行实时显示。

8.根据权利要求2所述的一种基于NB-IoT和SCADA的流域水环境监测系统,其特征在于,所述测试验证单元在NB-IoT通信模式上,通常采用DRX模式,具体是指在DRX模式下,设备不会持续接收信号,而是在预定的时间段DRX周期中打开其接收器,检查是否有传入的数据;如果有数据,设备将保持接收状态,否则,设备将关闭其接收器,进入低功耗状态;

DRX模式的主要组成部分有两个On-Duration激活持续时间和DRX不活动计时器(DRX Inactivity Timer);

On-Duration激活持续时间:是设备打开接收器,接收下行传输的时间段;在这个时间段设备需要消耗较多的能量;

DRX不活动计时器(DRX Inactivity Timer):当设备在激活持续时间(On-Duration):时间段接收到数据后,这个计时器开始计时。当计时器到达预定的时间,设备将关闭接收器,进入低功耗状态;

通过调整这两个参数,对设备的功耗和延迟进行设置;如果需要更低的功耗,可以增大DRX周期;如果需要更低的数据传输延迟,可以减小DRX周期;总能量消耗:E_total=

E_active+E_sleep;

活动期的能量消耗E_active与设备打开接收器进行通信的时间T_active成正比:

E_active=k_active*T_active

其中,k_active是一个常数,代表在单位时间内设备的能量消耗,T_active是设备处于激活状态的时间,即激活持续时间On-Duration;

休眠期的能量消耗E_sleep与设备关闭接收器进入低功耗状态的时间(T_sleep)成正比:

E_sleep=k_sleep*T_sleep

其中,k_sleep是一个常数,代表在单位时间内设备的能量消耗,T_sleep是设备处于休眠状态的时间,即DRX周期减去激活持续时间On-Duration。

在一个实施例中,数据采集层引入Redis消息(Redis Stream)流进行拥塞控制处理,具体包括如下步骤:

a、创建Stream:每个NB-IoT模块的数据作为一个单独的消息发送到一个统一的消息队列中,使用XADD命令将NB-IoT模块的数据添加到Stream数据流;提供秘钥key、消息ID和消息内容,其中,消息内容为key-value型数据,ID最常使用*,表示由Redis内存数据库自动生成消息ID;

b、处理Stream数据:数据采集层使用内存数据库Redis自带的XREAD或XREADGROUP命令读Stream中的数据;使用XREADGROUP处理分布式环境下的数据读取;通过XREADGROUP命令和消费者组,Redis实现消息队列系统,m个消费者可以并发地从Redis消息流中获取消息形成消费者群组,消费者群组是数据采集层通过Redis的XGROUP CREATE命令创建的,每个消费者群组按照监测类型命名一个唯一的名称,并通过消息ID与特定的Stream关联;XGROUP CREATE命令允许指定消费者群组的最后已读消息ID,新加入群组的消费者可以从指定的位置开始消费;

当消费者通过XREADGROUP命令从Stream消息流中读取消息时,Redis会查找群组中的未确认消息,并将其分配给消费者;不同消费者使用不同的消费者ID标识自己,每个消息都有一个全局唯一的ID,Redis使用消费者ID和消息ID来标识已确认消息,消费者ID由Redis自动生成时间戳加序列号;消息格式为:XACK key group ID[ID……],命令XACK返回成功确认的消息数据;所述XACK返回的成功确认的消息数量是指消费者端的消息数量与总的消息数量一致。

d、限制Stream大小:通过MAXLEN最大消息长度参数来限制Stream的大小,防止Stream无限制地增长,消息格式为:XTRIM key MAXLEN[~]count

采用利特尔定律Little's Law对数据队列进行调整优化:

L=λW

其中,L表示为Redis Stream中未处理的消息数量的平均队列长度;

λ表示为每秒钟到达Redis Stream的队列消息数量的平均到达生产者的生产率;

W表示为消息在Redis Stream中待处理的平均逗留时间;同时W与单个消息的处理速率R也成正比:W=RT;

T表示当前消息之前的未处理的消息个数,需要通过提高处理速度或增加消费者数量来改善;

优化调整方案如下:

(1)增加处理能力:如果消息产生率λ大于预设阈值时,增加消费者数量或优化消费者的处理效率R;

(2)减少等待时间:如果消息产生率λ与处理率R之间存在差异,当消息产生率与处理率>=阈值时,则差异较大,进行动态调整;

数据采集层的协议解析是指数据经过Stream队列后进行消息的协议解析,根据预先定义好的私有协议进行数据包的拆分、验证、结构化,得到最终的监测值:

拆分是将接收到的数据按照协议约定好的标识符逗号进行切割,切割为字符串数组,其中第一位代表消息ID,第二位代表消息类型,通过前两位判断在预定义的唯一ID和消息类型内的数据包是否合法,按照协议的偏移量形成数组并逐一解析;所述解析方法如下:

解析时将接收到的数据放在数组arr中,每一包的序列号为SensorNum,数据位为5位,校验位为3位,则遍历数组arr,计算每次的偏移量offset:

offset=3+(sensorNum-1)*5

其中,减一是由于数组的下标是从0开始,根据计算出来的offset遍历数组,得出所有数据包;

验证是将解析后的数据通过日志log输出在控制台,同时实时的查看仪表表头上的数据,对比数据是否一致,实际数据V等于采集数据V’,数据一致时表示协议解析正确,不一致时,打印每一步解析过程中的数据值,判断逻辑是否存在错误,如果代码实现逻辑无误,进一步使用wirshark抓包,查看原始数据包是否正确;所述原始数据包是否正确是通过查看真实仪表的显示屏上的目标数据是否和采集上来通过log日志打印出来的数据一致判断;

结构化是将拆分完成并验证后的目标数据进行结构化存储,创建监测数据结构体,将检测到的数值对应到数据类别和关键字段属性上,最终存储在MySQL关系型数据库中;所述验证后的数据为仪表采集到的不同监测项的真实模拟量数值、检测项类型。

在一个实施例中,SCADA监控层还包括如下步骤:

a、MySQL数据库存储:数据采集层将收到的NB-IoT数据存储在MySQL数据库中;数据经过后端的服务接收和解析后,通过JDBC(Java Database Connectivity Java数据库连接)直接将采集到的数据存入到MYSQL数据库中;

b、开放数据库连接客户端ODBC Client(Open Database Connectivity)和OPC服务器OPC Server的数据传输:通过工业网关OPC服务器IGS(Industrial Gateway OPCServer)的开放数据库连接客户端ODBC Client(Open Database Connectivity)从关系型数据库MySQL获取数据,通过使用标准化的开放数据库连接客户端ODBC(Open DatabaseConnectivity)和过程控制的OLE,最后通过过程控制对象链接服务器OPC Server(OLE forProcess Control Server)将数据传输到SCADA系统的过程数据库PDB(ProcessDataBase);

c、SCADA系统的数据处理和显示:在SCADA系统的过程数据库PDB中,创建AI模拟量点位,所述AI模拟量点位为以AI模拟输入的点位类型,用于接收连续变化的模拟信号,所述点位是用于标识和表示一个数据值的唯一地址或名称,每个模拟量或数字量都有一个唯一的点位,以便系统能够准确地识别和访问该数据;

同时设置点位的刷新频率、上下限值等参数,设置完成后,在scada画面中通过ocx控件、ole对象方式,设置其数据源属性值为所述点位标识,从PDB过程数据库中获取到目标监测数据,通过数据链接技术将目标监测数据实时呈现在组态软件ifix组态界面。

本发明实施例提供了一种基于NB-IoT和SCADA的流域水环境监测系统,解决了现有流域水环境监测技术中监测成本高、覆盖性小、设备连接数量有限、数据利用低的问题;本系统主要是数据采集模块通过在原有的在线仪表上扩展添加NB-IoT模块的终端数据采集;数据传输处理模块接收NB-IoT模块的终端数据并进行处理得到目标数据,并将目标数据实时传递给SCADA系统的过程数据库PDB;数据展示模块是将目标数据通过对象链接,采用组态的方式将目标数据在SCADA系统呈现给用户,实现了实时远程监控、数据分析和优化、多样化数据呈现、生产过程联动功能。

实施例一

本发明旨在提供一种基于NB-IoT和SCADA的流域水环境监测系统,前端在线仪表采用NB-IoT窄带物联网通信技术,将数据通过基站从城市公网传输到内部统一的数据采集服务平台,服务接收到数据后进行拥塞处理、协议解析之后将监测数据存储在数据库中。各监测分站通过IGS ODBC Client将数据从OPC网关传递到SCADA的过程数据库,继而通过OLE对象、数据链接等技术将数据实时呈现给用户。最终,通过SCADA系统,实时接收和处理在线仪表的监测数据,实现远程监控和管理,提高监测的效率和准确性,实现数据价值的最大化。

基于NB-IoT和SCADA系统的流域水环境监测系统,如图1所示,在数据采集方面,是传统的在线仪表上定制扩展NB-IoT模块,并通过物联网卡为其提供网络条件;在数据传输处理方面,开发物联网数据采集服务,统一对外端口接收仪表数据,经过服务一系列处理后将采集到的数据存储在关系型数据库中,各个分站通过IGS(Industrial Gateway OPCServer工业网关OPC服务器)的ODBC Client(Open Database Connectivity开放数据库连接客户端)直接关联数据表,将数据实时传递给SCADA的PDB(Process DataBase过程数据库)过程数据库,数据展示方面,继而通过对象链接、组态的方式将数据呈现给用户。此外,通过SCADA系统,将数据进行分析、优化、配置等操作,与整个生产过程进行联动,实现数据更高的利用价值。

1、数据采集

在终端数据采集方面,在原有的在线仪表上扩展添加NB-IoT模块,主要流程如下:

如图2所示NB-IoT模块扩展流程图

(1)模块选择:选择NB-IoT模块时,主要需要考虑模块的一些关键参数,包括数据传输速率、功耗、射频性能、尺寸、温度范围等。还要考虑模块的网络兼容性,例如是否支持所在地区的NB-IoT频段。同时,模块需要有与在线仪表相匹配的接口,如UART(UniversalAsynchronous Receiver-Transmitter通信异步收发器)或SPI(Serial PeripheralInterface串行外设接口)等,用于数据的传输。

以可燃气体检测仪表为例,本发明在科尔诺MOT-500仪表的基础上扩展安装NB861型号的NB-IoT模块,其中,气体检测仪表MOT-500参数如下表1所示

表1为气体检测仪表MOT-500参数

在此基础上选择NB-861模块作为NB-IoT扩展,NB861系列模块为全球领先的NB-IoT无线通信模块,符合3GPP标准,支持Band05、Band08频段,具有体积小、功耗低、传输距离远、抗干扰能力强等特点。由于NB861模块的超小外形尺寸几乎能够满足所有的物联网应用的要求,因此可以很容易地嵌入到其他产品应用中,使用SIM接口插入物联网卡为模块提供网络环境,关键参数如下:

◆超低功耗:典型1.5uA

◆工作电压:NB861 RAC VBAT 2.2V~4.2V(Tye:3.6V)

◆发射功率:23dBm±2dB(Max),最大链路预算较GSM或LTE下提升20dB,最大耦合损耗MCL 164dB

◆提供外部SIM卡接口

◆支持3GPP Rel.13/14NB-IoT无线电通信接口和协议

◆支持Single-Tone,子载波15kHz/3.75kHz

◆支持Multi-Tone,子载波15kHz

◆内嵌UDP、IP、COAP等网络协议栈

(2)硬件接入:将选择好的NB-IoT模块接入到在线仪表上。首先设计一个接口电路,这个电路需要能够将在线仪表的数据信号转换成NB-IoT模块可以接受的信号,使用模数转换器(ADC)实现,将在线仪表采集到的模拟信号转换为数字表示,即转换为二进制形式。接下来,在仪表上找到合适的位置来安装这个模块,可能需要修改仪表的机械结构。最后,需要将模块通过接口电路连接到仪表上,并进行电源的接入。

在本例中的可燃气体检测仪表中,按照模块及设备参数,主电源24V,NB模块供电3.6V。

(3)软件集成:这一步主要涉及到嵌入式编程。首先,需要在仪表的控制软件中添加对NB-IoT模块的支持,例如初始化模块、设置参数、处理模块的信号等。然后,需要编写数据处理的代码,首先使用通信接口(UART(Universal Asynchronous Receiver-Transmitter通信异步收发器)、SPI(Serial Peripheral Interface串行外设接口))从仪表中读取数据。确保正确设置通信参数和协议以确保数据正确获取,接下来,对获取到的原始数据进行数据处理和格式化。这包括对数据进行单位转换、精度处理、数据补偿等操作,以确保数据符合所需的标准和范围。最后将数据封装成可以通过NB-IoT网络传输的数据包。封装的过程包括将数据打包成特定的数据格式,通常是二进制形式,以便在网络上传输。这个代码需要能够将仪表的监测数据封装成可以通过NB-IoT网络传输的数据包,同时也需要能够处理接收到的数据包。这些代码使用C、C++等嵌入式编程语言来编写。最终在上层,采用JAVA进行软件层面的集成测试。

在上述可燃气体仪表实例中,上层软件服务采用JAVA SpringBoot+Netty搭建MQTT服务来接收上报的在线仪表检测到可燃气体、温度、湿度等模拟量数据,通过编写application.yml文件配置对外接收数据的端口,将收到的消息按照预定好的协议进行解码(使用偏移量来逐个解析每一位的值),最终存储在数据库中。

(4)测试和验证:在完成硬件接入和软件集成之后,进行一系列的测试和验证,确保系统能够正常工作。这可能包括功能测试、性能测试、稳定性测试等。例如,可以通过模拟真实环境的条件,查看系统是否能够正常地发送和接收数据。如果发现任何问题,可能需要返回前面的步骤进行修改和调整。

将NB-IoT模块与在线仪表集成完成后,配合物联网卡提供的网络条件,即可将数据通过NB-IoT网络发送到就近的基站。在NB-IoT通信模式上,通常采用DRX模式(如果优先考虑省电可以选择PSM模式,视现场情况而定),该模式原理示意图如下:

如图3所示DRX模式工作示意图

DRX模式是一种节能机制,主要用于减少设备在空闲状态或连接状态时的功耗。在DRX模式下,设备不会持续接收信号,而是在预定的时间段(即DRX周期)中打开其接收器,检查是否有传入的数据。如果有数据,设备将保持接收状态,否则,设备将关闭其接收器,进入低功耗状态。

DRX模式的主要组成部分有两个:

On-Duration:这是设备打开接收器,接收可能的下行传输的时间段。在这个时间段,设备需要消耗较多的能量。

DRX Inactivity Timer:当设备在On-Duration时间段接收到数据后,这个计时器开始计时。当计时器到达预定的时间,设备将关闭接收器,进入低功耗状态。

通过调整这两个参数,对设备的功耗和延迟进行设置;如果需要更低的功耗,可以增大DRX周期;如果需要更低的数据传输延迟,可以减小DRX周期;总能量消耗:E_total=E_active+E_sleep;上述公式中的活动期的能量消耗与设备打开接收器进行通信的时间成正比,休眠期的能量消耗则与设备关闭接收器进入低功耗状态的时间成正比:

活动期的能量消耗(E_active)与设备打开接收器进行通信的时间(T_active)成正比:

E_active=k_active*T_active

其中,k_active是一个常数,代表在单位时间内设备的能量消耗,T_active是设备处于激活状态的时间,即On-Duration(激活持续时间)。

休眠期的能量消耗(E_sleep)与设备关闭接收器进入低功耗状态的时间(T_sleep)成正比:

E_sleep=k_sleep*T_sleep

其中,k_sleep是一个常数,代表在单位时间内设备的能量消耗,T_sleep是设备处于休眠状态的时间,即DRX周期减去On-Duration(激活持续时间)。

最终,通过表头设置IP、PORT、消息上报的时间间隔等参数,其中IP和PORT为上一步软件集成中使用JAVA编写的采集服务中向外暴露的外网地址和端口,

设置完成后,采集到的数据将自动推送到上述的采集服务中,该服务接收到并解析完成后的仪表监测数据如图13所示,其中ID区分仪表安装位置:

至此,完成了基于NB-IoT模块的扩展安装及数据采集上报,通过使用NB-IoT技术,实现更广的覆盖范围和更多设备的接入。NB-IoT支持大量设备的同时接入,有助于提高监测网络的密度和覆盖性。这一有益效果直接解决了传统水环境监测网络覆盖范围有限,设备接入数量受限的技术问题;此外,通过利用NB-IoT设备低功耗的特性,即通过DRX(Discontinuous Reception)模式,NB-IoT设备可以在不需要接收或者发送数据时进入低功耗状态,从而大大延长设备的运行时间。这一有益效果可以解决传统监测设备能耗大,需要频繁更换电池或电源的问题;

3、数据传输处理

在仪表端集成NB模块将数据采集到后,需要将数据接收处理并传输到SCADA,以更好的实时监测及利用数据,本发明系统整体技术架构如图4所示:

系统整体技术架构图包括硬件设备层、数据采集层、SCADA监控层,具体各层如下:

1)硬件设备层:

即物理层,该层主要包含具有NB-IoT模块的在线监测仪表设备,可以适用于水环境监测的各个领域,包括但不局限于气体、温度、湿度、电表、水质等,是整个架构至关重要的一层,也是整个系统和物理世界接触的第一层,如图5所示硬件层数据采集过程图,其工作流程如下:

在该层,检测目标经过各类传感器后,先经过物理测量,将物理量转换为可测量的信号量,物理测量后进行数据转换,通过模数转换器(ADC)将连续的模拟信号转换为数字信号,使得数据能被其他数字系统处理;数字信号会被送到微处理器进行数据处理,这可能包括信号滤波、错误校正、数据压缩等。这个过程包括将数据转换为特定的通信协议格式,以便进行无线传输;处理后的数据通过NB-IoT模块进行数据通信传输。

2)数据采集层:

该层主要用于将设备传回的数据进行接收、处理、解析、存储,同时为处理大量设备数据上报,该层引入Redis Stream进行拥塞控制处理。主要流程如下:

如图6所示可燃气体仪表接收数据过程图

(1)数据接收

在本发明中,经过NB-IoT传输的数据报文通过MQTT进行封装处理,MQTT(MessageQueuing Telemetry Transport)是一个轻量级的发布/订阅(publish/subscribe)型消息传输协议,使用二进制消息格式

以下是一个简化的MQTT报文头信息:

固定报头:

-控制报文类型(4bits):0x01(CONNECT)

-剩余长度(variable length,1-4bytes)

可变报头:

-协议名长度(2bytes)

-协议名(UTF-8编码)

-协议级别(1byte)

-连接标志(1byte)

-保持连接时间(2bytes)

-客户端标识长度(2bytes)

-客户端标识(UTF-8编码)

在NB-IoT在线仪表数据通信中使用MQTT协议封装处理数据有轻量级、支持离线消息和持久对话、网络效率等优势。由于其轻量级和有效的数据分发机制,MQTT比其他协议更节省网络带宽和电池寿命,这对NB-IoT设备来说尤为重要。

在本发明中,如图7所示MQTT工作原理示意图,通过Netty框架搭建MQTT(MessageQueuing Telemetry Transport消息队列遥测传输)服务,Netty是一个高性能、异步事件驱动的网络应用框架,支持多种协议,采用了如零拷贝、异步通信等一些高性能的设计和实现,使其在处理高并发、大数据量的网络通信时,性能出色;同时,Netty的核心是基于异步事件驱动的设计模式,这使得它可以处理高并发的连接和消息处理,尤其适合处理MQTT这种发布/订阅模式的消息传输协议,解决了传统数据采集在大量设备的复杂场景下不能高并发、及时处理上报数据的问题。

以本示例的基于JAVA的数据采集服务的MQTT服务搭建流程及关键实现步骤如下:

①Netty及MQTT依赖引入,在搭建的JAVA项目中引入Netty框架及MQTT的依赖,并指定相应的版本号,依赖分别为“io.netty 4.1.54.Final”和“io.moquette 0.12.1”。

②使用“initChannel”初始化并创建MQTT服务端,通过“addlast”方法添加编码器、解码器、消费者等。

③实现“channelRead0”方法,创建MQTT处理器,分别编写“处理连接请求”、“处理订阅请求”、“处理取消订阅请求”、“处理发布消息请求”等条件下的处理方法。

(2)拥塞处理

由于在水环境检测中可能存在大量的在线设备,各设备采集周期频繁,同一时刻可能存在大量现场数据的上报,因此本发明在数据接入的基础上引入拥塞控制,数据经过上一步的Netty+MQTT处理后推送到拥塞处理模块进行消息的分发。拥塞控制采用RedisStream实现:

Redis Stream是Redis 5.0引入的新数据类型,可用来实现持久化的消息队列,相比于其他队列技术,它具有更强大和灵活的功能,包括但不局限于:

·消息ID的序列化生成

·消息遍历

·消息的阻塞和非阻塞读取

·消息的分组消费

·未完成消息的处理

·消息队列监控

在本发明中,使用Redis Stream来做拥塞控制有以下几个步骤:

如图8所示,Redis Stream处理流程图

a、创建Stream:每个NB-IoT设备的数据可以作为一个单独的消息发送到一个统一的Stream(数据流通道)。可以使用XADD命令将设备数据添加到Stream。

其中语法格式为:

XADD key ID field string[field string...]

需要提供钥匙key,消息ID方案,消息内容,其中消息内容为key-value型数据。ID,最常使用*,表示由Redis生成消息ID。field string[field string],就是当前消息内容,由1个或多个key-value构成,此处的Value就是通过MQTT上报的原始消息报文。

b、Stream数据处理:数据采集层可以使用XREAD或XREADGROUP命令读Stream中的数据。使用XREADGROUP可以更好地处理分布式环境下的数据读取。语法格式为:

XREAD[COUNT count][BLOCK milliseconds]STREAMS key[key...]ID[ID...]

其中:

-[COUNT count],用于限定获取的消息数量

-[BLOCK milliseconds],用于设置XREAD为阻塞模式,默认为非阻塞模式

-ID,用于设置由哪个消息ID开始读取。使用0表示从第一条消息开始。消息队列ID是单调递增的,所以通过设置起点,可以向后读取。在阻塞模式中,可以使用$,表示最新的消息ID。(在非阻塞模式下$无意义)。

-XRED读消息时分为阻塞和非阻塞模式,使用BLOCK选项可以表示阻塞模式,需要设置阻塞时长。非阻塞模式下,读取完毕(即使没有任何消息)立即返回,而在阻塞模式下,若读取不到内容,则阻塞等待。

本发明使用Block模式,配合$作为ID,表示读取最新的消息,若没有消息,命令阻塞,等待过程中,其他客户端向队列追加消息,则会立即读取到,XADD负责生成消息,XREAD负责消费消息。

c、消息确认:处理完一个消息后,使用XACK命令来确认该消息已被处理。这样,如果一个服务实例失败,其他服务实例可以接管并处理未确认的消息,消息格式如下:

XACK key group ID[ID...]

该命令返回成功确认的消息数。某些消息ID可能不再是PEL的一部分(例如因为它们已经被确认),而且XACK不会把他们算到成功确认的数量中。

d、限制Stream大小:通过MAXLEN参数来限制Stream的大小,这可以防止Stream无限制地增长,消息格式如下:

XTRIM key MAXLEN[~]count

本发明参考利特尔定律(Little's Law)对数据队列进行调整优化:

L=λW

平均队列长度(L):为Redis Stream中未处理的消息数量。如果这个数量持续增加,可能意味着系统的处理能力不足,或者出现了生产者(生产消息的NB-IoT设备)和消费者(处理消息的数据采集层)的速率不匹配。这可能需要通过扩展消费者数量或优化处理效率来解决。

平均到达率(λ):每秒钟到达Redis Stream的消息数量,即生产者的生产速率。你需要根据这个速率来设计和调整消费者的数量和处理能力,以避免系统的拥塞。

平均逗留时间(W):消息在Redis Stream中待处理的平均时间。如果这个时间过长,可能会影响系统的实时性,需要通过提高处理速度或增加消费者数量来改善。

优化调整方案如下:

引入R(单个消息的处理率),R越大,消息再队列中的逗留时间W就越小,整个可接收的新消息就越多,具体调整方法如下:

a)增加处理能力:如果消息产生率(λ)较高,导致队列中消息数量增加时增加处理率(R),即提高消息处理的速度;增加消费者数量或优化消费者的处理效率来实现。

b)减少等待时间:如果消息产生率(λ)与处理率(R)之间存在较大差异,导致平均等待时间(W)过长,可以采取以下措施来减少等待时间:

c)提高处理率(R):优化处理逻辑,减少消息处理的时间,或使用并行处理技术。

d)增加消费者:增加消费者数量,将消息分散给更多的消费者并发处理。

e)调整消息分发策略:根据消息的重要性或优先级,优化消息的分发策略,使重要的消息更快地被处理。

f)平衡生产和消费速率:在消息队列系统中,平衡消息的产生和消费速率是重要的优化策略。如果消息的产生速率(λ)与消费速率(R)保持相对平衡,可以减少队列长度和等待时间,提高整体性能。

通过使用Redis Stream,系统可以在处理大量NB-IoT设备数据时,具有更好的数据持久化、可靠性和分布式处理能力,同时也可以更有效地管理内存资源。

(3)协议解析

数据经过Stream队列后进行消息的协议解析,根据预先定义好的私有协议进行数据包的拆分、验证、结构化,得到最终的监测值。

拆分:将接收到的数据按照协议约定好的标识符(“,”)进行切割,切割为字符串数组,其中第一位代表消息ID,第二位代表消息类型,通过前两位是否在预定义的枚举范围内来判断数据包是否合法,随后按照协议的偏移量进行数组的逐一解析。

验证:将解析后的数据通过log(日志)输出在控制台,同时实时的查看仪表表头上的数据,对比数据是否一致。

结构化:将拆分完成并验证后的数据进行结构化存储,定义仪表数据类,同时添加监测项、实时数值、单位、上报时间等关键字段,将解析后的数据序列化到该结构体上进行后续的存储。如:定义仪表数据类,同时添加监测项、实时数值、单位、上报时间等关键字段,将解析后的数据序列化到该结构体上。

在可燃气体仪表的实例中,需要对原始报文中消息的ID(用来区分安装位置)、Type(数据类型)、Value(监测值)等字段逐一进行解析,解析时将接收到的数据放在数组arr中,每一包的序列号为SensorNum,数据位为5位,校验位为3位,则遍历数组arr,计算每次的偏移量offset:

offset=3+(sensorNum-1)*5

其中,减一是由于数组的下标是从0开始,根据计算出来的offset遍历数组,进而得出所有数据包;

通过该层利用MQTT+Netty框架的支撑,外加基于Redis的拥塞控制,使得数据可以快速,高效地从NB-IoT设备传输到服务器,并进行处理。这一有益效果解决了数据传输和处理效率低,数据量大时可能导致数据丢失或延迟的问题。

3)SCADA监控层

在经过了前两个环节后,现场数据已经通过NB-IoT模块采集上报至采集服务,SCADA监控层主要是通过ODBC Client(Open Database Connectivity开放数据库连接客户端)将数据从MySQL经过OPC Server(OLE for Process Control Server过程控制对象链接服务器)透传到SCADA的PDB(Process DataBase过程数据库)过程数据库,最终通过各种数据链接的形式呈现在组态界面,解决了SCADA和关系型数据库之间的数据打通问题,并以此收集到的数据源应用于高层的SCADA,以实现更高层的监事及控制。主要包含以下关键步骤:

①MySQL数据库存储:首先,数据采集层将收到的NB-IoT数据存储在MySQL数据库中。MySQL是一个关系型数据库,它的技术优势包括高效的数据存储和查询性能,灵活的数据结构,以及对SQL标准的广泛支持。

数据经过第二环节的数据采集层接收后,通过JDBC(Java DatabaseConnectivity Java数据库连接)直接将采集到的数据存入到MYSQL中,以可燃气体监测数据为例,在MySQL中创建数据库idata及数据表zxyb,数据表1为设计监测数据MySQL数据表结构如下:

其中,ID与在线仪表中设置的ID保持一致并全局唯一,name区分上报数据类型,其他字段视检测情况添加。最终存入到数据表2中的监测上报数据,表2数据如下:

②ODBC Client和OPC Server的数据传输:通过IGS的ODBC Client从MySQL数据库获取数据,通过使用标准化的ODBC和OPC技术,系统可以容易地与其他工业设备和系统集成,也有利于未来的扩展和升级;最后通过OPC Server将数据传输到SCADA系统的PDB过程数据库。这个步骤中,ODBC Client和OPC Server都充当了数据的中间传输者,它们的技术优势包括数据的统一接口和标准化的传输协议,这有助于降低系统集成的复杂性。ODBCClient关键配置如图10所示;

最终通过ODBC传入到OPC Server的实时数据如图11所示;

③SCADA系统的数据处理和显示:最后,SCADA系统创建AI模拟量点位并从PDB过程数据库中获取数据,通过数据链接等技术将数据实时呈现在ifix组态界面。SCADA系统的技术优势包括实时的数据处理和显示能力,强大的故障诊断和运行优化功能,以及广泛的工业应用支持。

通过这一系列的技术步骤,本发明实现了从NB-IoT设备到SCADA系统的数据流通,从而实现对水环境监测的实时远程控制和管理,其优势包括实时性、远程管理、数据统计和分析、易于扩展和集成等。

3、数据展示

SCADA系统是工业自动化系统的核心部分,其数据展示和利用功能非常强大,数据通过上述技术方案到达SCADA后,本发明从以下几点对其进行展示和利用:

1)监测数据结合分布式SCADA架构:对整个生产过程进行优化和控制,进而实现整个生产过程的联动,如图9所示,分布式SCADA与NB-IoT的应用架构图,架构如下:

设备层(Device):也被称为现场设备层。在这一层,有各种各样的设备,包括在线仪表、泵、阀和其他工业设备。这些设备是生产过程中的基本单元,可以采集、接收和处理信息。例如,在线仪表的传感器可以测量温度、压力、湿度等物理量。

数据采集服务:数据采集服务的主要任务是收集设备层产生的数据。包括从各种传感器收集的实时监测数据,以及设备状态和故障代码等信息。数据采集可以通过有线或无线通信完成,协议有Modbus、Profibus、Ethernet/IP等。数据采集层的组件包括PLC(可编程逻辑控制器)、RTU(远程终端单元)和其他数据采集设备。这些数据最终通过IGS OPCServer接收到服务器端。

分站:在该分布式SCADA系统中,分站起到一个数据汇总和初步处理的作用。分站通常位于设备或数据采集层的上一级,对采集的数据进行缓存、预处理和初步的分析展示,它们分布在不同的地理位置,每个分站有一套自己独立的SCADA操作员站用来采集本站点内的实时监测数据,一个工程一般有多个分站。

总站:总站是SCADA系统的核心,它负责接收分站发送的所有数据,同时它也通过IGS直接采集各分站的实时数据,在总站可以监视和控制所有分站的设备,各个分控中心负责采集本站点范围内的数据,最终汇入到总站,总站采用主备结构保证数据的安全,最终通过多个操作员站(客户端)进行监视和操作。此外,利用本发明采集上来的数据,结合SCADA的远控,可进一步实现基于实时数据自动化控制。总站配备有强大的计算资源和大容量的存储资源。

2)实时数据显示:SCADA系统可以实时地显示从各种在线仪表收集到的数据。这种实时显示功能可以帮助运维人员立即了解系统的当前状态,及时进行必要的调整。本发明主要采用OCX控件、OLE对象、数据链接等技术进行数据的关联展示(如ZXYB.CH4.F_CV代表从在线仪表传输上来的CH4的实时数据值,其中F_CV为组态软件的实时数据的固定后缀,不同组态软件后缀不一样)

SCADA系统的数据处理和显示:最后,在SCADA系统的过程数据库PDB中,创建AI模拟量点位(AI代表模拟输入(Analog Input)。这种点位类型用于接收连续变化的模拟信号;点位是用于标识和表示一个数据值的唯一地址或名称。每个模拟量或数字量都有一个唯一的点位,以便系统能够准确地识别和访问该数据。例如1号进水泵房的1号液位计采集到的值对应的点位为:ZXYB.JSBF1.YW1,其中,ZXYB代表该点位对应的设备类型是在线仪表设备,JSBF1代表1#进水泵房,YW1代表1号液位计的数据),同时设置点位的刷新频率、上下限值等参数,设置完成后,开发scada画面,在画面中通过ocx控件、ole对象等方式,设置其数据源属性值为上面的点位标签,从过程数据库中获取到该监测数据,最终实时呈现在组态软件ifix中。

3)历史数据存储和回放:SCADA系统可以存储大量的历史数据,并且可以方便地回放历史数据。这对于系统的故障诊断、性能分析和优化都非常重要。本发明采用Historian历史库来实现历史数据的收集、存储、分析和应用支持,其核心思想是压缩那些与既定趋势保持一致的数据,只有当数据变化超出了一定的阈值,才会存储一个新的数据点,(如SCADA历史曲线所需要的实时及历史监测数据、用户报表所需要的周期性统计到的监测值等),压缩原理为:压缩那些与既定趋势保持一致的数据,只有当数据变化超出了一定的阈值,才会存储一个新的数据点,例如:设置可接受数据波动的阈值为0.5,仪表监测数据第一次上报为12.2,第二次上报为12.3,此时,12.3与上次监测值相差0.1,小于阈值,则无需存储,只有当监测值>=12.7或者<=11.8时才将其当作新的采集值进行存储

设立一个压缩因子C(即上述中的阈值),对于数据点X,计算其斜率:

kx=(Yx-Yb)/(Xx-Xb)

如果|kx-k|>C,那么存储X点并以X为新的起始点,否则忽略X点。

kx:表示数据点之间的斜率。在旋转门压缩算法中,斜率用来判断数据点是否应该被保留或丢弃。

Yx:表示当前数据点的Y轴值,通常是要存储的数据值。

Yb:表示前一个保留的数据点的Y轴值,也称为“基准点”,它是当前数据点的前一个保留数据点。

Xx:表示当前数据点的X轴值,通常是时间戳或数据点的序号。

Xb:表示前一个保留的数据点的X轴值,也称为“基准点”,它是当前数据点的前一个保留数据点的时间戳或序号。

以可燃气体检测数据为例,新建历史数据标签并加入到历史库,历史数据存储关键配置如下,主要针对标签名称、采集周期、单位等参数项,如图12所示,

添加完成的标签将以配置的周期进行压缩存储,最终提供对外API为上层服务提供数据支撑。利用Historian历史库,可以高效地存储长期的监测数据,并通过旋转门压缩算法进行高效的存储。这解决了长期存储和高效利用监测数据的问题。

本发明实施例一种基于NB-IoT和SCADA的流域水环境监测系统,解决了现有流域水环境监测技术中监测成本高、覆盖性小、设备连接数量有限、数据利用低、数据处理和展示的实时性和准确性的问题;通过SCADA与NB-IoT技术与架构的深度融合,更强的覆盖能力和更多设备的接入:通过使用NB-IoT技术,实现更广的覆盖范围和更多设备的接入;NB-IoT支持大量设备的同时接入,有助于提高监测网络的密度和覆盖性,解决了传统水环境监测网络覆盖范围有限,设备接入数量受限的技术问题;采用NB-IoT设备具有低功耗的特性,通过DRX模式,NB-IoT设备可以在不需要接收或者发送数据时进入低功耗状态,低能耗和持久运行,解决了传统监测设备能耗大,需要频繁更换电池或电源的问题;利用MQTT协议和Netty框架,数据可以快速,高效地从NB-IoT设备传输到数据采集层的服务器,并进行处理;高效及稳定的数据传输和处理解决了数据传输和处理效率低,可能导致数据丢失或延迟的问题;此外,通过和分布式SCADA系统的深度融合,使整个数据处理过程更加稳定、容错性高;通过SCADA系统,实时接收和处理在线仪表的监测数据,实现远程监控和管理,提高监测的效率和准确性,同时进行数据的统计分析、故障诊断、运行优化;利用Historian历史库,可以高效地存储长期的监测数据,并通过旋转门压缩算法进行高效的存储。

相关技术
  • 一种基于NB-IOT技术粮仓监测系统及方法
  • 一种基于NB-IoT的生猪生长关键参数监测系统及方法
  • 一种用于流域环境监测的水环境监测取样系统
  • 一种用于流域环境监测的水环境监测取样系统
技术分类

06120116501068