亿琪软件-开源博客 - EdgeX
type: channel
link: https://www.yiqisoft.cn/blogs/category/edgex/
items: C 语言应用开发中的注意事项
items: EdgeX Foundry 开发设备服务的几个关键点
items: EdgeX Foundry 在 Docker 容器微服务下的相关使用技巧
items: 在 ubuntu22.04 中 安装 EdgeX 并运行 device-sdk-c sample
items: 亿琪软件携手 EdgeX Foundry 发布设备服务 Device-OPC-UA，助力工业互联网互联互通
items: 文档｜EdgeX 设备微服务之 OPC-UA -- device-opcua 完整使用手册
items: 开源｜EdgeX 边缘计算驱动之 OPC-UA
items: 文档｜EdgeX 设备微服务之西门子 S7 -- device-s7 完整使用手册
items: 分享｜EdgeX 案例之 BACnet 设备读取，并通过物联网平台展示分析
items: 分享｜EdgeX FAQ4 常见问题和解答四

C 语言应用开发中的注意事项
type: item
date: 2025-04-12T15:55:44+00:00
description: C 语言应用开发中的注意事项 1.全局变量 2.源代码文件夹中 .c 模块文件的划分 3.多线程编程注意的问题 线程安全和互斥锁 线程间通信 4.深浅拷贝问题 总结 C 语言应用开发中的注意事项 C 语言作为一门经典的编程语言，广泛应用于系统编程、嵌入式开发和高性能计算等领域。然而，在进行 C 语言应用开发时，开发者需要关注一系列问题，以确保代码的正确性、性能和可维护性。 笔者在基于 C 语言开发 EdgeX Foundry 设备服务实践之中，遇到了一些问题，如全局变量的使用、.c 模块文件的划分、多线程编程注意事项、深浅拷贝问题以及编译链接时的多重定义问题。本文将对其展开讨论，并提供具体的代码示例和实用建议。 1.全局变量 全局变量是在函数外部定义的变量，其作用域从定义处开始到文件结束。它们在程序整个生命周期内存在，通常不会被轻易时放掉。可被程序中的任何函数访问。它能够方便多个函数共享数据，并减少函数参数传递的开销，但同时也不利于模块化编程和代码重用，增加调试难度。 以下展示的 global_pp 全局变量，在 EdgeX Foundry 设备服务中用于保存设备协议的详细信息，为部分关键代码： #include "device_openvino.h" #include "circular_buffer.h" /* protocols */ typedef struct { char *input_model; char *input_image_path; /* Uri */ char *device_name; /* CPU, GPU[0,1,...], NPU */ char *Score; } protocol_properties; protocol_properties *global_pp; // malloc a protocol_properties void func() { if (!global_pp) { iot_log_debug(driver->lc, "malloc a global_pp (protocol_properties)"); global_pp = (protocol_properties *)malloc(sizeof(protocol_properties)); global_pp->input_model = NULL; global_pp->input_image_path = NULL; global_pp->device_name = NULL; global_pp->Score = NULL; } } int main() { func(); return 0; } 注意事项： 尽量减少全局变量的使用，优先考虑局部变量或函数参数。 使用有意义的命名（如 g_config），避免冲突。 在多线程环境中，使用锁机制确保线程安全。 2.源代码文件夹中 .c 模块文件的划分 模块化编程将程序分解为独立的模块，每个模块负责特定功能。这种方法能提高代码的可读性、可维护性和可重用性，同时便于团队协作开发。划分 .c 文件的指导思想有以下几点： 每个 .c 文件应包含一组相关功能的实现，例如字符串处理或网络通信。 避免单个 .c 文件过大，建议控制在 1000 行以内。 使用头文件 (.h) 声明对外接口，.c 文件实现具体逻辑。 头文件用于声明函数、宏、类型和全局变量，供其他模块使用。 以下是 EdgeX Foundry 设备服务中环形 buffer 缓冲区的模块设计： //circular_buffer.h #pragma once #include <stddef.h> // 包含 size_t 的定义 // Circular buffer structure struct circular_buffer { struct infer_result* buffer; // storing data size_t capacity; // Maximum buffer capacity size_t size; // The current number of stored elements size_t head; // Head index (write location) size_t tail; // Tail index (read position) }; struct circular_buffer* create_circular_buffer(size_t capacity); ... //circular_buffer.c #include "circular_buffer.h" #include <stdlib.h> #include "edgex_comm…

