分类 技术 下的文章

目录

众所周知,我们软件读取 PLC 数据时按照 Bool/Byte/Word/Real 等类型进行通讯,有时候,需要频繁读取 PLC 多个数据字段偏移量时,就会造成传输效率低下的问题。

需求/故障现场

  • PLC 上有 100 个 word 需要读取,偏移量顺序排列,比如:从 0 - 200;
  • 需要 1 秒读取 1 次数据;
  • 转换后,数据转发到第三方系统:MQTT,SQL等;
  • 逐个读取每个 word,两个字节,需要在一个 TCP 会话中执行 100 次请求;
  • 每次请求,三个 TCP 数据传输,每次需要 15ms(423行-421行:3.614448-3.598902=0.015546s);
    2023-03-30T07:43:07.png
  • 这样的话,100次请求需要1.5546s,算上网络延迟和处理性能问题,整个过程需要2秒以上;
  • 结果就是:完全达不到 1秒1次 采集的需求。

分析过程

winCC 数据采集抓包

分析过程1:采集20个 real 数据字段

  • winCC 将数据包分解成 3个 item
    2023-03-30T07:52:38.png

分析过程2:采集10个 word 数据字段

  • 同样原理,winCC 将数据包按照每个 item 32 个字节
    2023-03-30T07:54:16.png

自有软件数据采集抓包

每次只是读取了1个 word 数据字段

2023-03-30T07:55:07.png

解决方案构思

  • 每次按照要求,获取所有需要的数据偏移量;
  • 取回来后,按照测点要求,自己根据数据类型分解出来;
  • 循环读取下一次数据;

验证

读取1000个字节

  • 可以看到分了5次数据,222+222+222+222+112=1000
    2023-03-30T08:20:45.png

下一步是继续验证分多个 item 进行数据采集

winCC 数据格式

  • 效率高,每次只需要 <2ms,分析原因:每次读取都是连续的地址空间,不需要PLC进行分段读取;
    2023-03-30T09:05:48.png

自己代码

  • 效率低,每次需要20-50ms,分析原因:每个 item 里面只有一个测点(word类型),需要分段读取;
    2023-03-30T09:08:15.png

开发过程

大概过程描述

  • 由于每次请求的数据量(按测点)叠加在一起,通过 S7DataItem 来组合,最多20个 item,打包一起发送到 PLC;
  • 收到每次的返回数据,再解析成对象插入二维表,等待处理;
  • 全部处理完成,统一根据请求数量,返回相应的结果集;

总结

  • PLC 针对于每个测点的处理时间在 1-3秒,数量越多,时间越长,是累加的;
  • 100个测点,算上 TCP 包头和包尾,大概来回数据时间是 220ms左右,200个测点是 400ms左右;
  • 通过这种方式,一个 PLC 建议采集点不超过 500个,虽然对 PLC 性能影响不大,但是处理时间较长,不适用1秒一次采集需求;
  • 每个型号 PLC 的处理性能不一样,支持的 TCP 连接数也不一定一样,所以,要根据具体需求来决定。

效果展示

  • 存入 SQL 数据库,完全控制在1秒一次采集
    2023-03-31T08:01:49.png

  • 4 个 TCP 连接非常稳定
    2023-03-31T08:02:56.png

  • 网关性能稳定
    2023-03-31T08:03:38.png

  • 与 PLC 交互的网卡网络流量很少
    2023-03-31T08:04:52.png

改进?

  • 类似 winCC 的模式,一次性读取一段偏移量,节省 TCP 开销,也节省 PLC 处理每个测点;
  • 针对一次读取来的一段偏移量内容进行解析,需要对字节码流处理非常熟悉;
  • 对于新建项目,比较适合用改进的方法,毕竟 PLC 可以根据需求改动测点偏移量;

关于 亿琪软件

上海亿琪软件有限公司成立于2016年,专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域,致力于物联网领域前沿技术的创新,为用户提供全方位、智能化和安全的物联网解决方案。

2023年,公司发布“YiFUSION|工业边缘智能融合一体机”产品,为工业客户提供一整套的边缘计算+AI能力:高性能数据采集、多类型数据融合、AI算法集成、云端业务对接。在边缘网关的基础上,集成了 IoT 平台的边缘协同能力、本地Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。

