首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >EPICSv7 PVRecord创建示例

EPICSv7 PVRecord创建示例

原创
作者头像
zzh-dahai
修改2025-06-24 11:10:44
修改2025-06-24 11:10:44
7400
代码可运行
举报
运行总次数:0
代码可运行

创建 EPICSv7的单元测试程序,验证 PVRecord(过程变量记录)的功能。通过单元测试验证了三种 PVRecord 的创建:标量记录(Scalar Record):存储单个值(如 double、int 等);数组记录(Scalar Array Record):存储同类型值的数组;自定义记录(PowerSupply):基于特定结构的自定义记录。

1. 头文件与命名空间

代码语言:javascript
代码运行次数:0
运行
复制
#include <epicsUnitTest.h>
#include <testMain.h>
// ...其他头文件...

using namespace epics::pvData;
using namespace epics::pvDatabase;
using namespace epics::pvCopy;

  • 关键依赖
    • epicsUnitTest.h:EPICS 单元测试框架。
    • pvData.h:提供基础数据类型(如ScalarTypePVStructure)。
    • pvDatabase.h:提供 PVRecord 相关类。
    • powerSupply.h:自定义的电源记录结构(需额外实现)。

2. 工具函数:创建不同类型的 PVRecord
代码语言:javascript
代码运行次数:0
运行
复制
// 创建标量记录(如double、int等单值)
static PVRecordPtr createScalar(
    string const & recordName,
    ScalarType scalarType,
    string const & properties)
{
    PVStructurePtr pvStructure = getStandardPVField()->scalar(scalarType,properties);
    PVRecordPtr pvRecord = PVRecord::create(recordName,pvStructure);
    return pvRecord;
}

// 创建标量数组记录
static PVRecordPtr createScalarArray(
    string const & recordName,
    ScalarType scalarType,
    string const & properties)
{
    PVStructurePtr pvStructure = getStandardPVField()->scalarArray(scalarType,properties);
    return PVRecord::create(recordName,pvStructure);
}
  • 功能:利用 EPICS 的标准字段工厂(getStandardPVField())创建不同类型的结构,并封装为 PVRecord。
  • 参数
    • scalarType:标量类型(如pvDoublepvInt)。
    • properties:元数据属性(如"alarm,timeStamp")。
3. 测试用例:验证记录创建
代码语言:javascript
代码运行次数:0
运行
复制
// 测试标量记录
static void scalarTest()
{
    PVRecordPtr pvRecord = createScalar("doubleRecord", pvDouble, "alarm,timeStamp.display");
    testOk1(pvRecord.get() != 0);  // 验证记录创建成功
}

// 测试数组记录
static void arrayTest()
{
    PVRecordPtr pvRecord = createScalarArray("doubleArrayRecord", pvDouble, "alarm,timeStamp");
    testOk1(pvRecord.get() != 0);
}

// 测试自定义PowerSupply记录
static void powerSupplyTest()
{
    PVStructurePtr pv = createPowerSupply();  // 需在powerSupply.h中实现
    PVRecordPtr pvRecord = PowerSupply::create("powerSupply", pv);
    testOk1(pvRecord.get() != 0);
}
  • 验证逻辑
    • 调用创建函数并检查返回的指针是否有效。
    • testOk1() 是 EPICS 单元测试框架的断言函数。
4. 主函数:测试入口
代码语言:javascript
代码运行次数:0
运行
复制
MAIN(testPVRecord)
{
    testPlan(3);  // 声明要运行3个测试用例
    scalarTest();
    arrayTest();
    powerSupplyTest();
    return 0;
}
  • MAIN() 是 EPICS 定义的测试程序入口宏。
  • testPlan(3) 指定测试用例数量,用于统计测试结果。

关键技术点

a. PVRecord 架构
  • PVRecord:EPICS 中存储和管理过程变量的核心类,支持:
    • 数据存储(PVStructure)。
    • 元数据(如报警、时间戳)。
    • 事件通知机制。
b. 数据结构

ScalarType:枚举类型,表示基本数据类型:

代码语言:javascript
代码运行次数:0
运行
复制
enum ScalarType {
    pvBoolean, pvByte, pvShort, pvInt, pvLong,
    pvUByte, pvUShort, pvUInt, pvULong,
    pvFloat, pvDouble, pvString
};
c. 元数据属性
  • properties 参数(如"alarm,timeStamp"):
    • alarm:添加报警状态信息。
    • timeStamp:添加时间戳。
    • display:添加显示相关元数据(如范围、单位)。

潜在扩展点

  1. 添加数据操作测试
    • 验证记录创建后,是否能正确读写数据。
    • 检查元数据(如时间戳)是否自动更新。
  2. 扩展 PowerSupply 测试
    • 需补充powerSupply.h的实现,定义电源特有的字段(如电压、电流)。
    • 验证自定义记录的业务逻辑(如电流 - 电压关系)。
  3. 压力测试
    • 测试大量记录创建时的性能。
    • 验证多线程环境下的并发访问。

总结

代码通过单元测试验证了 EPICS 的三种基本记录类型的创建功能,是理解 EPICS 数据模型和测试框架的良好示例。实际应用中,还需扩展测试用例以覆盖更多功能场景(如数据操作、异常处理)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 头文件与命名空间
  • 2. 工具函数:创建不同类型的 PVRecord
  • 3. 测试用例:验证记录创建
  • 4. 主函数:测试入口
  • 关键技术点
    • a. PVRecord 架构
    • b. 数据结构
    • c. 元数据属性
  • 潜在扩展点
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档