GO语言实现示例

智能边缘 BIE

  • 产品描述
    • 名词解释
    • 使用限制
    • 产品概述
    • 产品优势
    • 应用场景
  • 配置文件说明
    • baetyl-rule
    • baetyl-remote-object
    • baetyl-function
    • baetyl-broker
  • 快速入门
    • 融合模式节点安装
    • 快速入门指南
    • 离线安装k3s+docker
    • 进程模式节点安装
      • 在linux上安装
      • 在windows上安装
  • 典型实践
    • OPC-UA使用
    • 使用BIE函数计算调用文心一言
    • 边缘规则引擎实战
      • 集成Kuiper流式计算引擎
      • 边缘规则实例
    • 将AI中台模型部署至边缘节点
      • 获取AI中台模型部署包进行应用部署
      • 部署模型SDK至Atlas200DK
      • 模型中心1.0
        • 通过AI中台转换模型并下发至边缘
        • 通过AI中台直接将模型下发至边缘
      • 模型中心2.0
        • 将物体检测模型部署至边缘
        • 将图像分类模型部署至边缘
    • 部署PaddleServing模型
      • 使用BIE下发PaddleOCR模型
      • 制作GPU版本Paddle Serving推理镜像
      • 通过BIE部署Paddle Serving
    • Modbus协议采集温湿度传感器
      • 连接边缘baetyl-broker
      • 使用内置modbus驱动采集数据并进行边缘函数计算
      • 数据从baetyl-broker上传至IoTCore
    • 部署EasyDL模型SDK
      • 部署EasyDL烟火检测模型至ARM64节点
    • 部署EasyEdge模型SDK
      • 进程模式下发python SDK模型
      • 使用EasyEdge模型转换获取边缘模型
      • 部署模型SDK至Windows设备
      • 部署模型SDK至Intel Movidius设备
      • 部署模型SDK至Jetson Xavier
    • 部署自定义容器镜像模型
      • 部署mnist手写数字识别模型
      • 部署物体检测模型
    • video-infer实现边缘视频AI推断
      • 使用Movidius VPU加速边缘视频推断
      • 使用CPU实现边缘视频推断
  • 操作指南
    • 主子用户鉴权
    • 设备管理
      • 设备模拟器
      • 子设备数据云边交互方式
      • 进程模式软网关设备接入指南
      • 子设备数据云边交互方式-v2
      • 视频流管理
        • IPC子设备和驱动
        • 边缘转发RTSP视频流
      • 设备接入
        • 设备模型管理
        • 接入模板
        • 设备管理
        • 子设备绑定
      • 驱动管理
        • 进程模式软网关自定义驱动开发
        • 驱动管理
        • GO语言实现示例
        • 自定义驱动开发指南
      • 不同协议设备接入
        • BACnet设备接入
        • OPC-UA设备接入
        • Modbus 设备接入
        • IEC104设备接入
        • OPC-DA设备接入
    • 节点管理
      • 边缘应用获取云端STS鉴权
      • 进程模式节点
      • 远程MQTT消息下发
      • 节点运行模式说明
      • 节点影子
      • 远程调用
      • 容器模式节点
      • 远程调试
      • 远程SSH边缘节点
      • 边缘节点OpenAPI
      • 证书管理
      • 节点预配
    • 业务编排
      • 单元管理
      • 技能管理
      • 常见技能
    • 应用管理
      • 业务模版
      • 应用部署
        • 应用运行模式与分类说明
        • 函数应用
          • 自定义函数与依赖包解耦下发
          • 从CFC引入多个函数下发
          • 典型使用说明
          • 使用函数调用边缘AI模型
          • 自定义函数与依赖包整体下发
        • 容器应用
          • subpath子路径使用说明
          • workdir工作目录使用说明
          • Job类型容器应用
          • 容器应用状态说明
          • 原生yaml接入使用说明
          • 端口映射说明
          • 容器应用工作负载类型说明
          • Deployment类型容器应用
          • DaemonSet类型容器应用
          • QPS监控
          • emptyDir卷使用说明
          • 边缘服务调用
        • 进程应用
          • 进程应用概述
          • 可执行二进制程序类型进程应用
          • 可执行脚本类型进程应用
      • 配置管理
        • 证书
        • 函数
        • 镜像仓库凭证
        • 配置项
        • 密文
        • 镜像
        • 进程程序包
    • AI加速卡
      • AI加速卡通用资源调度方法
      • 自定义加速卡算力指标采集
      • 华为昇腾
        • 昇腾310资源监控
      • 英伟达
        • GPU资源调度-显存隔离
        • Jetson资源监控
        • GPU资源调度-显存共享
        • Jetson依赖说明
        • NVIDIA GPU资源监控
      • 寒武纪
        • MLU270资源监控
      • 百度昆仑
        • 昆仑芯片资源监控
      • 比特大陆
        • 挂载比特大陆边缘计算盒子tpu资源
        • BM-SE5资源监控
  • 服务等级协议SLA
    • 服务等级协议SLA(V1.0)
  • 备份
    • 进程模式应用
    • 部署通用CPU模型
    • 部署模型SDK至Atlas200DK
    • 适配列表
    • 连接边缘节点本地baetyl-broker
    • 使用自定义modbus应用采集
    • NVIDIA GPU资源管理
    • FAQ
    • NVIDIA Jetson专用模型部署-进程模式
    • 容器模式应用
    • 连接边缘节点本地baetyl-broker服务
    • DaemonSet类型和job类型服务部署
    • 通用CPU模型部署-容器模式
    • NVIDIA Jetson专用模型部署-容器模式
    • 功能发布记录
    • 在BIE控制台部署从AI中台下载的模型
    • EasyEdge概述
    • Nvidia_Jetson
      • 使用NVIDIA官方镜像运行模型-容器模式
      • 二进制程序运行模型-进程模式
      • 使用edgekit镜像运行模型-容器模式
    • 下载专区
      • 相关资源下载
  • 产品定价
    • 产品定价
