EPICS数据库示例

本文目标是使用EPICS数据库示例帮助新手理解如何使用不同的示例。

1、使用seq和mbbo的简单选择器

这个简单示例展示了如何使用一个mbbo和一个seq来旋转哪个值将被设置到一个PV。

# 这个mbbo记录将选择将运行seq的哪段
record(mbbo, "CHOOSE") {
    field(VAL,  "0")
    field(FLNK, "SEQ")
}

record(seq, "SEQ") {
    field(SELM, "Specified")
    # 此处我们指定mbbo记录作为选择器
    field(SELL, "CHOOSE")
    # 取决于这个选择,将选择一个不同的PV写入到RESULT PV
    field(DOL0, "VAL0")
    field(DOL1, "VAL1")
    field(DOL2, "VAL2")
    field(LNK0, "RESULT")
    field(LNK1, "RESULT")
    field(LNK2, "RESULT")
    # 在设置了RESULT PV的值后,应该运行这个PV
    field(FLNK, "RESULT")
}

record(ai, "VAL0") {
    field(PREC, 2)
    field(VAL, "1.1")
}

record(ai, "VAL1") {
    field(PREC, 2)
    field(VAL, "2.2")
}

record(ai, "VAL2") {
    field(PREC, 2)
    field(VAL, "3.3")
}

record(ai, "RESULT") {
    field(PREC, 2)
}

 用softIOC加载以上记录数据库,并且用dbl查看加载的记录实例:

orangepi@orangepi5plus:/usr/local/EPICS/program/softDB$ softIoc -d test.db
Starting iocInit
############################################################################
## EPICS R7.0.8
## Rev. 2024-04-17T15:36+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
epics> dbl
VAL0
VAL1
VAL2
RESULT
CHOOSE
SEQ

在局域网中另一个终端中,进行测试,分别向选择器CHOOSE中写入0,1,2,并且查看记录RESULT的结果:

(base) [blctrl@localhost ~]$ caput CHOOSE 0; caget RESULT
Old : CHOOSE                         0
New : CHOOSE                         0
RESULT                         1.1
(base) [blctrl@localhost ~]$ caput CHOOSE 1; caget RESULT
Old : CHOOSE                         0
New : CHOOSE                         1
RESULT                         2.2
(base) [blctrl@localhost ~]$ caput CHOOSE 2; caget RESULT
Old : CHOOSE                         1
New : CHOOSE                         2
RESULT                         3.3

2、使用'*'重写一个记录字段

本实例展示了如何使用记录类型"*"设置/重写一个已经定义好的记录的一个字段。当你正在处理来自一个模块的记录并且想要更改已经定义好的任何字段或者设置某些原先没有定义好的字段时,这会有用。

test02-1.db:

# 这是一个初始记录定义的示例。
record(ao, "MYRECORD"){
    field(DESC, "My record")
}

test02-2.db:

# 此定义将设置未在原先文件中定义的字段DRVL和DRVH。
record("*", "MYRECORD"){
    field(DRVL, "0")
    field(DRVH, "10")
}

以下测试测试过程:

1)构建IOC结构:

makeBaseApp.pl -t ioc dbtest
makeBaseApp.pl -i -t ioc dbtest

2)将test02-1.db和test02-2.db添加到dbtest/dbtestApp/Db路径下,并将其添加到Makefile文件中。

3) 返回到IOC定成目录dbtest执行make进行编译。

4)进入IOC启动路径,编辑st.cmd文件,添加以下两行:

...
dbLoadRecords("db/test02-1.db")
dbLoadRecords("db/test02-2.db")
...

5) 启动这个IOC并且查看加载的记录

../../bin/linux-aarch64/dbtest st.cmd
#!../../bin/linux-aarch64/dbtest
...
epics> dbl
MYRECORD

6) 用通道访问进行测试:

(base) [blctrl@localhost ~]$ caget MYRECORD.DESC MYRECORD.DRVL MYRECORD.DRVH
MYRECORD.DESC                  My record
MYRECORD.DRVL                  0
MYRECORD.DRVH                  10

3 使用calc的简单计数器

这个简单示例展示了如是用一个calc产生一个以1Hz更新的计数器。

record(calc, "COUNTER"){
    field(VAL,  "0")
    field(CALC, "VAL+1")
    field(SCAN, "1 second")
}

用softIOC加载以上记录:

 softIoc -d test03.db
Starting iocInit
############################################################################
## EPICS R7.0.8
## Rev. 2024-04-17T15:36+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
depics> dbl
COUNTER

用通道访问进行测试:

(base) [blctrl@localhost ~]$ camonitor COUNTER
COUNTER                        2024-07-08 11:57:56.087315 8
COUNTER                        2024-07-08 11:57:57.087179 9
COUNTER                        2024-07-08 11:57:58.087148 10
COUNTER                        2024-07-08 11:57:59.087178 11
COUNTER                        2024-07-08 11:58:00.087110 12
^C

4、进行任务交替输出的记录的两个计数器

这个示例运行两个配置为1Hz的两个计数器。在每个计数器间隔末尾,运行一个输出记录。这可以用于基于一个周期循环切换事物启动和停止。

数据库设计如下:

任务1时长5秒,任务2时长3秒,两个任务交替进行: 

record(ao, DUTY_CYC_TIM1) {
  field(DESC, "duty cycle time 1")
  field(SCAN, "Passive")
  field(VAL, "3")
  field(EGU, "s")
}

record(ao, DUTY_CYC_TIM2) {
  field(DESC, "duty cycle time 2")
  field(SCAN, "Passive")
  field(VAL, "2")
  field(EGU, "s")
}

record(calcout, DUTY_CYC1) {
  field(DESC, "duty cycled counter 1")
  field(SCAN, "1 second")
  field(CALC, "VAL-1")
  field(OUT, "DUTY_RESET2 PP")
  field(OOPT, "Transition To Zero")
  field(DOPT, "Use CALC")
}

record(calcout, DUTY_CYC2) {
  field(DESC, "duty cycled counter 2")
  field(SCAN, "1 second")
  field(CALC, "VAL-1")
  field(OUT, "DUTY_RESET1 PP")
  field(OOPT, "Transition To Zero")
  field(DOPT, "Use CALC")
}

record(calcout, DUTY_RESET1) {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(FLNK, "DUTY_ACT1")
  field(CALC, "A")
  field(INPA, "DUTY_CYC_TIM1")
  field(OUT, "DUTY_CYC1")
  field(DOPT, "Use CALC")
}

record(calcout, DUTY_RESET2) {
  field(SCAN, "Passive")
  field(FLNK, "DUTY_ACT2")
  field(CALC, "A")
  field(INPA, "DUTY_CYC_TIM2")
  field(OUT, "DUTY_CYC2")
  field(DOPT, "Use CALC")
}

record(calcout, DUTY_ACT1) {
  field(DESC, "duty cycle action 1")
  field(CALC, "VAL+1")
}

record(calcout, DUTY_ACT2) {
  field(DESC, "duty cycle action 2")
  field(CALC, "VAL+1")
}

测试:

(base) [blctrl@localhost ~]$ camonitor  DUTY_ACT1  DUTY_ACT2
DUTY_ACT1                      2024-07-08 13:57:51.712822 1
DUTY_ACT2                      <undefined> 0 UDF INVALID
DUTY_ACT2                      2024-07-08 13:57:56.212409 1
DUTY_ACT1                      2024-07-08 13:57:58.212538 2
DUTY_ACT2                      2024-07-08 13:58:03.212562 2
DUTY_ACT1                      2024-07-08 13:58:05.212573 3
DUTY_ACT2                      2024-07-08 13:58:10.212532 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/783160.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LVS+Nginx高可用集群--基础篇(二)

