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

「直播回放」使用 PLC + OPC + TDengine,快速搭建烟草生产监测系统

在烟草工业场景里,多数设备的自动控制都是通过 PLC 可编程逻辑控制器来实现的,PLC 再将采集的数据汇聚至 OPC 服务器。传统的 PI System、实时数据库、组态软件等与 OPC 相连,提供分析、可视化、报警等功能,这类系统存在一些问题:

  1. 收费是按照测点数进行的,价格昂贵,而且需要有商务谈判才能开始 PoC,无法在购买决策前做足够的验证测试工作;
  2. 系统封闭,如果想集成一个新的 BI、AI 或可视化工具,需要原厂商的支持,十分困难;
  3. 数据的实时分发、分享功能薄弱;
  4. 架构落后,往往基于 Windows,部署维护还十分复杂。

借助 TDengine 3.0 云服务或 TDengine Enterprise(企业版),上述问题便可迎刃而解。作为物联网、工业大数据平台,TDengine 内嵌对 OPC UA/DA、MQTT 等协议的支持。通过网页上简单的配置,无需一行代码,就能将 PLC 采集的数据通过 OPC 连接器源源不断的写入 TDengine,再通过与可视化工具 Grafana、BI 工具(如 Power BI、帆软、永洪)的无缝集成,就可以提供数据的可视化、报表、报警等系列功能。而且由于 TDengine 支持标准的 JDBC、ODBC 接口,众多的 BI、AI 和报表工具都可以无缝集成,而不被厂商绑定。

同时,你可以使用 TDengine Cloud,无商务谈判,免费注册,几分钟内就可以搭建好整个系统,验证是否工作,无任何前期费用和风险。如果验证没问题,可以继续使用云服务,也可以切换到 TDengine Enterprise 做本地化部署。对于云服务,5 万个测点,如果数据采集间隔是一秒,最基础的 TDengine Cloud 入门级就可满足要求,一个月仅需 1200 元。与传统昂贵的工业软件相比,大大降低了投入的成本。

本文以 TDengine Cloud 为例,介绍该方案在烟草制丝车间的具体实现。

在下面例子里,我们将从 OPC Server 采集三个指标:冷床出口水分、计量秤工艺流量及烘丝出口温度,并希望在可视化界面实现以下功能:

  1. 实时监测数采完备率和在线状态:避免数据采集出现异常时不能及时观察到,导致长时间原始数据缺失
  2. 实时监测各指标值、变化趋势曲线:及时掌握生产过程中关键指标的变化

本文中可视化工具选择了开源的 Grafana,你也可以使用国产的 BI 软件来实现。这个方案也适用于 TDengine Enterprise 企业版。

1. TDengine Cloud OPC 接入介绍

为方便不同数据源的接入,涛思打造了一套数据接入方案来接入各种不同类型的数据源。它的核心功能组件是 taosExplorer(TDengine Cloud 为控制台)、taosX Agent 及各类数据源连接器。TDengine 支持两种 OPC 接入:OPC UA、OPC DA。

需要注意的是,TDengine Cloud 仅支持代理模式接入各类数据源。TDengine Enterprise 则是直连、代理两种连接模式均支持。

以某个工厂为例,它的数据中心部署在工厂内部(车间机房、工厂中心机房),各车间通过 OPC 向外提供的数据服务和数据中心处于同一内部网络,这种情况可采用直连模式。如果该工厂的数据中心部署在云端(TDengine Cloud、共有云、上级集团私有云),且工厂与云端之间没有 VPN 连接时,这种情形可采用代理模式。

下面以 TDengine Cloud 云服务+代理模式为例,介绍如何快速搭建 OPC UA+TDengine+Grafana 环境,实现工业 OPC 数据采集的可视化。

2. 部署环境

本文的部署拓扑图如下:

  • 本地 MacBook Pro,Grafana 部署在本机
  • taosX Agent 代理、OPC UA Simulation Server 部署在虚拟机 vm1 上,Ubuntu 20.04
  • TDengine 采用 TDengine Cloud 云服务入门版