所有文档
menu
没有找到结果,请重新输入

智能边缘 BIE

  • 产品描述
    • 名词解释
    • 使用限制
    • 产品概述
    • 产品优势
    • 应用场景
  • 配置文件说明
    • baetyl-rule
    • baetyl-remote-object
    • baetyl-function
    • baetyl-broker
  • 快速入门
    • 融合模式节点安装
    • 快速入门指南
    • 离线安装k3s+docker
    • 进程模式节点安装
      • 在linux上安装
      • 在windows上安装
  • 典型实践
    • OPC-UA使用
    • 使用BIE函数计算调用文心一言
    • 边缘规则引擎实战
      • 集成Kuiper流式计算引擎
      • 边缘规则实例
    • 将AI中台模型部署至边缘节点
      • 获取AI中台模型部署包进行应用部署
      • 部署模型SDK至Atlas200DK
      • 模型中心1.0
        • 通过AI中台转换模型并下发至边缘
        • 通过AI中台直接将模型下发至边缘
      • 模型中心2.0
        • 将物体检测模型部署至边缘
        • 将图像分类模型部署至边缘
    • 部署PaddleServing模型
      • 使用BIE下发PaddleOCR模型
      • 制作GPU版本Paddle Serving推理镜像
      • 通过BIE部署Paddle Serving
    • Modbus协议采集温湿度传感器
      • 连接边缘baetyl-broker
      • 使用内置modbus驱动采集数据并进行边缘函数计算
      • 数据从baetyl-broker上传至IoTCore
    • 部署EasyDL模型SDK
      • 部署EasyDL烟火检测模型至ARM64节点
    • 部署EasyEdge模型SDK
      • 进程模式下发python SDK模型
      • 使用EasyEdge模型转换获取边缘模型
      • 部署模型SDK至Windows设备
      • 部署模型SDK至Intel Movidius设备
      • 部署模型SDK至Jetson Xavier
    • 部署自定义容器镜像模型
      • 部署mnist手写数字识别模型
      • 部署物体检测模型
    • video-infer实现边缘视频AI推断
      • 使用Movidius VPU加速边缘视频推断
      • 使用CPU实现边缘视频推断
  • 操作指南
    • 主子用户鉴权
    • 设备管理
      • 设备模拟器
      • 子设备数据云边交互方式
      • 进程模式软网关设备接入指南
      • 子设备数据云边交互方式-v2
      • 视频流管理
        • IPC子设备和驱动
        • 边缘转发RTSP视频流
      • 设备接入
        • 设备模型管理
        • 接入模板
        • 设备管理
        • 子设备绑定
      • 驱动管理
        • 进程模式软网关自定义驱动开发
        • 驱动管理
        • GO语言实现示例
        • 自定义驱动开发指南
      • 不同协议设备接入
        • BACnet设备接入
        • OPC-UA设备接入
        • Modbus 设备接入
        • IEC104设备接入
        • OPC-DA设备接入
    • 节点管理
      • 边缘应用获取云端STS鉴权
      • 进程模式节点
      • 远程MQTT消息下发
      • 节点运行模式说明
      • 节点影子
      • 远程调用
      • 容器模式节点
      • 远程调试
      • 远程SSH边缘节点
      • 边缘节点OpenAPI
      • 证书管理
      • 节点预配
    • 业务编排
      • 单元管理
      • 技能管理
      • 常见技能
    • 应用管理
      • 业务模版
      • 应用部署
        • 应用运行模式与分类说明
        • 函数应用
          • 自定义函数与依赖包解耦下发
          • 从CFC引入多个函数下发
          • 典型使用说明
          • 使用函数调用边缘AI模型
          • 自定义函数与依赖包整体下发
        • 容器应用
          • subpath子路径使用说明
          • workdir工作目录使用说明
          • Job类型容器应用
          • 容器应用状态说明
          • 原生yaml接入使用说明
          • 端口映射说明
          • 容器应用工作负载类型说明
          • Deployment类型容器应用
          • DaemonSet类型容器应用
          • QPS监控
          • emptyDir卷使用说明
          • 边缘服务调用
        • 进程应用
          • 进程应用概述
          • 可执行二进制程序类型进程应用
          • 可执行脚本类型进程应用
      • 配置管理
        • 证书
        • 函数
        • 镜像仓库凭证
        • 配置项
        • 密文
        • 镜像
        • 进程程序包
    • AI加速卡
      • AI加速卡通用资源调度方法
      • 自定义加速卡算力指标采集
      • 华为昇腾
        • 昇腾310资源监控
      • 英伟达
        • GPU资源调度-显存隔离
        • Jetson资源监控
        • GPU资源调度-显存共享
        • Jetson依赖说明
        • NVIDIA GPU资源监控
      • 寒武纪
        • MLU270资源监控
      • 百度昆仑
        • 昆仑芯片资源监控
      • 比特大陆
        • 挂载比特大陆边缘计算盒子tpu资源
        • BM-SE5资源监控
  • 服务等级协议SLA
    • 服务等级协议SLA(V1.0)
  • 备份
    • 进程模式应用
    • 部署通用CPU模型
    • 部署模型SDK至Atlas200DK
    • 适配列表
    • 连接边缘节点本地baetyl-broker
    • 使用自定义modbus应用采集
    • NVIDIA GPU资源管理
    • FAQ
    • NVIDIA Jetson专用模型部署-进程模式
    • 容器模式应用
    • 连接边缘节点本地baetyl-broker服务
    • DaemonSet类型和job类型服务部署
    • 通用CPU模型部署-容器模式
    • NVIDIA Jetson专用模型部署-容器模式
    • 功能发布记录
    • 在BIE控制台部署从AI中台下载的模型
    • EasyEdge概述
    • Nvidia_Jetson
      • 使用NVIDIA官方镜像运行模型-容器模式
      • 二进制程序运行模型-进程模式
      • 使用edgekit镜像运行模型-容器模式
    • 下载专区
      • 相关资源下载
  • 产品定价
    • 产品定价
  • 文档中心
  • arrow
  • 智能边缘BIE
  • arrow
  • 操作指南
  • arrow
  • 设备管理
  • arrow
  • 驱动管理
  • arrow
  • GO语言实现示例
