当前位置: 首页 > news >正文

docker版jxTMS使用指南:使用jxTMS采集数据之一

本文讲解了如何jxTMS的数据采集与处理框架并介绍了如何用来采集数据,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容

docker版本的使用,请查看:docker版jxTMS使用指南

4.0版jxTMS的说明,请查看:4.0版升级内容

4.2版jxTMS的说明,请查看:4.2版升级内容

使用jxTMS搭建一个数据采集系统,相对来说较为简单,因为jxTMS已经内置了一个完整的数据采集处理读取的框架:

数据处理框架

所演示的框架图默认是现场配置有数据采集器,采集了数据后通过MQTT发送到MQTT服务器,然后数据采集系统通过MQTT来收取数据。

注:现场数据的读取与推送和现场设备以及数据采集器、DTU等密切相关,所以不放入本框架中进行讨论

上述框架前面已经讲解过,所以本文只做总体的、针对性的解说,大约分为三篇文章。

站点与站点数据的收取

站点主要是用于业务管理上的概念,如开通、关停、加载并配置下属设备等,同时提供对设备进行管理与操作的接口。其在数据采集与处理方面主要有两个功能:

  • 统一提供本站现场采集到的设备数据的传送方式

  • 对下属各设备处理完毕的数据根据业务需要进行综合处理,如电力监控,就是从下属的配电系统、柴油发电机、储能系统等抽取最核心的监控指标综合在一起进行保存并提供给外界的监控仪表盘等

目前,现场与本站之间多采取MQTT协议进行数据的传输,简单、方便,同时还可提供一定的QoS,关键是支持MQTT的DTU非常多,便于降低现场采集系统的建设成本。

目前,jxTMS默认以站点名为主题来接收站点数据【相关工作在main.py中完成,也就是说,其实这一点不属于数据采集处理框架】,所以通过MQTT收取数据非常简单,就是以主题名来查找站点,找到后将收到的字节流的消息原封不动的递交给该站点。

站点接收到数据后,需要根据本站现场的数据采集器的打包方式,针对性的对字节流做初步的处理以从字节流中提取出设备标识,然后将处理后的数据递交给相应的设备。

目前,有三种站点类型已经预置了相应的初步处理方式:

  • site类型,最基本的站点类,是单设备无采集器直接MQTT推送型站点。site只是将字节流以utf-8进行编码为字符串后,直接递交给自己下属的设备【就一台】即可

  • site_multiDev_push类型,是多设备MQTT推送型站点。该类型默认接收到某设备数据后即将其转换为json格式,并添加dn【设备名】后立即通过MQTT推送

  • site_packet类型,是多设备自定义协议包MQTT推送型站点。该类型默认接收到某设备数据后即将其视为设备类型为名的数据集,然后打包后立即通过MQTT推送。所以将字节流以自定义协议包进行解码,就可得到相应设备的dict形式的数据

注:现场的数据采集器可以定义诸如stateRep【状态报告】之类的系统用数据包来发送其它类型的数据,这些数据一般由站点做针对性处理

在之前的【站点的调整】一文中,我们还介绍有site_multiDev_poll型站点,该类型的站点主要是用于现场对modbus之类的设备进行设备采集时使用,即site_multiDev_poll目前主要考虑用于现场的数据采集器的部署使用,不归入后端数据框架中讨论。

site_multiDev_push代码:

class site_multiDev_push(site):def __init__(self, type, name, saveDataInterval=15):super(site_multiDev_push,self).__init__(type,name,saveDataInterval=saveDataInterval)def receive(self, bsMsg):s = str(bsMsg,"utf8")js = json.loads(s)dn = js.get('dn')if not dn is None:d = self.getDev(dn)if not d is None:rd = d.receive(js)if not rd is None:#默认回调了站点的receiveData函数来完成站点的数据综合与处理self.receiveData(dn,rd)

而某站点的代码为:

from jx.site import siteclass site_xmk(site):def __init__(self, name):super(site_xmk,self).__init__('site_xmk',name)def addDevice(self, d):#站点用设备的类型做识别关键字self._allDev[d.type()] = ddef receive(self, bsMsg):#此站点的设备数据都是ascii码文本s = str(bsMsg,"utf8")try:#波流仪的数据以$PSVSW为识别冠字offset = s.index('$PSVSW')d = self._allDev.get('svs_original')except:#此站点就两种类型的设备,不是波流仪就是气象仪d = self._allDev.get('WSx_XDR_original')#此站点的数据采集模式是两设备直接通过串口周期性自动发送数据#DTU直接将串口数据透传给MQTT,因此直接递交给相应设备即可d.receive(s)#下面三行代码是注册本类型的站点
def _newSite_xmk(name):return site_xmk(name)site.register('site_xmk',_newSite_xmk)

站点本身也提供了站点数据的处理、保存:

#如果需要保存数据,则返回保存站点数据的数据对象
def newOrmData(self):#返回None则不再执行站点数据的保存动作return None#本站点的数据综合处理函数,下属社会收到并处理完自己的数据后调用站点的receiveData函数回送给站点
def onReceive(self, dn, data):#onReceive即用来完成站点本身的数据处理动作,默认不做任何处理return data,True#接收下属设备回送的数据,然后完成一系列相关动作
def receiveData(self, dn, data):#self._data和data并不一致,data有可能是事件通知、有可能是命令等等rd,self._newData = self.onReceive(dn,data)if (not self._ormData is None) and self._newData:self._lock.acquire()try:for k in rd:#将数据保存到自己的_data中,_saveData会自动进行保存self._data[k] = rd[k]finally:self._lock.release()if self._scheduler_saveData is None:#初始化时如果指定了saveDataInterval>0,则为周期性保存,否则就实时保存self._saveData()

参考资料:

jxTMS设计思想

jxTMS编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

相关文章:

docker版jxTMS使用指南:使用jxTMS采集数据之一

本文讲解了如何jxTMS的数据采集与处理框架并介绍了如何用来采集数据,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查…...

【js】日期、时间正则匹配

1、日期的正则表达式 格式:2023-08-11 var reg /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/; var regExp new RegExp(reg); if(!regExp.test(value)){alert("日期格式不正确");return; }2、时间的正则表达式 格式:23:00:00…...

专利研读-SIMD系列-向量化引擎

专利研读-SIMD系列-向量化引擎 1、专利内容 阿里巴巴的专利:向量化处理数据的方法及装置,主要思想为:对于行存表或行、列存混合存储的查询场景,需要手工将行存表转换成列存表再在列存表基础上进行向量化处理,这种方式代…...

C#--设计模式之单例模式

单例模式大概是所有设计模式中最简单的一种,如果在面试时被问及熟悉哪些设计模式,你可能第一个答的就是单例模式。 单例模式的实现分为两种: 饿汉式:在静态构造函数执行时就立即实例化。懒汉式:在程序执行过程中第一…...

RWEQ风蚀方程模型与ArcGIS数据处理Python代码库添加结合理论研究和科研实践

RWEQ模型是应用比较普遍的能适应大区域定量估算风蚀量的模型。该模型是基于大量野外实验的一种经验模型,在实际测定风力导致的土壤侵蚀量以及当地的气象、地表植被、土壤湿度、地表的结皮和地表的可蚀性等因子的基础上得出的一个经验方程。 1、掌握土壤风蚀模型的原…...

基于STM32微控制器的物联网(IoT)节点设计与实现

基于STM32微控制器的物联网(IoT)节点的设计和实现。我们讨论物联网节点的基本概念和功能,并详细介绍了STM32微控制器的特点和优势。然后,我们将探讨如何使用STM32开发环境和相关的硬件模块来设计和实现一个完整的物联网节点。最后,我们将提供一个示例代码,展示如何在STM3…...

篇二十一:中介者模式:解耦对象之间的交互

篇二十一:"中介者模式:解耦对象之间的交互" 开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 另外有2本不错的关于设计模式…...

tomcat的多实例,动静分离(web服务基础结束)