1.虚拟主机-使用nginx为静态资源提供服务 静态资源服务器&#xff1a;主要包括两类资源&#xff0c;网页&#xff1b;图片&#xff0c;音频等&#xff1b; 也可以通过别名设置静态资源路径。 配置代码&#xff1a; server {listen 88;server_name localhost;locatio…

DFS回溯剪枝|KMP通过数组记录减少判断子字符串|思路

KMP|DFS回溯剪枝 #1、NC149kmp 初步思路&#xff1a; 两层for循环&#xff0c;一个T的字符开始与 S的字符比较&#xff0c;挨个比较&#xff0c;遇到不同就continue当前T的字符&#xff0c;重复步骤》效率太低&#xff0c;超时 eg: TABSABABABD SABABD S&#xff01;A时&#…

四川蔚澜时代电子商务有限公司持续领跑抖音电商

在当今这个数字化飞速发展的时代&#xff0c;电子商务已成为推动经济增长的重要引擎。而在众多电商平台中&#xff0c;抖音电商以其独特的社交属性和年轻化的用户群体&#xff0c;逐渐崭露头角。四川蔚澜时代电子商务有限公司正是这股潮流中的佼佼者&#xff0c;他们专注于抖音…

创建一个AXIS的初始IP核

参考自&#xff1a;https://www.cnblogs.com/milianke/p/17936380.html 以该博主文章为主&#xff0c;本文章做补充。 注意的点&#xff1a; edit ip 在导出axis的主机和从机的时候&#xff0c;记得选择edit ip&#xff0c;这样才能看到从机和主机的源代码&#xff0c;然后…

2024平价蓝牙耳机哪个牌子好?盘点热门平价蓝牙耳机推荐

2024年来&#xff0c;蓝牙耳机市场逐渐走向平价&#xff0c;这使得越来越多的消费者能够轻松拥有一副高性价比的蓝牙耳机。然而&#xff0c;在如此丰富的选择中&#xff0c;2024平价蓝牙耳机哪个牌子好&#xff1f;成为了许多人的烦恼。为了帮助大家更好地了解市场上的热门产品…

8、开发与大模型对话的独立语音设备

一、设计原理 该系统的核心部分主要由ESP32-WROVER开发板和ESP32-CAM摄像头、MAX9814麦克风放大器模块、MAX98357功放、声音传感器和SU-03T语音识别芯片构成。通过使用ESP32-WROVER开发板,用户可以实现通过语音与ai进行交互并进行人脸识别。 系统中,从外部输入电源中获取电源…

HTML5使用<output>标签:显示一些计算结果

HTML5 提供的 output 标签&#xff0c;用于显示出一些计算的结果或者脚本的其他结果。output 标签必须从属于某个表单&#xff0c;也就是说&#xff0c;必须将 output 标签写在表单内部&#xff0c;或者在该元素中添加 form 属性。 output 标签语法&#xff1a; <output f…

盘点2024年10款超级好用的项目管理软件,建议收藏!

今天猴哥整理并分享国内外使用最广泛的10大项目管理工具软件&#xff0c;同时探讨如何选择适合自己的项目管理工具所需考虑的要素。在国内外市场上&#xff0c;有非常多的项目管理软件可供选择。然而&#xff0c;逐一尝试这些软件将耗费大量时间&#xff0c;因此需要寻找更好更…

vue3中使用 tilwindcss报错 Unknown at rule @tailwindcss

解决方法&#xff1a; vscode中安装插件 Tailwind CSS IntelliSense 在项目中的 .vscode中 settings.json添加 "files.associations": {"*.css": "tailwindcss"}

基于CentOS Stream 9平台搭建MinIO以及开机自启