本页目录
  • 说明
  • 文件结构
  • 实现
  • 1. driver.go
  • 2. custom.go
  • 2.1 NewCustom
  • 2.2 Start
  • 2.3 Stop
  • 2.4 Set
  • 2.5 Event
  • 3 worker.go
  • 3.1 Working
  • 3.2 Report
  • 4 device.go
  • 示例代码

GO语言实现示例

更新时间:2025-08-21

说明

该demo以go语言编写了一个自定义数采插件,模拟采集了一个有三个点位的设备。

一个驱动一般包含如下几个部分的功能实现

  1. 驱动入口,实现 baetyl-gateway/sdk/plugin/interface.go 文件中的 Driver 接口;对应示例中 driver.go
  2. 驱动核心控制引擎,负责实际各子设备的连接、对各设备的采集任务、对设备的操作(召测/置数等)的封装;对应示例中 custom.go
  3. 设备接入实现,根据设备接入通道信息,与设备建立连接,并提供针对设备的操作的底层实现;对应示例中 device.go
  4. 采集任务的具体实现,根据采集点配置对特定点位进行采集并上报;对应示例中 work.go

文件结构

Plain Text
1custom
2├── README.md
3├── cmd
4│    └── custom
5│        ├── Makefile
6│        ├── main.go
7│        └── program.yml
8├── config.go
9├── common.go
10├── custom.go
11├── device.go
12├── driver.go
13├── simulator.go
14└── worker.go
15
16
172 directories, 11 files
  • README.md:使用说明文件
  • cmd/custom/Makefile:编译用文件,make package 可以直接生成二进制并打包入口文件生成压缩包
  • cmd/custom/main.go:驱动入口文件,运行依赖 go-plugin 环境
  • cmd/custom/program.yml:驱动的入口文件,格式固定(entry: xxx)其中当前路径的占位符可用 $PATH 代替
  • config.go:驱动的配置数据结构定义,包含驱动名称、采集配置数据结构、接入配置数据结构
  • common.go:一些公共字段和实现定义,比如实际设备点位寄存器地址信息、日志等
  • custom.go:实际驱动业务逻辑控制实现,负责管理当前驱动类型设备的连接和采集任务的启动
  • device.go:一个具体子设备/传感器的接入、采集和置数实现
  • driver.go:实现了软网关框架定义的驱动接口,软网关grpc调用的实际实现
  • simulator.go:当前自定义驱动模拟生成数据的设备模拟实现
  • worker.go:根据配置要求实际的采集和上报的实现

