通讯管理机之数源系统(三)置数
·
更多内容点击:边缘智联专栏
一、功能概述
置数(人工设值)是将指定测点的值强制修改为人工指定的数值,用于仿真调试、应急置数等场景。置数操作仅在内存中修改测点值,不会下发到现场设备。
核心能力:
- 支持批量置数,一次调用可同时设置多个测点
- 支持两种操作类型:置数(覆盖当前值)和清理置数(恢复实际采集值)
- 置数后的值会打上"人工置数"标记,与正常采集值区分
- 通过通道唯一标识分段路由,支持系统模块、自定义模块、采集模块三个子模块
二、接口形式
// ===================== 置数操作接口 =====================
// 输入:一个"置数请求"对象,内含多条置数项
// 输出:每项单独返回处理结果(成功或失败原因),整体返回汇总状态
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) | 字符串无法转为测点对应的数据类型 |
八、注意事项
- 不改变原始值:置数只修改最终对外展示的值,测点的原始采集值保持不变,清理置数后即可恢复
- 通道编号范围:编号范围决定路由目标,不在有效范围内的编号会被直接拒绝
- 线程安全:置数过程中驱动可能同时在更新测点值,测点内部通过标记位区分置数值与采集值
- 批量调用:一次可传入多条置数项,每条独立处理,互不影响;某条失败不影响其他条
更多推荐



所有评论(0)