更多内容点击边缘智联专栏

一、功能概述

置数(人工设值)是将指定测点的值强制修改为人工指定的数值,用于仿真调试、应急置数等场景。置数操作仅在内存中修改测点值,不会下发到现场设备

核心能力:

  • 支持批量置数,一次调用可同时设置多个测点
  • 支持两种操作类型:置数(覆盖当前值)和清理置数(恢复实际采集值)
  • 置数后的值会打上"人工置数"标记,与正常采集值区分
  • 通过通道唯一标识分段路由,支持系统模块、自定义模块、采集模块三个子模块

二、接口形式


// ===================== 置数操作接口 =====================
// 输入:一个"置数请求"对象,内含多条置数项
// 输出:每项单独返回处理结果(成功或失败原因),整体返回汇总状态
class DataSourceSetValueItem
{
public:
    //置数类型
    typedef enum {
        eSetTypeInvalid = 0,
        eSetTypeDirectSetUp,   //置数
        eSetTypeCleanValue,    //清理置数
    } eSetType;
    
    //置数处理结果
    typedef enum {
        eSetResultTypeSuccess = 0,
        eSetResultTypeFaile = -1,
        
        eSetResultTypeFindChannelIdInvalid = -10,
        eSetResultTypeFindDevIdInvalid = -11,
        eSetResultTypeFindPointIdInvalid = -12,
    } eSetResultType;

    //置数类型
    eSetType    m_eSetType;
    // 测点Id信息
    uint32_t m_uChannelId;
    uint32_t m_uDevId;
    uint32_t m_uPointId;
    
    string m_strValue;      //置数值: 字符串类型,根据变量类型进行转换
    
    // 置数结果
    eSetResultType  m_eResultType;
public:
    DataSourceSetValueItem(/* args */) {
        m_eSetType = eSetTypeInvalid; 
    
        m_uChannelId = 0;
        m_uDevId = 0;
        m_uPointId = 0;
        m_strValue = "";
    
        m_eResultType = eSetResultTypeFaile; 
    };
};

class DataSourceSetValue
{
public:

    vector<DataSourceSetValueItem>  m_vValueBlack;
public:
    DataSourceSetValue(/* args */) {};
};



三、置数项结构

每条置数项包含以下信息:

字段 说明
操作类型 置数 或 清理置数
通道编号 测点所属通道的唯一编号
设备编号 测点所属设备的唯一编号
测点编号 测点本身的唯一编号
置数值 字符串形式,内部根据测点值类型自动转换
执行结果 操作完成后回填,成功/失败及具体错误原因

四、处理流程

上层调用
  │
  ▼
统一入口层 → 直接委托给"模块路由层"
  │
  ▼
模块路由层 → 根据通道编号分段分发:
  ├── 系统模块
  ├── 自定义模块
  └── 采集模块
        │
        ▼
      采集模块 → 按三级索引查找目标测点:
        ├── ① 遍历所有通道,按通道编号匹配
        ├── ② 在通道内遍历设备,按设备编号匹配
        ├── ③ 在设备的测点表中按测点编号查找
        └── ④ 根据操作类型执行:
              ├─ 置数:将字符串转为对应类型 → 写入测点值 → 打上人工置数标记
              └─ 清理置数:去除人工置数标记,恢复采集值

五、值类型转换

置数值以字符串传入,根据测点自身的数据类型自动转换:

测点值类型 转换方式 典型场景
浮点数 字符串 → 双精度浮点 遥测模拟量(温度、压力)
长整型 字符串 → 64 位整数 遥脉累计值(电能)
字符串 直接赋值 文本类数据

若字符串无法转换为目标类型,该项返回"类型转换错误"。


六、操作类型说明

操作类型 作用 标记位影响
置数 用指定值覆盖测点当前值 人工置数标记 = 1
清理置数 取消人工置数,后续恢复为采集值 人工置数标记 = 0

七、错误码

每个置数项操作完成后,执行结果字段会被回填为以下值之一:

结果 含义
成功(0) 置数或清理操作完成
失败(-1) 通用失败
通道编号无效(-10) 在整个系统中找不到该通道
设备编号无效(-11) 通道内找不到该设备
测点编号无效(-12) 设备内找不到该测点
类型转换错误(-13) 字符串无法转为测点对应的数据类型

八、注意事项

  1. 不改变原始值:置数只修改最终对外展示的值,测点的原始采集值保持不变,清理置数后即可恢复
  2. 通道编号范围:编号范围决定路由目标,不在有效范围内的编号会被直接拒绝
  3. 线程安全:置数过程中驱动可能同时在更新测点值,测点内部通过标记位区分置数值与采集值
  4. 批量调用:一次可传入多条置数项,每条独立处理,互不影响;某条失败不影响其他条
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