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

数据库
0
0
<!--StartFragment--> 在烟草工业场景里,多数设备的自动控制都是通过 PLC 可编程逻辑控制器来实现的,PLC 再将采集的数据汇聚至 OPC 服务器。传统的 PI System、[实时数据库](https://www.taosdata.com/ "实时数据库")、组态软件等与 OPC 相连,提供分析、可视化、报警等功能,这类系统存在一些问题: 1. 收费是按照测点数进行的,价格昂贵,而且需要有商务谈判才能开始 PoC,无法在购买决策前做足够的验证测试工作; 2. 系统封闭,如果想集成一个新的 BI、AI 或可视化工具,需要原厂商的支持,十分困难; 3. 数据的实时分发、分享功能薄弱; 4. 架构落后,往往基于 Windows,部署维护还十分复杂。 借助 [TDengine](https://www.taosdata.com/ "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. 实时监测各指标值、变化趋势曲线:及时掌握生产过程中关键指标的变化 ![1.PNG](https://dev-media.amazoncloud.cn/78972ae6cb0a49c0a785d8e373178e8d_1.PNG "1.PNG") 本文中可视化工具选择了开源的 Grafana,你也可以使用国产的 BI 软件来实现。这个方案也适用于 TDengine Enterprise 企业版。 ## 1. TDengine Cloud OPC 接入介绍 为方便不同数据源的接入,涛思打造了一套数据接入方案来接入各种不同类型的数据源。它的核心功能组件是 taosExplorer(TDengine Cloud 为控制台)、taosX Agent 及各类数据源连接器。TDengine 支持两种 OPC 接入:OPC UA、OPC DA。 需要注意的是,TDengine Cloud 仅支持代理模式接入各类数据源。TDengine Enterprise 则是直连、代理两种连接模式均支持。 ![2.png](https://dev-media.amazoncloud.cn/6d78e71ed2554b89a96eafbcc54fa883_2.png "2.png") 以某个工厂为例,它的数据中心部署在工厂内部(车间机房、工厂中心机房),各车间通过 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 云服务入门版 ![3.png](https://dev-media.amazoncloud.cn/afe11f56297a4bc79c912b7077bd3d2c_3.png "3.png") 提示: * TDengine Cloud 的注册或登录请参照 <https://cloud.taosdata.com/login> * OPC UA Server 在本文中将采用 PROSYS OPCUA Simulation Server 5.4.6,下载地址为<https://www.prosysopc.com/products/opc-ua-simulation-server/> * Grafana 下载地址为 <https://grafana.com/grafana/download> ### 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。 ![4.PNG](https://dev-media.amazoncloud.cn/109f959c1b1b43ec99f612806313b930_4.PNG "4.PNG") 切换至 Objects 页面,右键点击 Random:BaseDataVariableType,Duplicate Node 创建 10 个采集点位,均为双精度浮点数。完成此步骤后,将生成节点地址 ns=3;i=1008\~1017。 ![5.PNG](https://dev-media.amazoncloud.cn/5887cd3873d346199d0af317dbfc9d1b_5.PNG "5.PNG") 生成的点位默认随机数范围是 \[-2,2],如需修改,可点击每个点位 Value 标签进行设置。默认的数值生成间隔为 1000ms。 ## 4. 创建代理并部署 taosX Agent 登录 TDengine Cloud 后进入控制台,点击数据写入->数据源->创建新的代理 ![6png.png](https://dev-media.amazoncloud.cn/2202afdca0ce4cb0b499fdac83e7357e_6png.png "6png.png") 根据提示,在 vm1 上下载并部署 taosX Agent。 ![7.png](https://dev-media.amazoncloud.cn/225c1aee80144441b69fae497085616f_7.png "7.png") ``` tar xf taosx-agent-xxx-linux-x64.tar.gz cd taosx-agent-xxx-linux-x64 ./install.sh ``` 设置代理名称:agent-vm1 ![8.png](https://dev-media.amazoncloud.cn/bd5c7cc8540a4df0a0b05423feb2083c_8.png "8.png") 获得 Endpoint 和 token,将其复制、粘贴至 vm1 上的 taosX Agent 的配置文件中:/etc/taos/agent.toml ![9.png](https://dev-media.amazoncloud.cn/1f983fadb76c4e80899de05da81de27e_9.png "9.png") 在 vm1 上启动 taosX Agent: ``` systemctl start taosx-agent ``` ## 5. 数据准备 在配置 OPC UA 采集任务之前,还有两个准备工作需要完成: * 在 TDengine Cloud 创建 opcdemo 库 * 创建批量导入用的采集点位 CSV 文件 ### 5.1 创建 opcdemo 库 登录 TDengine Cloud 后进入控制台,点击数据浏览器-> + 创建数据库,输入名称 opcdemo、设置 CACHEMODEL 为 both 后,完成创建。 ![10.png](https://dev-media.amazoncloud.cn/1bec5c985cfc47aa95fbf4a1d1c0d42d_10.png "10.png") ### 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. 创建数据采集任务 登入控制台,点击数据写入->数据源->添加数据源 ![11.png](https://dev-media.amazoncloud.cn/004f101d339a4cbe8e5e9b5e153cce47_11.png "11.png") 填写数据源名称,选择类型:OPC-UA,代理选刚新建的代理 agent-vm1,目标数据库 opcdemo,输入 OPC UA Server 的服务地址。 本文代理模式下,OPC UA Server 部署在vm1上,服务地址填写 127.0.0.1 即可,端口号及详细信息参见 PROSYS Simulation Server 的 Status 页面。 ![12.png](https://dev-media.amazoncloud.cn/c08fdaa9d7bf459fb3ca68d2656d964d_12.png "12.png") 点击“选择文件”按钮,进入 CSV 文件导入界面。 ![13.png](https://dev-media.amazoncloud.cn/9140d2aa5ecd4cd78d411de84ebb6b5e_13.png "13.png") 采集间隔设置为 1 秒,采集模式设置为 observe。 ![14.png](https://dev-media.amazoncloud.cn/7d886263335842f5a18e8ab7fab7a430_14.png "14.png") 本次 CSV 共采集 10 个点位,为优化写入性能,将批次大小调整为 10。如有必要,可选择开启 Debug 日志。 ![15.png](https://dev-media.amazoncloud.cn/f732c780b33143deaf94462bf9146422_15.png "15.png") ![16.png](https://dev-media.amazoncloud.cn/bde5032933bf438d9e5d2d6b229efb72_16.png "16.png") ## 7. 数据采集验证 登入控制台,点击数据浏览器->Sql,执行多次最新数据查询语句,观察查询结果。如结果行时间戳单调递增,则表示数据采集链路工作正常,数据已正常入库了。 ``` select last_row(*) from opcdemo.stb_double; ``` ![17.png](https://dev-media.amazoncloud.cn/0b66d988848f4b6e8e7487472dadaf1e_17.png "17.png") ## 8. 数据可视化 Grafana 部署在本地 MacBook Pro 上,希望访问云服务上的 TDengine 实例中的 opcdemo 库的数据。根据云服务控制台【工具-Grafana】页面的指引,填入 Host、Cloud Token,删除 User、Password,保存退出。 ![18.png](https://dev-media.amazoncloud.cn/3fc663457e7547c8a90bdd1201ae1f18_18.png "18.png") ![19.png](https://dev-media.amazoncloud.cn/29015b19672f4825a4afb5057f518ad5_19.png "19.png") 选择 Import Dashboard,点击 Upload JSON file 导入 OPCDemo.json 文件(文件代码详见 <https://www.taosdata.com/uncategorized/21958.html>),选择对应的 TDengine 的 DataSource,完成 Dashboard 导入。 ![20.png](https://dev-media.amazoncloud.cn/9d8038abbc094c6398c25cef25a6b861_20.png "20.png") ![21.png](https://dev-media.amazoncloud.cn/5f13df8560d34955aec235ea7ec34fe1_21.png "21.png") ![22.png](https://dev-media.amazoncloud.cn/e46336cdf57d48849273d00ff2ec3bb4_22.png "22.png") 点击 OPC Demo Dashboard,打开该仪表板,可以观察到实时数据的变化。 ![23.png](https://dev-media.amazoncloud.cn/2efeabd45ba948fe80ec23e7b49e781a_23.png "23.png") ## 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 标准差函数,方便用户快速从时序数据算得标准差 σ。 通过实时查询可获取指定时间段的[时序数据](https://www.taosdata.com/ "时序数据"),再通过 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 快速搭建工业生产监测系统】](https://www.bilibili.com/video/BV1G94y1L7Vt/?share_source=copy_web&vd_source=52311e5ac647f1a7dd69f701f69e2528) <!--EndFragment-->
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