EdgeX Foundry 开发设备服务的几个关键点
type: item
date: 2025-04-10T07:45:00+00:00
description: EdgeX Foundry 开发设备服务的几个关键点 1.设备服务工作流 2.设备服务示例模板 2.1 SDK 相关工作流 2.2 template.c 的细节 3.删除设备的处理逻辑 4.增加设备 4.1 增加设备的方式 4.2 增加设备的处理逻辑 总结 EdgeX Foundry 开发设备服务的几个关键点 EdgeX Foundry 设备服务是与传感器/设备或物联网对象 (“物”) 交互的边缘连接器，它需要与各种设备交互，将数据传输到边缘计算系统，并根据需求执行控制命令。EdgeX Foundry 通过其模块化设计和丰富的工具集，使得设备服务的开发变得更加简单高效。我们还可以使用设备服务 SDK 来创建您自己的 EdgeX 设备服务，本文重点介绍使用 C-SDK 开发设备服务源代码的几个必须明确的关键点 。 1.设备服务工作流 以 设备服务 template.c 为例，作为一个虚拟设备服务，它可以将数据发送到核心数据微服务，用户可以通过命令和控制微服务发送命令并获得响应，虚拟设备服务的这些功能在执行功能或性能测试时不需要任何实际设备就可以使用。 注意点： 虚拟设备服务对核心数据和元数据微服务具有依赖性，因为初始化过程需要检查或注册配置文件，设备和值描述符，因此，核心数据和元数据服务必须在设备服务初始化之前完全启动。 服务启动时，服务会通过从 YAML 文件加载“值描述符”,“设备服务”,“设备描述”来初始化，并登记在元数据微服务中，YAML文件默认存在，也可以自行创建。虚拟设备服务为元数据微服务提供回调API来管理设备实例。 2.设备服务示例模板 2.1 SDK 相关工作流 EdgeX Foundry 的 C-SDK 提供了一个设备服务模板（位于 examples/template.c 强烈推荐先看一遍代码），它提供了一套规范化的开发示例，包括自定义回调函数、设备服务启动关闭、内存开辟释放等，是我们初次接触设备服务开发的良好开端。设备服务工作流在上一节有了一个大致的介绍，结合官方的指导文档 servicewritersguide.md (强烈推荐先阅读一遍)，这里进一步描述设备服务内部 SDK 相关的工作流，展示如下： 从根本上说，设备服务由多个回调组成，上图中的 SDK 内部工作流均在一系列回调函数中作处理。一个设备服务只有一个设备服务实例结构体指针 Implementation 每次调用回调时，该指针都会被传递，如初始化回调函数的第一个参数 (template_driver *) impl。 /* --- template.c ---- */ /* Initialize performs protocol-specific initialization for the device * service. */ static bool template_init ( void *impl, struct iot_logger_t *lc, const iot_data_t *config ) { template_driver *driver = (template_driver *) impl; iot_log_debug (lc, "Template Init."); return true; } 2.2 template.c 的细节 一个设备服务必须要自定义好的回调函数如下：每一个回调函数的实现正如上面提到的 template_init 那样。 /* Device Callbacks */ devsdk_callbacks *templateImpls = devsdk_callbacks_init ( template_init, template_get_handler, template_put_handler, template_stop, template_create_addr, template_free_addr, template_create_resource_attr, template_free_resource_attr ); 同时设备服务 SDK 还提供了一些非必要的回调函数，以便于开发者实现更灵活的需求，在 servicewritersguide.md 的 Optional handlers 部分有提到。举一个例子，一个设备服务实例可以实现 device_added、device_updated 和 device_removed 处理程序，然后它将收到服务管理的设备范围的更改通知。如果需要特殊的初始化/关闭操作来优化设备的使用，这可能会有所帮助。只需要将该函数实现，并注册进设备服务的回调初始化函数即可： //device_added 的具体实现 static void device_a…