2022年公司推出 “YiCLOUD|亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域,公司软硬件产品和解决方案获得华为技术认证,得到中国移动OCP认证,公司还是边缘计算产业联盟ECC成员。

感知物联,畅快无限。

联系我们
网站:http://yiqisoft.cn
邮件:support@yiqisoft.cn
电话:021-68863086
手机:186-1666-9123

本文以 TUN/TAP 驱动为例

编译自己的内核驱动 ko 文件

此处可以是自己编译的内核,也可以是第三方的 ko 内核驱动文件。

确认 ko 文件与你的内核版本一致

root@yiqisoft:~# modinfo tun.ko
filename:       /root/tun.ko
alias:          devname:net/tun
alias:          char-major-10-200
license:        GPL
author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
description:    Universal TUN/TAP device driver
depends:        
intree:         Y
name:           tun
vermagic:       5.10.110 SMP mod_unload aarch64

导入 ko 文件到系统

复制到你的内核驱动所在目录

cp tun.ko /lib/modules/5.10.110/kernel/drivers/net/tun.ko

遍历你的驱动目录

depmod

配置自动加载

将内核名称加入自动加载文件: /etc/modules

echo "tun" >> /etc/modules

手动加载试一下

逐步运行以下命令确认记载成功

root@yiqisoft:~# modprobe tun
root@yiqisoft:~# lsmod |grep tun
tun                    45056  0
root@yiqisoft:~# 

重启

默认应该加载成功。

目录

最近在实施 ThingsBoard 项目中遇到一些问题总结,还有针对 Thingsboard 二次开发中的提示。

如果你正准备使用 Thingsboard 开源框架作为你的物联网平台来使用,这个文章对你应该有一定帮助。关于 Thingsboard 平台的介绍和基础不是本文的重点,所以,你在阅读本文时,应该具备一些 Thingsboard、物联网平台、MQTT、HTTP、物模型,等基础能力。还有,如果你要实施一套自己的物联网应用,可以参考这个文章:分享|如何组建一个项目团队来完成物联网应用?

Thingsboard 项目实施

实施准备

  • 统计你所在网络里面的设备、资产、测点、指标、通讯方式、状态等基础信息,可以统计一些信息形成 Excel 表格,越详细越好,多多益善;
  • 基于你对物联网的了解,要把业务结合进来,综合考虑物联网平台到底对你的业务有什么帮助,比如:信息及时性?数据总量?统计分析?降本增效?还是有其他非技术目的?
  • 要有相关的技术储备,人员储备,还有资金储备,毕竟还是需要不少时间、精力、金钱和欲望投入在里面;
  • 不管如何,你还是应该准备找一个合作伙伴,能够帮助你解决一些你无法预料到的问题,以解燃眉之急;
  • IoT、物联网、平台,这些都是基础设施,并不能完全解决你的所有问题,要摆正 Thingsboard 在你的业务中的正确位置
  • 至于 Thingsboard 能帮到你什么,能做什么,有什么效果,你可以在本技术博客寻找你的答案,或到互联网找到你所需要的内容;

实施要点

这里以一个工业物联网平台为例,简单介绍一些要点供你参考:

  • 目的:工业物联网平台,当然是为了工业生产服务,例如:这个指标采集上来,频率是多少,数据变化起到什么业务帮助。如果存粹为了做一个物联网平台而做一个,那就无所谓了,只要看上去像个平台,数据在变化,有图有真相,那也行;
  • 方法:典型的实施方法,无非就是采集、汇聚、存储、分析,方法在不同的客户有不同的操作方式,比如:改造老平台是一种有据可循的,推翻老平台又是另一个,还有新建平台也是一脸茫然,不知所措;要根据实际的需求,制定适合自己的实施方法
  • 过程:来举例说明一个客户的实施过程:在这个客户而已,开源是开放的,免费的,没什么难度的,所以把实施过程简单理解为:1、安装;2、配置;3、调整;4、交付。我把其过程形容为:陷入泥潭的人,越陷越深,最后有可能会失败;
  • 时间:有些客户觉得拿来即用,更何况 Thingsboard 是开源的,那就是多简单的事,其实,我们实施过的项目中,客户越是觉得简单的快速的,都会导致项目延迟,他们忽略了开源并不是你什么也不需要做就可以完成所有实施,赶工期不太适合用 Thingsboard 来做,假如你对开源真的有所了解的话;如果你觉得一个月能搞定,我建议你把时间放大到3个月,中间你会遇到太多的疑问和不知道,如果有合作伙伴能帮你,那你算是幸运儿,有些自己几个星期搞不定的问题,专业人士只需要十分钟;
  • 效果:不要对项目实施的结果报以太多的期望,毕竟 Thingsboard 还有 PE 专业版在那里,开源版本只是提供了基础功能,的确可以让你达到完成一个物联网平台的概念,但是,需要太多的工作量去完善你的业务需求了,效果因人而异,各说纷云。