多实例 多实例就是在一台服务器上有多个tomcat的服务(核心是改端口) 实验:多实例 安装步骤 1.安装好 jdk 2.安装 tomcat cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mkdir /usr/local/tomcat mv apache-tomcat-9.0.16 /usr/local/tomca…...

LeetCode150道面试经典题--判断子序列(简单)

1.题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序…...

kubeadml 安装 k8s

目录 一:kubeadml 安装 k8s 1、网络环境 2、 环境准备 3、 所有节点安装docker 4、所有节点安装kubeadm,kubelet和kubectl ​5、部署K8S集群 6、测试 二: 部署 Dashboard 一:kubeadml 安装 k8s 1、网络环境 master&am…...

考研C语言进阶题库——更新16-20题

目录 16计算t11/2...1/n-11/n 17计算1997! 18计算t1-122-133-...-1nn 19相传国际象棋是古印度舍罕王的宰相达依尔发明的.舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐. 这位聪明的宰相指着8*8共64格的象棋说:陛下,请您赏给我一些麦子吧. 就在棋盘的第1格放1粒…...

【变形金刚01】attention和transformer所有信息

图1.来源:Arseny Togulev在Unsplash上的照片 一、说明 这是一篇 长文 ,几乎讨论了人们需要了解的有关注意力机制的所有信息,包括自我注意、查询、键、值、多头注意力、屏蔽多头注意力和转换器,包括有关 BERT 和 GPT 的一些细节。因…...

面试热题(路径总和II)

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 在这里给大家提供两种方法进行思考,第一种方法是递归,第二种方式使用回溯的方式进行爆…...

测试 tensorflow 1.x 的一个demo 01

