当前位置: 首页 > backend >正文

EPICS aSub记录示例2

这个IOC数据库由6个记录组成,一个bo记录,3个calc记录,1个aSub记录和1个waveform记录。

bo记录"$(P)$(R)Enable用于控制3个calc是否使能。

calc记录$(P)$(R)CurrentV01,$(P)$(R)CurrentV02,$(P)$(R)CurrentV03记录每次运行时进行自加,$(P)$(R)CurrentV01通过forward链接触发$(P)$(R)CurrentV02运行,而$(P)$(R)CurrentV02通过forward链接,触发$(P)$(R)CurrentV03运行,$(P)$(R)CurrentV03通过forward链接触发$(P)$(R)ASUB1运行。

aSub记录运行时从$(P)$(R)CurrentV01,$(P)$(R)CurrentV02,$(P)$(R)CurrentV03获取当前值,并且通过属性PP的输出链接将这三个值写到一个waveform记录中。

waveform记录以数组形式保存$(P)$(R)CurrentV01,$(P)$(R)CurrentV02,$(P)$(R)CurrentV03的三个值。

数据库设计如下:

以下是文本形式testASub.db:

record(calc, "$(P)$(R)CurrentV01") {field(SCAN, "1 second")field(SDIS, "$(P)$(R)Enable")field(FLNK, "$(P)$(R)CurrentV02")field(CALC, "A+1")field(INPA, "$(P)$(R)CurrentV01")
}record(calc, "$(P)$(R)CurrentV02") {field(SCAN, "Passive")field(SDIS, "$(P)$(R)Enable")field(FLNK, "$(P)$(R)CurrentV03")field(CALC, "A+0.1")field(INPA, "$(P)$(R)CurrentV02")
}record(calc, "$(P)$(R)CurrentV03") {field(SCAN, "Passive")field(SDIS, "$(P)$(R)Enable")field(FLNK, "$(P)$(R)ASUB1")field(CALC, "A+10")field(INPA, "$(P)$(R)CurrentV03")
}record(bo, "$(P)$(R)Enable") {field(DOL, "Disable")field(ZNAM, "Enable")field(ONAM, "Disable")
}record(aSub, "$(P)$(R)ASUB1") {field(INPA, "$(P)$(R)CurrentV01")field(INPB, "$(P)$(R)CurrentV02")field(INPC, "$(P)$(R)CurrentV03")field(OUTA, "$(P)$(R)RESULT PP")field(SCAN, "Passive")field(LFLG, "IGNORE")field(SNAM, "convert_t")field(PREC, "3")field(FTA, "DOUBLE")field(FTB, "DOUBLE")field(FTC, "DOUBLE")field(FTVA, "DOUBLE")field(NOVA, "3")
}record(waveform, "$(P)$(R)RESULT") {field(SCAN, "Passive")field(DTYP, "Soft Channel")field(PREC, "3")field(NELM, "3")field(FTVL, "DOUBLE")
}

 以下是为aSub记录实现输入和输出转换的C源程序:

#include <stdio.h>
#include <dbDefs.h>
#include <registryFunction.h>
#include <aSubRecord.h>
#include <epicsExport.h>static long convert_t(aSubRecord *prec) {long i;double * b;double *a[3] = {(double *)prec->a, (double*)prec->b, (double *)prec->c};b = (double *)prec->vala;for (i = 0; i < prec->nova; i++){b[i] = a[i][0];}return 0; /* process output links */
}epicsRegisterFunction(convert_t);

编译整个IOC,并且启动IOC:

root@xps:/usr/local/EPICS/program/myioc/iocBoot/myioc# ../../bin/linux-x86_64/myioc st.cmd
#!../../bin/linux-x86_64/myioc
< envPaths
epicsEnvSet("IOC","myioc")
...
############################################################################
## EPICS R7.0.7
## Rev. 2025-04-26T19:36+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
## Start any sequence programs
#seq sncxxx,"user=xps"
epics> dbl
TEST:CH:ASUB1
TEST:CH:Enable
TEST:CH:CurrentV01
TEST:CH:CurrentV02
TEST:CH:CurrentV03
TEST:CH:RESULT

用通道访问进行测试:

当TEST:CH:Enable为Disable时:

(base) xps@xps:/usr/local/EPICS/program/myioc/myiocApp/src$ camonitor TEST:CH:RESULT
TEST:CH:RESULT 2025-08-02 21:34:38.452150 3 310 31 3100

将TEST:CH:Eanble设为Enable时:

(base) xps@xps:/usr/local/EPICS/program/myioc/myiocApp/src$ caput TEST:CH:Enable Enable; camonitor TEST:CH:RESULT
Old : TEST:CH:Enable                 Disable
New : TEST:CH:Enable                 Enable
TEST:CH:RESULT 2025-08-02 21:34:38.452150 3 310 31 3100
TEST:CH:RESULT 2025-08-02 21:56:58.452148 3 311 31.1 3110
TEST:CH:RESULT 2025-08-02 21:56:59.452159 3 312 31.2 3120
TEST:CH:RESULT 2025-08-02 21:57:00.452136 3 313 31.3 3130
TEST:CH:RESULT 2025-08-02 21:57:01.452158 3 314 31.4 3140
TEST:CH:RESULT 2025-08-02 21:57:02.452135 3 315 31.5 3150
TEST:CH:RESULT 2025-08-02 21:57:03.452149 3 316 31.6 3160
^C
http://www.xdnf.cn/news/16804.html

相关文章:

  • 计算机网络:任播和负载均衡的区别
  • 【Linux系统】详解,进程控制
  • Flink2.0学习笔记:Stream API 窗口
  • 20250802让飞凌OK3576-C开发板在飞凌的Android14下【rk3576_u选项】适配NXP的WIFIBT模块88W8987A的蓝牙
  • 【深度学习新浪潮】什么是专业科研智能体?
  • python:如何调节机器学习算法的鲁棒性,以支持向量机SVM为例,让伙伴们看的更明白
  • Kubernetes 构建高可用、高性能 Redis 集群实战指南
  • AI应用标准详解:A2A MCP AG-UI
  • MySQL 运算符
  • WebForms 简介
  • 人类学家与建筑师:区分UX研究和项目管理的需求分析
  • 【云计算】云主机的亲和性策略(三):云主机 宿主机
  • Redis--day1--初识Redis
  • 第三十五章:让AI绘画“动”起来:第一个AI视频诞生-AnimateDiff的时间卷积结构深度解析
  • 初识 网络原理
  • 中科院开源HYPIR图像复原大模型:1.7秒,老照片变8K画质
  • 【数传电台P900配置指南:点对点、中继与一对多通讯详解】
  • 【高等数学】第七章 微分方程——第六节 高阶线性微分方程
  • 无图形界面的CentOS 7网络如何配置
  • 【Flutter】双路视频播放方案
  • 第k小整数(快排)
  • 遥控器信号捕获
  • Trice移植(Start with Trice)
  • CS231n2017-Lecture9经典CNN架构笔记
  • Java学习-运算符
  • Git 进阶使用
  • 算法篇----位运算
  • 【Mysql】字段隐式转换对where条件和join关联条件的影响
  • Oracle EBS 缺少adcfgclone.pl文件
  • 链接脚本中. = ALIGN(4);的作用?