提示:

  • TDengine Cloud 的注册或登录请参照 https://cloud.taosdata.com/login
  • OPC UA Server 在本文中将采用 PROSYS OPCUA Simulation Server 5.4.6,下载地址为 Prosys OPC UA Simulation Server - Prosys OPC
  • Grafana 下载地址为 Download Grafana | Grafana Labs

Grafana 数据源安装

Grafana 安装后,需要安装 TDengine 的数据源插件,有两种方式供选择:

  • 在 Grafana Configuration – Datasource 页面中,搜索 TDengine,完成安装【推荐】
  • 通过运行下面的命令完成该插件安装【以 Linux 为例】
bash -c "$(curl -fsSL https://raw.githubusercontent.com/taosdata/grafanaplugin/master/install.sh)"

3. 配置OPC UA Server

为方便展示,本文将采用 PROSYS OPC UA Simulation Server 的功能,模拟生成 10 个双精度点位的随机数。

在 MacBook Pro 上,启动 PROSYS OPC UA Simulation Server。

切换至 Objects 页面,右键点击 Random:BaseDataVariableType,Duplicate Node 创建 10 个采集点位,均为双精度浮点数。完成此步骤后,将生成节点地址 ns=3;i=1008~1017。

生成的点位默认随机数范围是 [-2,2],如需修改,可点击每个点位 Value 标签进行设置。默认的数值生成间隔为 1000ms。

4. 创建代理并部署 taosX Agent

登录 TDengine Cloud 后进入控制台,点击数据写入->数据源->创建新的代理

根据提示,在 vm1 上下载并部署 taosX Agent。

tar xf taosx-agent-xxx-linux-x64.tar.gz
cd taosx-agent-xxx-linux-x64
./install.sh

设置代理名称:agent-vm1

获得 Endpoint 和 token,将其复制、粘贴至 vm1 上的 taosX Agent 的配置文件中:/etc/taos/agent.toml

在 vm1 上启动 taosX Agent:

systemctl start taosx-agent

5. 数据准备

在配置 OPC UA 采集任务之前,还有两个准备工作需要完成:

  • 在 TDengine Cloud 创建 opcdemo 库
  • 创建批量导入用的采集点位 CSV 文件

5.1 创建 opcdemo 库

登录 TDengine Cloud 后进入控制台,点击数据浏览器-> + 创建数据库,输入名称 opcdemo、设置 CACHEMODEL 为 both 后,完成创建。

5.2 创建点位 CSV 文件

为方便批量导入采集点位,TDengine Cloud 提供了以 CSV 文件批量导入点位信息的功能。

根据前面的 OPC UA Simulation Server 创建的 10 个点位信息,创建 CSV 文件。

文件填写说明:

  • point_id: OPC 点位地址
  • tbname: 该点位地址对应 TDengine 中的子表名
  • type: 该点位地址值的数据类型,对应普通列 val。常见的数据类型有 int/bigint/float/double/varchar/nchar/bool,其中 varchar/ncahr 需给出最大允许长度,如 varchar(50)/nchar(50)
  • stable: 子表所属的超级表名
  • 时间戳列:
    • ts_col: OPC 原始采集时间戳的列名,默认 ts,默认为首列时间戳
    • received_ts_col: 【可选】TDengine 接收时间戳对应的列名
    • 一旦配置了 received_ts_col 列,该列将取代 ts_col 成为首列时间戳,ts_col 列将做为普通列保留
  • 普通列:
    • val 列:存放采集值,类型由用户定义,本文中类型为 double
    • quality 列:质量信息,INT 型,系统默认自动创建
  • tag:: 标签列定义,以tag::nchar(10)::unit为例,将创建一个名为 unit,类型为 nchar(10) 的标签列。需要说明的是,每张超级表默认创建两个标签列:point_id VARCHAR(256), point_name VARCHAR(256)