tensorflow 1.0的示例代码 demo_01.py import tensorflow as tf import os os.environ[TF_CPP_MIN_LOG_LEVEL]2def tf114_demo():a 3b 4c a bprint("a b in py ",c)a_t tf.constant(3)b_t tf.constant(4)c_t a_t b_tprint("TensorFlow add a_t b_t &…...

达蒙DM数据库使用经验

DM表/字段注释 注:dm数据库无法在建表的同时为字段名添加注释 //为表添加注释 comment on table 库名.表名 is 表注释; //为表字段添加注释 comment on column 库名.表名.列名 is 列注释;DM查询错误:无效的表或视图 1,确认表一定存在 2&am…...

Redis—集群

目录标题 主从复制第一次同步命令传播分担主服务器压力增量复制总结面试题什么是Redis主从复制Redis主从复制的原理Redis主从复制的优点Redis主从复制的缺点Redis主从复制的配置步骤Redis主从复制的同步策略主从节点是长还是短连接判断某个节点是否正常工作主从复制架构中&…...

【C语言】数据在内存中的存储详解

文章目录 一、什么是数据类型二、类型的基本归类三、 整型在内存中的存储1.原码、反码、补码2.大小端(1)什么是大小端(2)为什么会有大小端 四、浮点型在内存中的存储1. 浮点数存储规则 五、练习1.2.3.4.5.6.7. 一、什么是数据类型 我们可以把数据类型想象为一个矩形盒子&#x…...

PIC单片机配置字的设置

PIC单片机配置字的设置 PIC系列单片机,其芯片内部大都设置有一个特殊的程序存储单元,地址根据不同的单片机而定,此存储单元用来由单片机用户自由配置或定义单片机内部的一些功能电路单元的性能选项,所以被称之为系统配置字。目前PIC单片机系统配置字的方法有两种,一种是利…...

JavaWeb-Servlet服务连接器(一)

目录 1.Servlet生命周期 2.Servlet的配置 3.Servlet的常用方法 4.Servlet体系结构 5.HTTP请求报文 6.HTTP响应报文 1.Servlet生命周期 Servlet(Server Applet)是Java Servlet的简称。其主要的功能是交互式地浏览和修改数据,生成一些动态…...

新华三超融合态势感知标准版

产品概述: H3C SecCenter CSAP-XS 超融合态势感知一体机产品集合了态势感知和安全流量分析探针设备能无需复杂配置;态势感知平台具备强大的安全分析和可视化呈现功能;同时具备远程专家会诊功能,通过云端协同实现外部安全服务资源的…...

C++函数重载和缺省参数:告别‘iAdd’和‘dAdd’,写出更优雅的代码

C函数重载与缺省参数:从C语言到现代编程的优雅进化 1. 告别iAdd与dAdd:C的函数命名革命 还记得那些年我们被迫写下的iAdd、dAdd、fAdd吗?在C语言的世界里,每个函数名都必须独一无二,即使它们实现的是完全相同的逻辑。这…...

VSCode + LaTeX Workshop:打造比 TexStudio 更顺手的 Linux 论文写作环境

VSCode LaTeX Workshop:打造比 TexStudio 更顺手的 Linux 论文写作环境 对于长期在Linux环境下撰写学术论文或技术报告的研究人员来说,编辑器的选择直接影响写作效率和体验。虽然TexStudio一直是LaTeX用户的首选,但VSCode配合LaTeX Workshop…...

为什么你的VSCode AI调试总卡在“Loading…”?(实测17种配置组合,仅3种通过LLM上下文一致性验证)

更多请点击: https://intelliparadigm.com 第一章:为什么你的VSCode AI调试总卡在“Loading…”?(实测17种配置组合,仅3种通过LLM上下文一致性验证) VSCode 中集成 AI 调试插件(如 GitHub Copi…...

Rust的匹配中的类型指定

Rust的匹配机制是其语言设计中极具特色的一部分,而类型指定在匹配中的灵活运用更是让开发者能够编写出既安全又高效的代码。通过模式匹配,Rust允许开发者对值的结构进行解构,并根据不同的类型或值执行不同的逻辑。这种能力不仅提升了代码的可…...

保姆级教程:在VMware 17 Pro上绕过TPM 2.0,顺利安装Windows 11专业版

虚拟机玩家必备:VMware 17 Pro安装Win11全攻略与TPM绕过技巧 每次Windows重大版本更新,总有一批技术爱好者迫不及待想尝鲜。Windows 11带来的全新界面和功能确实诱人,但那个恼人的TPM 2.0要求却把不少用户挡在了门外。别担心,今天…...

收藏!2026 年版大模型零基础入门指南,程序员小白快速学懂 AI 大模型

当下AI大模型赛道持续火爆,已然成为人工智能领域的核心发展方向,行业热度居高不下,不仅吸引了大量技术从业者关注,越来越多零基础小白、传统后端程序员,都想要入局大模型方向实现技能升级与职业转型。 不少新手都很困惑…...

MiniCPM-O-4_5-GGUF 全解析

一、模型简介MiniCPM-O-4_5-GGUF 是面壁智能(OpenBMB)推出的 MiniCPM-O-4.5 全模态大模型的轻量化量化版本,采用 GGUF 格式优化,专为端侧与低资源设备设计,是当前开源社区中性能最强、部署门槛最低的全模态小参数模型之…...

程序员必看!网络安全薪资高达5万+,这份免费学习资源助你转行高薪领域,建议收藏!

《程序员必看!网络安全薪资高达5万,这份免费学习资源助你转行高薪领域,建议收藏!》 本文分析了程序员工资水平及影响因素,指出技术实力和软实力是薪资差异的关键。特别指出网络安全领域人才缺口高达95万,薪…...

森利威尔SL7100B PWM及线性调光低压差降压恒流IC 外围简单无需电感 成本优势明显

SL7100B是一款集成了调光功能的线性降压LED恒流驱动器,专为简化LED照明应用设计而打造。该芯片以其低静态电流、宽输入电压范围以及高度集成的保护机制,在LED驱动领域脱颖而出。其独特之处在于,仅需外接一个电阻即可构成完整的LED恒流驱动电路…...

微电网多层控制架构设计的发展趋势

在“双碳”战略深入推进与新型电力系统加速建设的背景下,高比例分布式新能源(光伏、风电等)规模化渗透,交直流混合微网、多能互补微网、集群微网成为主流形态,微电网的运行场景日益复杂,对控制架构的稳定性…...