EdgeX Foundry 在 Docker 容器微服务下的相关使用技巧
type: item
date: 2025-04-02T06:31:00+00:00
description: EdgeX Foundry 在 Docker 容器微服务下的相关使用技巧 1.Device Services 注册问题 2.数据库服务的操作工具 3.docker-compose.yml 用法 4.Docker Network 容器互联 总结 EdgeX Foundry 在 Docker 容器微服务下的相关使用技巧 EdgeX Foundry 是一个开源的边缘计算框架，广泛用于物联网设备的开发与管理。它高度依赖 Docker 来实现服务的容器化部署。本文将分享一些在 Docker 容器中使用 EdgeX Foundry 的实用技巧，包括 Device Services 的注册、数据库服务操作、docker-compose.yml 的用法以及网络管理等方面的经验总结。希望能为开发者提供参考。 1.Device Services 注册问题 在开发或调试 EdgeX Foundry 的 Device Services 时，可能会遇到设备服务配置残留或配置未正确加载的问题，默认情况下在官方 UI 界面（如下图所示）中没有删除具体一个 Device Service 的接口。 这会导致我们在加载 修改后的设备服务(关键是 /res/configration.yml 文件)时很麻烦，Device Service 的配置信息是存放在官方数据库服务容器 postgres:16.3 中的，最简单干脆的清理办法是清除所有Docker 卷： 清理容器和卷 # 删除所有已停止和运行中的容器 docker rm -f $(docker ps -a -q) # 删除所有未使用的 Docker 卷 docker volume rm -f $(docker volume ls -q) 启动 EdgeX 服务 假设你已经下载了 EdgeX 的 edgex-compose 仓库，可以通过以下步骤重新启动服务，此时获得了全新的一套 EdgeX 微服务： # 进入 compose-builder 目录 cd /home/ubuntu/edgex/edgex-compose/compose-builder/ # 后台启动所有服务 docker compose up -d root@ubuntu:/home/ubuntu/edgex/edgex-compose/compose-builder# docker compose up -d [+] Running 17/17 ✔ Volume "edgex_db-data" Created 0.0s ✔ Volume "edgex_kuiper-data" Created 0.0s ... ✔ Container edgex-support-scheduler Started 2.4s ✔ Container edgex-app-rules-engine Started 2.6s ✔ Container edgex-core-command Started 2.6s 注意： 在执行清理命令前，建议检查是否有重要数据未备份。 如果遇到权限问题，可使用 sudo 提升权限。 2.数据库服务的操作工具 EdgeX 的 Compose 文件仓库会为我们生成数据库服务容器如下： ID IMAGE COMMAND PORTS NAMES ... 8xxx7a postgres:16.3-alpine3.20 "docker-entrypoint.s…" 127.0.0.1:5432->5432/tcp edgex-postgres ... 为了方便查看数据库内部一些关键数据表的状态和信息，建议把 Postgres 端口映射到本地，用 SQL 工具（推荐 DBeaver）连接上，进行增删改查 : 注意： 首次使用需要登陆数据库，在 docker-compose.yml 文件中有数据库用户名和密码： database: container_name: edgex-postgres environment: POSTGRES_DB: edgex_db POSTGRES_PASSWORD: postgres ... 3.docker-compose.yml 用法 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose，您可以使用 YML 文件来配置应用程序需要的所有服务。然后，使用一个命令，就可以从 YML 文件配置中创建并启动所有服务。 EdgeX Foundry 部署服务的核心配置文件正是 docker-compose.yml , 同时也是自定义设备服务的重要部署工具。以下是一些常用操作和注意事项 : （在 docker-compose.yml 同级文件夹下运行） 停止并删除所有服务容器： docker c…