信息点编码,OPC TAG点地址,数据类型,对应超级表表名,OPC原始时间列名,标签列1
tbname,point_id,type,stable,ts_col,tag::nchar(10)::unit
d_1008,ns=3;i=1008,double,stb_double,ts,%H
d_1009,ns=3;i=1009,double,stb_double,ts,kg/h
d_1010,ns=3;i=1010,double,stb_double,ts,℃
d_1011,ns=3;i=1011,double,stb_double,ts,%H
d_1012,ns=3;i=1012,double,stb_double,ts,kg/h
d_1013,ns=3;i=1013,double,stb_double,ts,℃
d_1014,ns=3;i=1014,double,stb_double,ts,%H
d_1015,ns=3;i=1015,double,stb_double,ts,kg/h
d_1016,ns=3;i=1016,double,stb_double,ts,℃
d_1017,ns=3;i=1017,double,stb_double,ts,℃

以上 CSV 文件成功导入后,将在 TDengine 中在指定的库中(本文为 opcdemo)创建一张名为 stb_double 的超级表,并以之为模板创建 10 张子表,名为 d_1008/d_1009…/d_1017。

taos> desc stb_double;field              |          type          |   length    |    note    |
=====================================================================================ts                             | TIMESTAMP              |           8 |            |quality                        | INT                    |           4 |            |val                            | DOUBLE                 |           8 |            |point_id                       | VARCHAR                |         256 | TAG        |point_name                     | VARCHAR                |         256 | TAG        |unit                           | NCHAR                  |          10 | TAG        |
Query OK, 6 row(s) in set (0.008236s)

6. 创建数据采集任务

登入控制台,点击数据写入->数据源->添加数据源

填写数据源名称,选择类型:OPC-UA,代理选刚新建的代理 agent-vm1,目标数据库 opcdemo,输入 OPC UA Server 的服务地址。

本文代理模式下,OPC UA Server 部署在vm1上,服务地址填写 127.0.0.1 即可,端口号及详细信息参见 PROSYS Simulation Server 的 Status 页面。

点击“选择文件”按钮,进入 CSV 文件导入界面。

采集间隔设置为 1 秒,采集模式设置为 observe。

本次 CSV 共采集 10 个点位,为优化写入性能,将批次大小调整为 10。如有必要,可选择开启 Debug 日志。

7. 数据采集验证

登入控制台,点击数据浏览器->Sql,执行多次最新数据查询语句,观察查询结果。如结果行时间戳单调递增,则表示数据采集链路工作正常,数据已正常入库了。

select last_row(*) from opcdemo.stb_double;

8. 数据可视化

Grafana 部署在本地 MacBook Pro 上,希望访问云服务上的 TDengine 实例中的 opcdemo 库的数据。根据云服务控制台【工具-Grafana】页面的指引,填入 Host、Cloud Token,删除 User、Password,保存退出。

选择 Import Dashboard,点击 Upload JSON file 导入 OPCDemo.json 文件(文件代码详见 OPC Demo-0925.json - TDengine | 涛思数据),选择对应的 TDengine 的 DataSource,完成 Dashboard 导入。

点击 OPC Demo Dashboard,打开该仪表板,可以观察到实时数据的变化。

9. OPC Demo Dashboard 使用说明

该仪表盘可以选择三个物理量作为监控对象:metric01、metric02、metric03,分别对应:冷床出口水分、工艺流量、烘丝出口温度,位于第一行,可通过下拉框选择;用户可设置设备离线阈值 offline_threshold(单位:秒),通过下拉框选择。

首行三个控件,分别是 metric01 的分钟级数采完备率、整体数采完备率以及在线状态。

在烟草生产行业,数据采集是否有缺漏,是企业数据运营管理的基础。在本文中我们提出两个指标来衡量数采完备:分钟级数采完备率、整体数采完备率。

9.1 分钟级数采完备率

算法说明:以一分钟划分时间窗口,分段计算当前时间区间(最近 5/15/30 分钟…)内 metric01 物理量采集点数除以 60 后的比值 – 默认数据生成间隔为 1000ms,即 1 秒。

select _wstart, count(*)/60 from opcdemo.$metric01 where _c0 >= $from and _c0 < $to interval(1m) limit 100 offset 1

9.2 整体数采完备率

算法说明:计算 metric01 物理量采集点数除以当前时间区间内秒级跨度的比值,spread 计算的时间值单位与 opcdemo 库的 precision 一致,默认为 ms。

select count(*)/(spread(_c0 )/1000+1) from opcdemo.$metric01 where _c0 >= $from and _c0 < $to

