【华为云IoTEdge开发实战】C#开发如何通过集成IoT边缘ModuleSDK进行数据采集

举报
一个柠檬 发表于 2022/12/19 15:12:01 2022/12/19
【摘要】 前面已经介绍了C#如何集成IoT边缘ModuleSDK,现在我们来看看如何通过C#开发集成IoT边缘ModuleSDK进行数据采集。

下载Demo

惊醒实操前,可参考创建工程的步骤创建新的工程,也可以下载Demo,解压并导入示例代码。

场景说明

开发应用驱动集成ModuleSDK进行OT数采。(此示例以采集OPCUA为示例)

  1. 在节点部署集成了ModuleSDK应用驱动。

  2. 配置好数据源模板(可自定义)。

  3. 在平台进行数据源配置,以及点位配置下发。

  4. 集成ModuleSDK应用驱动对平台下发的配置进行处理。

  5. 通过下发信息获取数据源连接,以及点位信息进行数据周期采集。

  6. 最后运用ModuleSDK的客户端进行点位数据周期上报。

代码解析

开发自定义驱动,进行OT数采。

using IoT.SDK.Edge.Interface;
using IoT.SDK.Edge.Client;
using IoT.SDK.Edge.Utils;
using IoT.SDK.Edge.Dto;
using System.Collections.Generic;
namespace ModuleSDK_Demo
{
public class DcDriver : IPointsCallback, IModuleShadowCallback
{
private DcClient dcClient;
public DcDriver()
{
// 创建数采客户端
dcClient = DcClient.CreateFromEnv();
}
public void Start()
{
// 打开数采客户端
dcClient.Open();
// 设置点位读写回调
dcClient.IPointsCallback = this;
// 同步模块影子
dcClient.StartModuleShadow(this);
}
/*
* 收到点位读取请求的处理
*/
public PointsGetRsp OnPointGet(string requestId, PointsGetReq pointsGetReq)
{
// TODO 伙伴需要根据OnModuleShadowReceived获取的数采配置实现读取opcua服务器的点位信息
// PointsGetReq的Points属性结构为[pointId1,pointId2,...]的列表
// 此处示例,读取到的点位数据均为1
PointsGetRsp response = new PointsGetRsp();
foreach(string pointId in pointsGetReq.Points)
{
response.Points.TryAdd(pointId, 1);
}
return response;
}
/*
* 收到点位设置请求的处理
*/
public PointsSetRsp OnPointSet(string requestId, PointsSetReq pointsSetReq)
{
// TODO 伙伴需要根据OnModuleShadowReceived获取的数采配置实现写opcua服务器的点位信息
// PointsSetReq的Points属性结构为[pointId:value]的键值对
// 此处示例,直接返回成功响应
return new PointsSetRsp(0, "success");
}
/*
* 模块影子回调,收到模块下行数采配置,消息需要缓存或持久化
* 进入边缘节点详细->数采配置->下发配置
*/
public void OnModuleShadowReceived(ModuleShadow shadow)
{
// 伙伴需要对影子进行缓存或持久化,可根据影子属性的更新时间进行增量同步
var briefModuleShadow = JsonUtil.FromJson<BriefModuleShadowDto>(
JsonUtil.ToJson(shadow.Properties));
// 此处示例,只要收到模块影子,则重新连接数据源,再收集数据并主动上报
ConnectDatasource(briefModuleShadow.ConnectionInfo);
CollectAndReportData(briefModuleShadow.Points);
}
/*
* 收集数据并上报
*/
public void CollectAndReportData(Dictionary<string, object> points)
{
var reportData = new Dictionary<string, object>();
foreach (string key in points.Keys)
{
PointConfig pointConfig = JsonUtil.FromJson<PointConfig>(
JsonUtil.ToJson(points.GetValueOrDefault(key)));
// 伙伴可根据pointConfig中的信息读取点位数据
// 此处示例,读取到的点位数据为10
object value = 10;
reportData.TryAdd(key, value);
}
// 调用数采应用端的接口上报数据
PointsReport pointsReport = new PointsReport(reportData);
dcClient.PointReport(pointsReport);
}
/*
* 根据数采配置的数据源连接参数完成数据源连接
*/
private void ConnectDatasource(Dictionary<string, string> connectionInfo)
{
// 以Opcua服务器为例,获取服务器连接地址
string endPoint = connectionInfo.GetValueOrDefault("endpoint");
// 伙伴根据endpoint实现连接数据源动作
}
}
}

下发配置对象

public class BriefModuleShadowDto
    {
        // 数据源id
        [JsonProperty("ds_id")]
        public string DsId { get; set; }
        // 数采模板默认参数
        [JsonProperty("default_values")]
        public Dictionary<string, string> DefaultValues { get; set; }
        // 数据源附加参数
        [JsonProperty("collection_paras")]
        public Dictionary<string, int> CollectionParas { get; set; }
        // 数据源连接信息
        [JsonProperty("connection_info")]
        public Dictionary<string, string> ConnectionInfo { get; set; }
        // 点位信息
        [JsonProperty("points")]
        public Dictionary<string, object> Points { get; set; }
    }

点位信息对象

public class PointConfig
    {
        // 点位地址,opcua地址:address = "ns=3;i=1002"
        [JsonProperty("address")]
        public string Address { get; set; }
        // 数据类型,int、int32、float、double、bool等
        [JsonProperty("data_type")]
        public string DataType { get; set; }
        // 点位采集周期单位毫秒
        [JsonProperty("cycle")]
        public int Cycle { get; set; }
        // 点位更新时间
        [JsonProperty("update_time")]
        public long UpdateTime { get; set; }
    }

注册节点

注册节点请参照注册边缘节点

设备建模&发放

请参照设备建模&发放

项目打包

参考项目构建发布,将集成ModuleSDK进行项目打包。

制作镜像包或插件包

请参照制作镜像包或插件包

添加应用

以进程部署方式为例,镜像包上传到对象存储服务OBS后。

  1. 访问IoT边缘,单击“立即使用”进入IoT边缘控制台。

  2. 选择左侧导航栏IoT边缘 > 应用管理进入页面,选择驱动应用,单击添加应用

  3. 添加驱动应用弹窗中填写相关信息,然后单击确认

  4. 前往应用版本配置界面

  5. 添加边缘应用-端点和部署配置

    说明:

    1.输入输出端点是非必需配置的,当有数据流转时才需要配置。
    2.驱动类应用和IT应用一般不需要配置。


  6. 配置确认,单击"立即发布"

    -----结束

部署应用

部署应用,具体参考部署应用,进入我们的节点详情页安装应用。

OT数采配置

此数据源以opcua模板为例。可参考OT数采配置自定义数据模板。自行开发集成ModuleSDK驱动应用,定义自己的数据源模板,以及点位信息后,下发配置。

查看采集结果

  1. 访问IoT边缘,单击“立即使用”进入IoT边缘控制台。

  2. 在左侧导航栏选择“IoT边缘>边缘节点”,选择之前创建的边缘节点,单击节点进入详情页。

  3. 选择"数采配置"页签,单击采集值下方按钮查看采集的数据。

    ----结束

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。