在 ubuntu22.04 中 安装 EdgeX 并运行 device-sdk-c sample
type: item
date: 2025-03-13T09:15:00+00:00
description: 在 ubuntu22.04 中 安装 EdgeX 并运行 device-sdk-c sample 1.克隆源码-EdgeX 2.安装工具 3.编译运行-EdgeX 4.克隆源码-SDK-C 5.添加第三方依赖库 6.编译-C SDK 7.编译运行 random 设备服务示例 总结 在 ubuntu22.04 中 安装 EdgeX 并运行 device-sdk-c sample EdgeX Foundry 作为一个开源的边缘计算框架，为开发者提供了一个灵活、可扩展的平台，用于构建和管理边缘设备及服务。然而，对于初次接触 EdgeX 的用户来说，从零开始安装并运行其相关组件（如 device-sdk-c 示例）可能会面临不少挑战。 无论是环境的配置、依赖的安装，还是编译与调试的过程，每一步都需要细致的操作和清晰的思路。本文将以 Ubuntu 22.04 为基础平台，详细记录如何从克隆 EdgeX 源码到成功运行 device-sdk-c 的 sample 示例的全过程。希望通过这篇博客，不仅能为新手提供一份实用的操作指南，也能让有经验的开发者在遇到问题时找到解决思路。 1.克隆源码-EdgeX 在开始安装 EdgeX 之前，我们需要先获取其源码，而 GitHub 是获取最新版本的最佳途径。为了让后续操作更加有条理，我们首先在用户主目录下创建一个专属的工作目录，用于存放 EdgeX 相关的文件。以下是具体操作： 打开终端，输入以下命令创建一个名为 edgex 的文件夹，并进入该目录： mkdir edgex && cd edgex 接下来，我们需要从 GitHub 上克隆 EdgeX 的 Compose 文件仓库，这是运行 EdgeX 服务的核心配置文件集合。执行以下命令： git clone https://github.com/edgexfoundry/edgex-compose.git cd edgex-compose 结果显示如下： root@ubuntu:/home/ubuntu# mkdir edgex && cd edgex root@ubuntu:/home/ubuntu/edgex# git clone https://github.com/edgexfoundry/edgex-compose.git Cloning into 'edgex-compose'... remote: Enumerating objects: 5826, done. remote: Counting objects: 100% (3563/3563), done. remote: Compressing objects: 100% (319/319), done. remote: Total 5826 (delta 3504), reused 3250 (delta 3244), pack-reused 2263 (from 3) Receiving objects: 100% (5826/5826), 1.59 MiB | 1.76 MiB/s, done. Resolving deltas: 100% (4949/4949), done. root@ubuntu:/home/ubuntu/edgex# ls edgex-compose 输出信息显示了克隆进度，最终 ls 命令确认目录中已存在 edgex-compose 文件夹，说明这一步成功完成。 2.安装工具 EdgeX 的部署离不开 Docker，因为它通过容器化技术简化了服务的管理和运行。因此，我们需要先在 Ubuntu 系统中安装 Docker。以下是详细的安装步骤： 使用官方脚本安装 Docker，并指定阿里云镜像源以加速下载： curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh --mirror Aliyun docker -v 第一条命令通过 curl 下载安装脚本并保存为 get-docker.sh 文件；第二条命令执行脚本，--mirror Aliyun 参数指定使用阿里云镜像源，避免默认源下载缓慢；最后通过 docker -v 检查版本，确保安装成功。安装过程的输出类似： root@ubuntu:/home/ubuntu# curl -fsSL https://get.docker.com -o get-docker.sh root@ubuntu:/home/ubuntu# sh get-docker.sh --mirror Aliyun # Executing docker install script, commit: 4c94a56999e10efcf48c5b8e3f6a…