实现

1. driver.go

  • driver.go 实现了 baetyl-gateway/sdk/plugin/interface.go 文件中的 Driver 接口
Plain Text
1type Driver interface {
2    // GetDriverInfo 获取驱动信息
3	GetDriverInfo(req *Request) (*Response, error)
4    // SetConfig 配置驱动,目前只配置了驱动的配置文件路径
5	SetConfig(req *Request) (*Response, error)
6    // Setup 宿主进程上报接口传递,必须调用下述逻辑,其余可用户自定义
7	Setup(config *BackendConfig) (*Response, error)
8    // Start 驱动采集启动,用户自定义实现
9	Start(req *Request) (*Response, error)
10    // Restart 驱动重启,用户自定义实现
11	Restart(req *Request) (*Response, error)
12    // Stop 驱动停止,用户自定义实现
13	Stop(req *Request) (*Response, error)
14
15    // Get 召测,用户自定义实现
16	Get(req *Request) (*Response, error)
17    // Set 置数,用户自定义实现
18	Set(req *Request) (*Response, error)
19}

根据软网关实现,插件启动后,gateway/driver.go 会依次调用 Setup() SetConfig() Start() 来启动驱动Setup 会设置驱动名称,以及注册上报实现其中 SetConfig 配置驱动,目前只配置了驱动的配置文件路径,Request 数据示例如下:

Plain Text
1Request {
2  BrokerID: 72938,
3  Req: "etc/custom",
4}

Start 主要完成了:

  1. 加载 SetConfig 中设的配置文件,配置包含3个文件,这三个文件正常由 BIE 云端框架,根据实际配置自动生成,在部署软网关时随服务下发

    • access_template.yml : 存放『子设备管理』-『接入模板』中的设备点表和物模型点位映射信息
    • xxx.properties[i].visitor.custom 为设备点表信息中的采集配置,自定义协议,这里一般是一个 json 格式的字符串,比如:{"device": "custom-dev-0","interval": 3000000000}
    • xxx.properties[i].mapping 为物模型点位映射信息
    • models.yml : 存放『子设备管理』-『产品』中的产品测点信息
    • sub_devices.yml : 存放『节点管理』-『子设备管理』中的驱动配置和子设备配置信息(包含具体设备的接入信息)
    • devcies[i].accessConfig.custom 为子设备的配置
    • driver 为驱动配置
  2. 根据配置文件中的数据,以数组形式构建待连接设备信息,待启动采集的任务信息

    • 设备信息:一般包含设备名称、设备接入地址、接入验证的用户名密码或者证书信息等。其中设备名称来源于 sub_devices.yml 中的 devcies[i].name 字段;设备接入信息来自于 devcies[i].accessConfig 字段;
    • 采集任务信息:一般包含设备名称,采集间隔,待采集点位的配置信息(如点位ID、点位数据类型、点位名称等)。其中设备名称来源于 sub_devices.yml 中的 devcies[i].name 字段;采样间隔包含在 sub_devices.yml 中的 devcies[i].accessConfig.custom 中;待采集点位配置信息位于 access_template.yml 的 xxx.properties 中,每一个采集点的具体接入访问信息位于 access_template.yml 的 xxx.properties.Vistor.Custom 中(如果是非自定义的系统已支持的协议,可以直接在 xxx.properties.Vistor.{协议} 字段中找到相关配置)
  3. 初始化自定义驱动并启动

2. custom.go

  • 实现了与每个设备的连接、针对每个设备周期性采集程序的启动、操作指定设备(置数、召测)的功能

2.1 NewCustom

  • 遍历 2 Start 中生成的待连接设备信息,根据每条信息建立与指定设备的连接
  • 遍历 2 Start 中生成的待启动采集的任务信息,根据采集任务配置,构造对应的采集任务

2.2 Start

异步启动针对所有设备的采集任务

2.3 Stop

通知并等待所有采集任务停止

2.4 Set

设置指定设备的指定属性值属性值的类型根据 job 中的配置进行判断转换

2.5 Event

根据接收到的时间类型做响应,比如召测等

3 worker.go

实现周期性采集上报

3.1 Working

根据待启动采集的任务信息,进行周期性收集上报

3.2 Report

调用设备层暴露的获取指定点位信息的方法来进行点位采集,然后通过 gateway/driver.go Setup 中一路透传过来的上报实现来完成数据的上报

4 device.go

完成实际设备的连接,操作方法的封装

示例代码

参考代码 :go语言实现示例

上一篇
驱动管理
下一篇
自定义驱动开发指南