9.3 在线状态

设备是否按设计要求及时上报数据,可通过在线状态的监测来实现。如在指定时间阈值内无采集数据到达,显示红色 offline 以示警。

算法说明:判断 metric01 物理量在指定离线阈值内是否有数据入库,如有则判 Online,否则判 Offline。

select count(*) from (select last_row(*) from opcdemo.$metric01 where _c0 >= now-$offline_thresholds)

三个 Gauge 仪表表头控件,用于显示烘丝出口水分、工艺流量、烘丝出口温度的最新值。

select last_row(val) from opcdemo.$metric01

三个 TimeSeries 曲线控件,用于显示烘丝出口水分、工艺流量、烘丝出口温度在当前时间区间内的动态曲线,显示值为动态时间窗口内采集值的算术平均值。

select _wstart, avg(val) from opcdemo.$metric01 where _c0 >= $from and _c0 < $to interval($interval) fill(null)

以上以制丝车间的几个典型参数为例,介绍了如何利用 TDengine 的 OPC 连接器,将数据采集入库,并通过 Grafana 将这些参数以动态可视化方式直观地呈现出来。

掌握了以上基本语法,大家可以举一反三,结合自己的实际业务要求,不用写一行代码,就可以轻松地定制自己专属的 Grafana Dashboard,进行实时采集数据监控了。

10. 开发实时业务应用

前面阐述了如何基于 TDengine 实现 OPC 数采接入、持久化,以及基于 Grafana 方便地实现实时数据的可视化。估计会有读者想更进一步了解如何基于 TDengine 来开发实时业务应用,如 SPC 统计过程控制能否方便地实现呢?

下面我们简单介绍一下,如何利用 TDengine 来开发 SPC 实时业务应用。

SPC:统计过程控制是工业界广泛使用的质量分析工具,它采用统计技术对生产过程的某个物理量进行实时监控计算,快速识别出生产过程中产品质量的随机波动与异常波动,对生产过程的异常趋势提出预警,以便生产管理人员及时采取措施,消除异常,恢复过程的稳定,从而达到提高和控制质量的目的。

SPC 的第一步是计算标准差。TDengine 提供 stddev 标准差函数,方便用户快速从时序数据算得标准差 σ。

通过实时查询可获取指定时间段的时序数据,再通过 TDengine 内嵌函数即可直接算得:均值 μ(avg)、最大(max)、最小(min)、跨距(spread)。

结合前面算得的标准差 σ、该物理量设计的合格上下限范围 USL-LSL、目标值 T,可算得 SPC 各过程参数:Cp/Cr/Cpu/Cpl/Cpk/Cpm/Pp/Pr/Ppu/Ppl/Ppk/Ppm。

TDengine 提供各种主流编程语言如 C/C++、Java、Go、RUST、Python、C# 的驱动程序,也提供 RESTful 接口,支持 SQL 语法,因此应用开发的学习成本几乎为零,十分简单。

11. 总结

很多用户对于如何快速、便捷呈现工业现场的实时时序数据比较畏惧,觉得需要耗费大量人力进行应用开发才能实现,影响了时序数据快速有效的利用。其实,和 IT 运维采用 Telegraf+TDengine+Grafana 一样,烟草生产企业可以非常方便地利用 TDengine 的 OPC 接入能力,通过搭建 OPC+TDengine+Grafana 方案,快速实现低代码的业务数据监控。

需要说明的是,本文的例子是一较简单的场景:taosX Agent 代理和 OPC UA Server 部署在同一节点上。其他的场景可以从这个场景中演变而来,如:

  • taosX Agent 与 OPC UA Server 分别部署在不同节点上
  • 部署多个 taosX Agent,每个 Agent 对接多个 OPC UA Server

实际部署拓扑都可以按需规划、实施,取决于您实际的部署需求。

TDengine 不仅支持 OPC,也支持 MQTT, PI System, Wonderware 等数据源的无缝接入,受篇幅所限本文不多做介绍,仅分享基于 TDengine Cloud 提供 OPC+TDengine+Grafana 方案的具体实现。这套方案同样可以基于 TDengine Enterprise 企业版来实现,如果您有这样的需求,请联系北京涛思商务团队获取相关资源。