亿琪软件携手 EdgeX Foundry 发布设备服务 Device-OPC-UA，助力工业互联网互联互通
type: item
date: 2024-03-26T23:45:10+00:00
description: 2024 年 3 月 26 日 – 上海 – 致力于推动边缘计算技术创新和应用的开源软件社区 EdgeX Foundry 今日宣布，正式发布由亿琪软件参与贡献的设备服务 Device-OPC-UA。该服务将为工业互联网领域提供更加便捷、高效的设备连接和数据采集方案，助力实现工业设备的互联互通和智能化管理。 GitHub 仓库地址：https://github.com/edgexfoundry/device-opc-ua Device-OPC-UA 简介 Device-OPC-UA 是基于 OPC-UA 标准的设备服务，可实现 EdgeX Foundry 与 OPC-UA 兼容设备的无缝连接。OPC-UA 是工业互联网领域重要的通信协议，具有开放、统一、安全等特点，广泛应用于工业自动化、智能制造等领域。 Device-OPC-UA 的发布，将为 EdgeX Foundry 社区带来以下优势： 扩展设备支持范围: 支持 OPC-UA 协议的设备，可通过 Device-OPC-UA 服务轻松接入 EdgeX Foundry 平台，丰富平台设备资源。 简化开发流程: Device-OPC-UA 提供标准化的 API 接口，开发人员可快速便捷地开发边缘应用，降低开发成本和难度。 提升数据互操作性: Device-OPC-UA 遵循 OPC-UA 标准，可实现不同厂商、不同型号设备之间的数据互通互享，打破数据孤岛。 亿琪软件积极贡献开源社区 亿琪软件作为 EdgeX Foundry 社区的活跃成员，一直积极参与社区建设和技术贡献。此次发布的 Device-OPC-UA 服务，是亿琪软件在边缘计算领域的技术积累和实践成果的体现。 亿琪软件表示：“Device-OPC-UA 的发布，将进一步推动 EdgeX Foundry 在工业互联网领域的应用落地。亿琪软件将持续参与开源社区建设，携手合作伙伴共同打造开放、互通、智能的工业互联网生态。” 关于 EdgeX Foundry EdgeX Foundry 是一个由 LF Edge 主导的开源项目，旨在为边缘计算提供统一的框架和标准。EdgeX Foundry 汇聚了来自全球的领先技术公司、学术机构和开源社区，共同推动边缘计算技术的创新和发展。 关于我们 !!! success "亿琪软件" 上海亿琪软件有限公司成立于 2016 年，专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域，致力于物联网领域前沿技术的创新，为用户提供全方位、智能化和安全的物联网解决方案。 2023 年，公司发布“YiFUSION ｜工业边缘智能融合一体机”产品，为工业客户提供一整套的边缘计算+AI 能力：高性能数据采集、多类型数据融合、AI 算法集成、云端业务对接。在边缘网关的基础上，集成了 IoT 平台的边缘协同能力、本地 Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。 2022 年，公司推出 “YiCLOUD ｜亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域，公司软硬件产品和解决方案获得华为技术认证，得到中国移动 OCP 认证，公司还是边缘计算产业联盟 ECC 成员。 !!! tip "关注我们" !!! warning "联系我们--商业服务" 网站：http://yiqisoft.cn 邮件：support@yiqisoft.cn 电话：021-68863086 手机：186-1666-9123

文档｜EdgeX 设备微服务之 OPC-UA -- device-opcua 完整使用手册
type: item
date: 2023-12-18T02:58:45+00:00
description: EdgeX Foundry （以下统一简称：EdgeX）设备微服务 device-opcua 由我司根据已有代码优化后贡献给社区，文档也是必不可少的环节，社区要求英文，现翻译成中文，方便国内客户阅读和使用。 目的 入门 配置 协议属性 API 参考 源代码 目的 该服务的目的是将 OPC-UA 设备连接到 EdgeX。 入门 本页介绍如何将 OPC-UA 设备连接到 EdgeX。 在此示例中，我们使用模拟器来实现（OPC UA Simulation Server）。 这提供了一种测试设备服务功能的简单方法。 环境 您可以使用任何可以安装 docker 和 docker-compose 的操作系统。 在本例中，我们使用 Ubuntu 使用 docker 部署 EdgeX。 设置 Prosys OPC UA Simulation Server 设备 !!! warning "警告" 本页面并不是设置 OPC-UA 设备的完整指南，仅介绍了几个重要步骤供参考。 下载 Prosys OPC UA 模拟服务器 从 OPC UA 模拟服务器下载 下载最新版本的 OPC UA Simulation Server Download。 安装模拟服务器 启动模拟服务器 验证模拟服务器 Status 复制连接地址(UA TCP)值：opc.tcp://jiekemacbookpro14.lan:53530/OPCUA/SimulationServer Objects 启动微服务之前 以下部分介绍如何在启动服务之前完成设置。 使用预定义的配置进行测试 设置新配置 使用预定义的配置进行测试 文件夹中的预定义配置：cmd/res/ 预定义 Device Profile 设备配置 Device Profile profiles/Simple-Driver.yaml 描述了一个 OPC-UA 设备，它包含 3 个资源，如下所示： name: OPCUA-Server manufacturer: Prosys model: Simlulator labels: - OPCUA - TEST description: Simulation OPCUA Server deviceResources: - name: Constant description: generated constant number properties: valueType: Float64 readWrite: RW attributes: nodeId: ns=3;i=1001 - name: Counter description: generated counter number properties: valueType: Int32 readWrite: R attributes: nodeId: ns=3;i=1002 - name: Random description: generated random number properties: valueType: Float64 readWrite: R attributes: nodeId: ns=3;i=1003 deviceCommands: - name: ConstantNum isHidden: false readWrite: RW resourceOperations: - deviceResource: Constant defaultValue: 0.0 - name: CounterNum isHidden: false readWrite: R resourceOperations: - deviceResource: Counter defaultValue: 0 - name: RandomNum isHidden: false readWrite: R resourceOperations: - deviceResource: Random defaultValue: 0.0 该表描述了设备配置文件的每个资源： Resource Name valueType of EdgeX nodeId Description Constant Float64 ns=3;i=1001 generated constant number Counter Int32 ns=3;i=1002 generated counter number Random Float64 ns=3;i=1003 generated random number 预定义设备配置 Device Configuration 设备配置 Device Configuration devices/Simple-Devices.yaml 描述…