总结经验

  • 开源贡献:如果你了解开源,你就知道开源不仅仅是索取,也需要贡献,如果你的实施过程中修复的问题并没有得到开源社区的合并,那么说明你以后需要一直去修改它,那是非常不利的局面,所以,建议你参与社区,参与贡献,对你长期使用 Thingsboard 是有帮助的而无害的;
  • 可移植脚本:大版本不变化的情况下,你要尽量综合项目实施过程中的可复用脚本,这样,你在其他项目中就是亮点也是赢利点,这一点是很多实施者所忽视的地方;
  • 形成标杆:一旦你发现客户的思路很有效果,你帮助客户实施完成,且具备一定的效益,你要知道这就是果实,要动得举一反三,运用到其他的客户那里,形成标杆项目,推广下去,毕竟复制/粘贴的成本是最低的

Thingsboard 二次开发提示

前提

技术栈

其实就下面俩,你要突破的地方,我觉得应该就是 Angular 框架。如果你研究过 Thingsboard 源码,我的意思是你熟读多次,编译N次,简单开发过几次,你就应该明白其实很简单,只是代码量有点大,几个月应该是搞不定了,你不能放弃,如果你决定要进行二次开发,可以参考本技术博客的其他文章。

  • Java/Spring Boot/Postgresql
  • Typescript/Angular/Javascript/HTML

尝试

作为一个开发者,我建议你最应该看的就是官方文档,不管你的英文能力怎么样,都应该找方法去尝试读他们的文档(虽然都是乌克兰写的)。

  • 编译通过,这是首要条件,否则你的二次开发就此打住;
  • 遵循其编码和框架规则,不要试图去改造它,你可能还不具备这个能力;
  • 后端代码我觉得是非常简单且方便改造的,但是,前段代码所使用的 Angular 在国内并不主流,这也是很多开发者宁愿用其他前端框架重写,也不愿意改官方代码的原因吧;
  • 一切二次开发都是需要基于业务需要而做的,那么就仔细分析一下业务,结合你现有的能力,首先尝试配置它而不是二次开发,以我们的经验,绝大部分需求都是可以通过配置(前端,也需要写一些 JS 代码,而且必须遵循其框架)来完成的。

运用技巧

  • 首先就是官方文档,有些内容都是以简单的表格列出,其实可以算是设计说明书,非常有帮助;
  • Github issue, 你要经常看,最好能翻边你所关注的所有,里面的答案比代码和文档更加清晰;
  • 关注本技术博客的内容,与笔者沟通,把你需要的疑问提出来,我们专门针对问题解答(技术交流不收费);

关于 亿琪软件

上海亿琪软件有限公司成立于2016年,专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域,致力于物联网领域前沿技术的创新,为用户提供全方位、智能化和安全的物联网解决方案。

2023年,公司发布“YiFUSION|工业边缘智能融合一体机”产品,为工业客户提供一整套的边缘计算+AI能力:高性能数据采集、多类型数据融合、AI算法集成、云端业务对接。在边缘网关的基础上,集成了 IoT 平台的边缘协同能力、本地Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。

2022年公司推出 “YiCLOUD|亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域,公司软硬件产品和解决方案获得华为技术认证,得到中国移动OCP认证,公司还是边缘计算产业联盟ECC成员。

感知物联,畅快无限。

联系我们
网站:http://yiqisoft.cn
邮件:support@yiqisoft.cn
电话:021-68863086
手机:186-1666-9123

消息总线在 EdgeX 框架中起到了至关重要的作用,模块之间的数据交互,外部系统之间的桥梁,消息总线可以说是不可或缺的必要条件。默认情况下,redis 服务成为了 EdgeX 消息总线的初始化配置。

![2023-03-01T02:24:14.png][1]