直播视频回放:

TDengine 行业产品经理聊聊以烟草行业为例,如何基于 PLC + OPC + TDengine 快速搭建工业生产监测系统_哔哩哔哩_bilibili


 了解更多 TDengine Database的具体细节,可在GitHub上查看相关源代码。

相关文章:

「直播回放」使用 PLC + OPC + TDengine,快速搭建烟草生产监测系统

在烟草工业场景里&#xff0c;多数设备的自动控制都是通过 PLC 可编程逻辑控制器来实现的&#xff0c;PLC 再将采集的数据汇聚至 OPC 服务器。传统的 PI System、实时数据库、组态软件等与 OPC 相连&#xff0c;提供分析、可视化、报警等功能&#xff0c;这类系统存在一些问题&…...

私域流量搭建与运营,技巧全攻略!

2023年是比拼运营深度和服务效率的一年&#xff0c;用户对于体验的期望值将持续增长&#xff0c;企业需提供无缝的客户体验&#xff0c;以推动增长、保障收入、确保客户忠诚度。在疫情新常态下&#xff0c;企业已构建起APP、小程序等一系列线上触点矩阵&#xff0c;而各个触点之…...

AWS SAP-C02教程0--课程概述

SAP是亚马逊云的解决方案架构师专业级认证&#xff0c;关于本课程&#xff0c;我会简述已下3点&#xff1a; 在本课程中按照自己的分类讲述考试相关的AWS产品&#xff0c;特别会注明每个产品在考试中可能出现的考点会对一些解决方案做对比&#xff0c;通过一些对比给出不同场景…...

RFC使用与WebService

RFC连接 CSDN RFC中引用类型组 http://t.csdnimg.cn/wQWAYhttp://t.csdnimg.cn/wQWAY 远程目标系统维护SM59 这里的类型指的是目标系统的系统类型(目标系统即rfc函数存在的系统). 类型2&#xff08;R/2连接&#xff09;&#xff0c;只需给出主机名&#xff0c;所有通信信息…...

打造全球化电商平台,多语言商城系统助您开拓海外市场

全球化进程的加速&#xff0c;越来越多的企业开始将目光投向海外市场。然而&#xff0c;语言和文化差异成为了企业面临的一大挑战。为了帮助企业顺利拓展海外业务&#xff0c;多语言商城系统应运而生。作为一种功能强大的电子商务平台&#xff0c;多语言商城系统具备以下关键功…...

【滑动窗口】篮里到底能装 “几个水果” 呢?

Problem: 904. 水果成篮 文章目录 题目分析算法原理分析暴力枚举 哈希表滑动窗口优化数组再度优化 复杂度Code 题目分析 首先我们来分析一下本题的思路 首先我们通过题目的描述来理解一下其要表达的含义&#xff0c;题目给到我们一个fruit数组&#xff0c;里面存放的是每棵树上…...

newstarctf2022week2

Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲 连接 MySQL 失败: Access denied for user rootlocalhost 这句话印在了背景&#xff0c;后来再进就没了&#xff0c;我猜测是报错注入 想办法传参 可以看到一个name2,试着传参 发现有回显三个字段…...

集群调度-01

目录 1、调度约束 2、Pod 是 Kubernetes 的基础单元&#xff0c;Pod 启动典型创建过程如下 2.1 工作机制 **** 2.2 调度过程 *** 2.3 Predicate 有一系列的常见的算法可以使用&#xff1a; ** 2.4 指定调度节点 1、调度约束 Kubernetes 是通过 List-Watch **…...

【软件工程】金管局计算机岗位——软件测试的分类(⭐⭐⭐⭐)

软件工程 软件测试的分类从是否关心软件内部结构和具体实现的角度划&#xff08;⭐⭐⭐⭐&#xff09;从是否执行代码角度划分&#xff08;⭐⭐&#xff09;从软件开发的过程按阶段划分&#xff08;⭐⭐⭐⭐&#xff09; 软件测试的分类 考点导读&#xff1a; 软件测试是软件工…...