开源｜EdgeX 边缘计算驱动之 OPC-UA
type: item
date: 2023-12-15T01:09:11+00:00
description: EdgeX Foundry 边缘计算框架的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。 OPC-UA Micro Service - 用于 OPC-UA 设备连接到 EdgeX 的设备服务。 01 介绍 EdgeX Foundry 边缘计算框架的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。 OPC-UA Micro Service - 用于 OPC-UA 设备连接到 EdgeX 的设备服务。 02 技术要点 工业互联网应用场景中，OPC-UA 是非常常见的工业控制设备，边缘计算框架 EdgeX 对于其驱动一直在 EdgeX Foundry 社区没有开源支持，我司经过项目的验证和长期的维护，在社区原有项目基础之上进行了 V3.2.0 版本驱动的移植和扩展。 本开源 EdgeX 设备驱动使用 github.com/goopcua/opcua 作为基础库，在基于 EdgeX device-sdk-go 的框架下，完成了驱动的开发和验证。 03 版本支持 本次开源的 EdgeX 驱动支持 EdgeX v3.x（最新版本，且持续更新和维护）。 开源代码：https://github.com/edgexfoundry-holding/device-opcua-go 04 使用文档 预计发布在：https://docs.edgexfoundry.org/3.1/microservices/device/services/device-opcua，敬请期待。 05 产品应用 EdgeX 框架应用于我司的边缘计算产品 YiEDGE（边缘计算软件） 和 YiFUSION（工业边缘智能融合网关）。 YiFUSION: 边缘融合智能网关是指具备边缘计算、智能分析、数据融合等功能的智能网关，能够在边缘侧实现数据采集、处理、分析、融合和应用，为用户提供更加智能、高效和低成本的服务。 简洁定义 英文名称：YiFUSION 中文名称：工业边缘智能融合网关 产品形态：软硬件一体机 硬件架构：X86/ARM/超融合/国产化 软件架构：全微服务化 关于我们 "亿琪软件" 上海亿琪软件有限公司成立于 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 设备微服务之西门子 S7 -- device-s7 完整使用手册
type: item
date: 2023-12-11T00:39:00+00:00
description: EdgeX Foundry （以下统一简称：EdgeX）设备微服务 device-s7 由我司贡献给社区，文档也是必不可少的环节，社区要求英文，现翻译成中文，方便国内客户阅读和使用。 目录 目的 入门 环境 设置 S7 设备 设置 ISO-on-TCP 访问 IP protocol 启用 S7 Communication 远程访问 (可选) 保留 S7 communication 设置数据块 Data Blocks 启动微服务之前 使用预定义的配置进行测试 预定义 Device Profile 预定义设备配置 Device Configuration 设置一个新的配置 Configuration 创建自定义配置文件夹 设置新的设备配置 Device Profile 设置设备服务配置 Configuration 准备 docker-compose 文件 生成 docker compose 文件 将自定义配置添加到 docker-compose 文件 在 Docker 上启动 EdgeX Foundry 启动服务后设置 执行命令 查找可执行命令 执行设置命令 执行获取命令 自动事件 配置 协议属性 API 参考 源代码 额外细节 读命令 Read Command 写命令 Write Command 何时转换数据 支持的转换 "亿琪软件" "联系我们--商业服务" 目的 该服务的目的是将西门子 S7 PLC 设备连接到 EdgeX。 入门 本页介绍如何将 S7 设备连接到 EdgeX。 在此示例中，我们使用真实设备（例如 S7-1200）。 这提供了一种测试设备服务功能的简单方法。 环境 您可以使用任何可以安装 docker 和 docker-compose 的操作系统。 在本例中，我们使用 Ubuntu 使用 docker 部署 EdgeX。 设置 S7 设备 !!! warning "警告" 本页面并不是设置 S7 设备的完整指南，仅介绍了几个重要步骤。 设置 ISO-on-TCP 访问 IP protocol 设置 Ethernet addresses -> IP protocol, 例如： 192.168.123.199/255.255.255.0 启用 S7 Communication 远程访问 启用 Permit access with PUT/GET communication from remote partner. (可选) 保留 S7 communication S7 Communication 保留和使用的资源数量，“Configured” 为 0，表示 EdgeX 最多可以建立 8 个连接。 !!! warning "提示" 重要提示：不要与单个 S7 设备创建超过“6”个连接！ 我们需要为 WINCC 保留 “2” 个连接。 设置数据块 Data Blocks Data Block 1 在本例子中，只需使用 Clcok 偏移量 160.0 中的进行测试即可。 Data Block 4 在本例子中, 使用 bool, byte, word, dword, int, dint, real 作为测试. 启动微服务之前 以下部分介绍如何在启动服务之前完成设置。 使用预定义的配置进行测试 设置新配置 使用预定义的配置进行测试 文件夹中的预定义配置：cmd/res/ 预定义 Device Profile 设备配置 Device Profile profiles/Simple-Driver.yaml 描述了一个 S7-1200 设备，它包含 8 个资源，如下所示： name: S7-Device manufacturer: YIQISOFT description: Example of S7 Device model: Siemens S7 labels: [ISO-on-TCP] deviceResources: - name: bool description: PLC bool isHidden: false properties: valueType: Bool readWrite: RW attributes: NodeName: DB4.DBX0.0 - name: byte description: PLC byte isHidden: false properties: valueType: Uint8 readWrite: RW attributes: NodeName: DB4.DBB1 - name: word description: PLC word isHidden: false properties: valueType: Int16 readWrite: RW attributes: N…