通用配置

EdgeX 消息总线是可以根据需求来配置和更改具体的实现引擎:

  • Redis(默认)
  • MQTT
  • NATS Core
  • NATS JetStream
  • ZeroMQ(已过时)

eKuiper 规则引擎

EdgeX MessageBus 用于内部 EdgeX 服务到服务的通信。它并不意味着作为外部服务与内部 EdgeX 服务通信的入口点。 eKuiper 规则引擎是一个例外,因为它与 EdgeX 紧密集成。

一般情况下,由于 eKuiper 跟 EdgeX 在部署时处于一个阶段,eKuiper 可以直接从 MessageBus 中直接获取数据,并遵循 MessageBus 消息格式进行解析和处理。

  • 通过 eKuiper 最简单的创建 stream 命令,即可完成对 EdgeX MessageBus 配置:
    CREATE STREAM EdgeXStream () WITH ( FORMAT = "JSON", TYPE = "edgex" )
  • 同样的情况,eKuiper 可以简单的命令创建 数据输出到 EdgeX:
    
    {
    "id": "ruleRedisEvent",
    "sql": "SELECT temperature * 3 AS t1, humidity FROM events",
    "actions": [
      {
        "edgex": {
          "protocol": "redis",
          "host": "localhost",
          "port": 6379,
          "topic": "application",
          "profileName": "ekuiperProfile",
          "deviceName": "ekuiper",        
          "contentType": "application/json"
        }
      }
    ]
    }



# 提示
> 非专业人士,不建议直接调用 EdgeX MessageBus 进行开发和使用。


  [1]: https://www.yiqisoft.cn/blogs/usr/uploads/2023/03/2783294552.png

EdgeXFoundry平台的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。

2023-03-01T01:13:20.png

主要服务介绍

Device Services 设备服务

设备服务是与传感器/设备或物联网对象(“物”) 交互的边缘连接器,其中包括机器、机器人、无人机、HVAC 设备、相机等。通过利用可用的连接器,可以控制设备并/或传输数据至 EdgeX或从其传输数据。您还可以使用设备服务 SDK来创建您自己的 EdgeX设备服务。

可用的设备服务包括:

  • MQTT
  • Modbus TCP
  • Modbus RTU
  • BACnet IP & MSTP
  • REST
  • ONVIF IP Camera
  • OPC-UA
  • SNMP
  • BEL GATT

Core Services 核心服务

通过这些服务可大体了解给定部署中连接了哪些设备,正在传输哪些数据以及EdgeX的配置方式。

可用的核心服务包括:

  • Core Data 核心数据
  • Core Command 核心命令/控制
  • Core Metadata 核心元数据
  • Registry & Config 注册和配置

Supporting Services 支持服务

包括诸如边缘分析 (也称为“本地分析”等微服务,以及典型的软件应用功能.例如记录、计划和数据清理等。

可用的支持服务包括:

  • Alerts & Notification 报警和通知
  • Rule Engine 规则引擎
  • Scheduling 计划服务

Application Services 应用服务

应用服务是指将感应到的数据从 EdgeX提取、处理/转换和发送到所选端点或应用的方式。这些服务可以是分析数据包、企业或本地应用,也可以是 YiCLOUD、 AzureloTHub、AWS loT或 Google loT Core 等云系统。

可用的应用服务包括:

  • Configurable Application Services 配置化运应用服务
  • Application Services 应用服务

通用配置

本地配置文件

以 device-sdk-go 为例,所谓本地配置文件,就是在边缘计算设备本地磁盘上的固定配置文件,一般情况下,在 cmd/res/ 目录下。

  • configuration.toml
    这个文件是 SDK 的主要配置文件,规定了数据输入/处理/输出,队列定义,profile 和 device 配置文件的所在位置;

  • profiles 目录
    这个目录存在 yaml 配置文件,定义了设备类型(profile)的资源和命令;

  • devices 目录
    这个目录存在 yaml 配置文件,定义了初始设备资源;

实时注入配置

除了可以在初始化服务时的本地配置,也可以通过 API 的方式对配置进行设置,这样的情况是灵活且方便。

注册

consul 作为注册中心;各种服务,都是自己模块的信息注册到 consul 中集中管理;这是一个隐藏服务,使用者不需要特别关心,此服务以微服务运行。