Halcon WPF 开发学习笔记(1):Hello World小程序

文章目录 文章专栏视频链接Hello World训练图片训练目的 开始训练图像预处理导入图像三通道处理调用算子通道选取 滤波什么是好的滤波 增加对比度 区域选取阈值处理算子参数选择运行结果(红色为选择区域) 区域分割运行结果 特征筛选参数代码第二次&#xff0c;面积筛选 画选中十…...

pix2tex - LaTeX OCR 安装使用记录

系列文章目录 文章目录 系列文章目录前言一、安装二、使用三、少侠请留步&#xff0c;点赞、收藏、关注 前言 项目地址&#xff1a;这儿 一、安装 版本要求 Python: 3.7 PyTorch: >1.7.1 安装&#xff1a;pip install "pix2tex[gui]" 注意&#xff1a;Pyside6…...

前端框架Vue学习 ——(四)Axios

文章目录 Axios 介绍Axios 入门Vue项目中使用 Axios Axios 介绍 介绍: Axios 对原生的 Ajax 进行了封装&#xff0c;简化书写&#xff0c;快速开发。&#xff08;异步请求&#xff09; 官网: https://www.axios-http.cn/ 官网介绍&#xff1a;Axios 是一个基于 promise 网络请…...

将json数据导入到ES集群——解决方案对比填坑日记

需求 将写好的json数据。导入到es集群 数据说明 文件JSON数据&#xff0c;一行一个JSON。 {"id":"d2716ae8fba4e026c4bd9445c3f49e2c","lang":"zh","title":"吉美旅馆","content":"吉美..."}…...

C语言----------#pragma预处理分析

一、#pragma预处理分析 1、#pragma是编译器指示字&#xff0c;用于指示编译器完成一些特定的动作&#xff1b; 2、#pragma所定义的很多指示字是编译器和操作系统特有的&#xff1b; 3、#pragma在不同的编译器间是不可移植的&#xff1a; 预处理器将忽略它不认识的#pragma指…...

数据库中的时间django转换成None

原因 数据库中使用的是datetime[64] 的格式。精确的毫秒了。django默认的使用的是datetime.datetime.fromisoformat转换的。转换不了 使用原生查找 for raw in StockNominate.objects.raw("select id,code,strftime(%Y-%m-%d,date) as date from table_name; "):pr…...

八种流行的网络协议

1、HTTP&#xff08;超文本传输协议&#xff09;&#xff0c;HTTP 是一种用于获取 HTML 文档等资源的协议。它是 Web 上任何数据交换的基础&#xff0c;是一种客户端 - 服务器协议。 2、HTTP/3&#xff0c;HTTP/3 是 HTTP 的下一个重大修订版。它运行在 QUIC 上&#xff0c;QU…...

Qwt QwtKnob绘制旋钮

1.简介 QwtKnob是Qwt库中的一个类&#xff0c;用于绘制一个旋钮样式的仪表盘。它继承QwtAbstractSlider类&#xff0c;提供了一些额外的功能和样式&#xff0c;用于旋转和选择值。 以下是类继承关系&#xff1a; 2.常用方法 旋钮&#xff08;Knob&#xff09;相关的属性和方法…...

docker部署elk

目录 前言 一、创建程序工作路径 二、创建私有网络 三、部署elasticsearch 1.先搜速后下载 2.创建一个基础的容器&#xff08;此步骤是为了拷贝容器里的文件&#xff09; 3.拷贝文件到宿主机 3.1进入容器 3.2拷贝并授权 3.3删除基础容器 4.创建容器 5.访问9200测试 …...

护网蓝队初级面试题摘录(下)

小王学习录 1.设备误报如何处理&#xff1f;2.讲一下TOP10都有哪些3.SQL注入的原理和漏洞产生的原因&#xff1f;4.SQL注入的类型盲注类型&#xff1a; 5.简单讲一下防范SQL注入的方法和原理6.SQL注入有哪些绕过姿势&#xff1f;7.SQL注入攻击有哪些危害&#xff1f;6.XSS&…...

通过51单片机控制SG90舵机按角度正反转转动