1. 官网 https://min.io/download?licenseagpl&platformlinux 1.1 下载二进制包 指定目录下载 cd /opt/coisini/ wget https://dl.min.io/server/minio/release/linux-amd64/minio1.2 文件赋权 chmod x /opt/coisini/minio1.3 创建Minio存储数据目录&#xff1a; mkdi…

我是售前工程师转大模型了,不装了我摊牌了

有无售前工程师的朋友&#xff0c;心里的苦谁懂呀&#xff0c;售前工程师是项目开发人员与业务销售人员的桥梁&#xff0c;在业务销售人员眼中&#xff0c;他们是技术人员&#xff0c;在项目实施中的开发人员眼中&#xff0c;他们是专注技术的销售人员&#xff0c;在用户眼中&a…

vue3关于在线考试 实现监考功能 推流拉流

vue3 关于在线考试 实现监考功能&#xff0c; pc端考试 本质是直播推流的功能 使用腾讯云直播: 在线文档 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><link rel"icon" href"/f…

linux 安装Openjdk1.8

一、在线安装 1、更新软件包 sudo apt-get update 2、安装openjdk sudo apt-get install openjdk-8-jdk 3、配置openjdk1.8 openjdk默认会安装在/usr/lib/jvm/java-8-openjdk-amd64 vim ~/.bashrc export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME${J…

数据分析入门指南Excel篇:各类Excel函数概览与详解(二)

在当今数字化时代&#xff0c;数据已成为推动业务决策和创新的关键因素。而表格结构数据&#xff0c;作为最常见的数据存储形式之一&#xff0c;广泛应用于财务、物流、电商等多个领域。本文将基于提供的材料文本&#xff0c;深入探讨表格数据的处理与分析&#xff0c;特别是通…

【云原生】Kubernetes部署EFK日志分析系统

Kubernetes部署EFK日志分析系统 文章目录 Kubernetes部署EFK日志分析系统一、前置知识点1.1、k8s集群应该采集哪些日志&#xff1f;1.2、k8s比较流行的日志收集解决方案1.3、fluentd、filebeta、logstash对比分析1.3.1、Logstash1.3.2、Filebeat1.3.3、fluentd 1.4、EFK工作原理…

STM32自己从零开始实操08:STM32主控原理图

由于老师使用的各引脚分门别类的单片机原理图我没有找到&#xff0c;我使用是引脚按顺序摆放的&#xff0c;不方便一个模块一个模块截图展示&#xff0c;所以这部分使用老师的原理图。 一、电源 1.1电源的介绍 1.1.1数字电源和地&#xff08;VDD和VSS&#xff09; 数字电源…

修改CentOS7.9跟Unbantu24的ip地址

修改CentOS的IP地址 ip addr 查看IP地址 cd /etc/sysconfig/network-scripts ls vi ifcfg-ens33修改ip地址跟干网关地址 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" DEFROUTE"yes" IPV4_FA…

项目2:API Hunter 细节回顾 -2

一. 接口上线/下线功能 接口的上线和下线是由管理员负责进行的。 上线接口&#xff0c;即发布接口。首先需要判断接口是否存在&#xff0c;然后判断接口是否可调用。如果可以调用&#xff0c;就修改数据库中该接口的状态字段为 1&#xff0c;代表发布&#xff0c;默认状态为 …

精美个人博客 付费搭建

博客演示地址&#xff1a;http://gavana.top/ 1、前端博客页 2、后端管理页 此项目原作者已开源&#xff0c;地址&#xff1a;Naccl/NBlog: &#x1f353; Spring Boot Vue 前后端分离博客系统 https://naccl.top (github.com) 可以自己搭建&#xff0c;我只是负责搭建起可直…

【Java13】包

“包”这个机制&#xff0c;类似于分组。主要作用是区分不同组内的同名类。例如&#xff0c;高三三班有一个“王五”&#xff0c;高二八班也有一个“王五”。高三三班和高三八班就是两个不同的包。 Java中的包&#xff08;package&#xff09;机制主要提供了类的多层命名空间&…