分享｜EdgeX 案例之 BACnet 设备读取，并通过物联网平台展示分析
type: item
date: 2023-12-01T00:54:00+00:00
description: 物联网边缘端协议很多，BACnet 就是一种比较常见的监控协议。今天，就来跟大家分享一下 BACnet 基于 EdgeX 框架数据采集、控制和分析。 目录 BACnet 是什么？ 准备工作 EdgeX 微服务 EdgeX 基本微服务 EdgeX BACnet 微服务 配置 Device Profile 和 Device 获取 BACnet 设备数据 了解 BACnet 工作机制，可采用多种方法来做 数据上传 亿琪软件物联网平台 YiCONNECT 物联网平台展示和分析数据 关于我们 "亿琪软件" "联系我们--商业服务" BACnet 是什么？ !!! info "BACnet 协议" BACnet是用于智能建筑的通信协议，是国际标准化组织（ISO）、美国国家标准协会（ANSI）及美国采暖、制冷与空调工程师学会（ASHRAE）定义的通信协议1。BACnet针对智能建筑及控制系统的应用所设计的通信，可用在暖通空调系统（HVAC，包括暖气、通风、空气调节），也可以用在照明控制、门禁系统、火警侦测系统及其相关的设备。优点在于能降低维护系统所需成本并且安装比一般工业通信协议更为简易，而且提供有五种业界常用的标准协议，此可防止设备供应商及系统业者的垄断，也因此未来系统扩展性与兼容性大为增加。 !!! tip "最常见的 BACnet 协议有两种" BACnet IP：网络层通讯，基于以太网，使用 IP 通信，==本案例使用此协议== BACnet MS/TP：主从站通讯，就是串口，比如RS-485 !!! warning "什么是 BACnet BBMD？" BACnet/IP 使用 UDP/IP 在现有的 IP 网络中进行通信，在多个IP子网中如果需要对 BACnet 的广播消息进行管理的时候就需要一种特殊的BBMD设备（Broadcast Management Device）。 更多信息，请查阅其他相关资源，非本案例的重点内容。 准备工作 !!! info "BACnet 模拟器" 本案例中，使用 Yabe (Yet Another Bacnet Explorer)，请自行通过互联网下载。 其中，我们会用到一个子工具：==Bacnet.Room.Simulator==，将作为 BACnet 模拟设备来获取数据和控制。 软件打开后，类似如下，请记住右下角的 Id: ==2179272== !!! info "BACnet 查询工具" 本案例中，使用两种查询工具，都可以从互联网下载来使用。 Yabe：新建一个 BACnet/IP over UDP，自动出现 Device BACnetSCAN：双击 ==BACnet IP== 条目，就会出现 Device。 !!! warning "注意" BACnetSCAN 既可以作为查询工具，也可以作为 到目前为止，都是 BACnet 相关的准备和设置。 EdgeX 微服务 EdgeX 基本微服务 !!! info "启动你的 EdgeX 核心模块" 下载 docker compose 运行环境 git clone -b v3.1.0 https://github.com/edgexfoundry/edgex-compose.git cd edgex-compose/compose-builder make run no-secty 保证你的 EdgeX 基本微服务启动成功 ✔ Container edgex-core-consul Running ✔ Container edgex-redis Running ✔ Container edgex-ui-go Running ✔ Container edgex-core-common-config-bootstrapper Running ✔ Container edgex-core-metadata Running ✔ Container edgex-kuiper Running ✔ Container edgex-support-notifications Running ✔ Container edgex-support-scheduler Running ✔ Container edgex-core-command Running ✔ Container edgex-core-data Running ✔ Container edgex-app-rules-engine Running EdgeX BACnet 微服务 !!! info "增加 BACnet 微服务" !!! warning "注意" 官方版本不能直接使用，拿不到 BACnet 设备信息，需要根据以下步骤执行 重新编译你的微服务，增加 ==ds-bacnet-ip== 即可…