一、前言 本文介绍如何通过51单片机控制SG90舵机实现角度的正反转转动。SG90舵机是一种常用的微型舵机&#xff0c;具有体积小、重量轻、结构简单等特点&#xff0c;被广泛应用于机器人、遥控模型和各种自动控制系统中。 使用51单片机&#xff08;STC89C52&#xff09;作为控…...

uniapp写一个计算器用于记账(微信小程序,APP)

提要&#xff1a;自己用uniapp写了一个记账小程序&#xff08;目前是小程序&#xff09;&#xff0c;写到计算器部分&#xff0c;在网上找了别人写的计算器&#xff0c;大多数逻辑都是最简单的&#xff0c;都不能满足一个记账计算器的基本逻辑。与其在网上找来找去&#xff0c;…...

前端的几种网络请求方式

网络请求 node编写接口 这里用到的几个包的作用 express&#xff1a;基于 Node.js 平台&#xff0c;快速、开放、极简的 Web 开发框架&#xff0c;官网&#xff1a;https://www.expressjs.com.cn/cors&#xff1a;用来解决跨域问题body-parser&#xff1a;可以通过 req.body…...

Kubernetes技术与架构-存储 4

如上所示&#xff0c;Kubernetes集群支持动态申请存储资源&#xff0c;即集群管理员可以按照实际的需求动态地申请存储资源&#xff0c;集群管理员需要事先定义一个或者多个StorageClass存储类型的资源&#xff0c;Pod中的容器实例直接引用事先定义的StorageClass存储类型的资源…...

jbase编译与部署的优化

上一篇的演示只是涉及自动编译业务脚本。演示时候工程编译是超级慢的。因为把静态资源放在了Web工程下&#xff0c;每次编译都要拷贝&#xff0c;运行起码是1分钟&#xff0c;不能忍受&#xff0c;为此思考工程结构改解决这个问题&#xff0c;顺带方便开发的发布。运行WebLoade…...

Filter 和 Listener

Filter 表示过滤器。是JavaWeb三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一。 过滤器可以把对资源的请求 拦截 下来。浏览器可以访问服务器上所有的资源&#xff0c;而在访问到这些资源之前可以使用过滤器拦截下来&#xff0c;也就是说在访问资源之前会先经…...

【正则表达式】中的“\b“

正则表达式是一种用于匹配字符串的强大工具&#xff0c;它可以用于各种编程语言中&#xff0c;可以用来在文本中查找、替换或验证符合某种规则的内容。 正则表达式中有很多特殊的符号&#xff0c;称为元字符&#xff0c;它们有着特殊的含义和作用。其中&#xff0c;“\b” 是其…...

FPGA高端项目:图像采集+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

目录 1、前言免责声明本项目特点 2、相关方案推荐我这里已有的 GT 高速接口解决方案我这里已有的以太网方案 3、设计思路框架设计框图视频源选择OV5640摄像头配置及采集动态彩条视频数据组包GTP 全网最细解读GTP 基本结构GTP 发送和接收处理流程GTP 的参考时钟GTP 发送接口GTP …...

数据库系统原理与实践 笔记 #7

文章目录 数据库系统原理与实践 笔记 #7数据库设计和E-R模型(续)转换为关系模式具有简单属性的实体集的表示复合属性多值属性联系集的表示模式的冗余—合并 实体-联系设计问题设计问题联系属性的布局 扩展的E-R特性特化概化属性继承特化/概化的设计约束聚集E-R图表示方法总结E-…...

【CesiumJS】(1)Hello world

介绍 Cesium 起源于2011年&#xff0c;初衷是航空软件公司(Analytical Graphics, Inc.)的一个团队要制作世界上最准确、性能最高且具有时间动态性的虚拟地球。取名"Cesium"是因为元素铯Cesium让原子钟非常准确&#xff08;1967年&#xff0c;人们依据铯原子的振动而对…...

Docker 学习路线 5:在 Docker 中实现数据持久化

Docker 可以运行隔离的容器&#xff0c;包括应用程序和其依赖项&#xff0c;与主机操作系统分离。默认情况下&#xff0c;容器是临时的&#xff0c;这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据&#xff0c;Docker 提供了各种数…...