分享｜EdgeX FAQ4 常见问题和解答四
type: item
date: 2023-12-01T00:43:35+00:00
description: EdgeX 爱好者社区 在使用和开发过程中，收到很多使用者和开发者的提问和反馈，我们将在一系列文章中给大家分享出来。 EdgeX Foundry 在下面将统一简称为 EdgeX。 系列文章四： 如何集成 RBAC 到 EdgeX？ 如何一次获取多个数据测点？ EdgeX 有 API Gateway 吗？ 如何接入云或企业网络？ 常见问题(FAQ) "如何集成 RBAC 到 EdgeX？" 这个问题是由老外在 GitHub 社区 discussions 里面提出来，他希望 EdgeX 能够集成第三方认证软件，比如 Keycloak，以便完成权限对接。 RBAC，其实不适合 EdgeX，这只是一个边缘计算框架而已，不是一个完整的业务系统； EdgeX 本身有 token 机制来保证安全，控制中心与 EdgeX 交互是安全可靠的就好了，无需 RBAC； 当然，你也可以改造 EdgeX 使得其能够支持 RBAC，这个工作量社区无法作出评估； "如何一次获取多个数据测点？" 当然可以，而且数量不限制。主要的问题就是每次 core-command 能承受的数据量需要手工进行调整，以达到你的数量请求。 定义一个 command，包含你所需要的 resource，即可进行绑定，EdgeX 会一次性获取完所有的数据，返回到 message bus 中； 修改 Service - MaxResultCount ，以便容纳你的 command； "EdgeX 有 API Gateway 吗？" GitHub 社区里，经常有人问关于 API Gateway 的事情，总的来说，基本都是没有好好读官方文档的人，不了解 EdgeX 的机制，所以不清楚。 EdgeX API Gateway 使用 nginx 来实现，并且集成了 Secure 机制，从 v3 版本开始，微服务之间也需要 JWT 认证，这是为了防止有应用绕过 API Gateway； 也可以自行修改 API Gateway 配置，完成更多集成和扩展，就是 nginx 配置而已； kong 安全机制已经从 EdgeX 被移除，相对简单了很多； "如何接入云或企业网络？" 这个问题，也是 GitHub 社区问的比较多的，尤其是那些不需要接入公有云服务的客户，他们有自己的云或企业网络，要接入进去。 用 eKuiper 规则引擎，可以通过简单的配置和命令完成简单的云对接，而且 eKuiper 已经内置了很多云服务的对接； eKuiper 除了一些云资源对接，也需要接入企业网络，比如数据库，时序数据库等，都可以完美支持； 自己开发一个 Application Service 来对接，官方提供了很多例子可以参考，主要是修改对接协议的数据格式皆可完成。 关于我们 "亿琪软件" 上海亿琪软件有限公司成立于 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