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 PVfield(DOL0, "VAL0")field(DOL1, "VAL1")field(DOL2, "VAL2")field(LNK0, "RESULT")field(LNK1, "RESULT")field(LNK2, "RESULT")# 在设置了RESULT PV的值后,应该运行这个PVfield(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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS中国工具(ArcGISCTools)等插件使用体验

ArcGIS中国工具&#xff08;ArcGISCTools&#xff09;的主要功能 1. 接合图表生成 这个功能允许用户生成标准分幅图的行政区边框注记&#xff0c;并在打印时自动加入。这对于需要制作标准地图的用户非常实用。 2. 图框工具 图框工具可以帮助用户创建和管理地图的图框&#…

Qt creator 控件转到槽 报错 The class containing “Ui:Dialog“ could not be found in

今天调试程序&#xff0c;发现主界面控件转到槽&#xff0c;报错如下图&#xff1a; 问题表现为&#xff1a;只有主窗口控件有这个错误&#xff0c;其他子窗口正常。 解决&#xff1a; 在网上搜这个报错信息&#xff0c;都没有一个很好的解决办法。 最后发现是我在子窗口中要…

Java根据经纬度获取两点之间的距离

Java根据经纬度获取两点之间的距离&#xff0c;最近在实现类似于钉钉打卡签到的需求&#xff0c;因为对精度要求不是很高&#xff0c;所以可以通过一个球面距离的公式来求两点距离&#xff0c;这里将地球当成一个球体&#xff0c;实际上地球是一个不规则的球体&#xff0c;所以…

C++继承(一文说懂)

目录 一&#xff1a; &#x1f525;继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 二&#xff1a;&#x1f525;基类和派生类对象赋值转换三&#xff1a;&#x1f525;继承中的作用域四&#xff1a;&a…

DHCP与TCP的简单解析

目录 一、DHCP 1.1 DHCP概述 1.2 DHCP的优势 1.3 DHCP的模式与分配方式***** 1.3.1 DHCP的模式&#xff1a;C/S模式&#xff08;客户机与服务器模式&#xff09; 1.3.2 DHCP的分配方式 1.4 DHCP的租约过程及原理 1.4.1 DHCP的工作原理***** 1.4.2 更新租约原理***** …

高考志愿怎么选专业,哪些是热门专业?

选专业看上去非常简单&#xff0c;但是真正做起来的时候确实不容易&#xff0c;因为对于很多结束高考的学生来说&#xff0c;选专业就意味着他们选择自己的未来&#xff0c;这可是直接关系到未来的学习和职业发展&#xff0c;关系到将来的就业方向&#xff0c;再加上现在的社会…

近红外光谱脑功能成像(fNIRS):2.实验设计、指标计算与多重比较

一、实验设计的策略与方法 近红外光谱成像&#xff08;INIRS&#xff09;作为一种非侵入性脑功能成像技术&#xff0c;为研究大脑活动提供了一种高效、生态效度高的方法。然而&#xff0c;为了充分利用INIRS技术并确保实验结果的准确性和可靠性&#xff0c;研究者必须精心设计实…

基于stm32开发的红外循迹小车

本项目算是接触32来开发的第一个小项目了&#xff0c;虽然前期用51写过一个循迹小车&#xff0c;以为直接转到32会比较简单&#xff0c;结果还是花了大几天才把小车的参数完全调完&#xff0c;以此来记录下自己的学习历程&#xff08;注&#xff1a;循迹算法并未加入PID算法&am…

spring boot集成easypoi导出word换行处理

项目场景&#xff1a; spring boot集成easypoi导出word <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version> </dependency> 问题描述 spring boo…

最新的 DL/T645 调试工具,工程师必备

分享一个好用的 DL/T645 调试工具&#xff0c;下载地址&#xff1a;https://www.redisant.cn/dl645master 文章目录 最新的 DL/T645 调试工具&#xff0c;工程师必备主要功能软件截图 最新的 DL/T645 调试工具&#xff0c;工程师必备 DL/T645 是中国电力行业的一个通信协议标准…

Day47:LeedCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列

1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字…

解决uni-app中全局设置页面背景颜色只有部分显示颜色的问题

在页面的style标签设置了背景色但是只显示一部分 <style lang"scss"> .content{background-color: #f7f7f7;height: 100vh; } </style>我们在app.vue里设置就行了 注意一定要是**page{}** <style>/*每个页面公共css */page{background-color: #…

淘宝商品评论电商API接口:提升销量与用户评论的策略

一、API接口简介 淘宝商品评论电商API接口是淘宝开放平台提供的一项服务&#xff0c;联讯数据通过这个接口&#xff0c;商家可以获取关于自己商品的评论数据&#xff0c;包括评论内容、评分、买家等级等信息。这些数据可以帮助商家更好地了解消费者需求&#xff0c;优化商品和服…

724.力扣每日一题7/8 Java

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 主要基于数组的…

linux主机离线安装python3环境

一、下载好python版本 Index of /ftp/python/https://www.python.org/ftp/python/ 二、创建文件夹 mkdir /home/python/ 三、上传到主机 四、解压 # 解压xz得到tar包 xz -d Python-3.9.8.tar.xz # 解压tar包 tar -xvf Python-3.9.8.tar 五、指定安装路径 # 进入解压后的…

【Python_GUI】tkinter常用组件——文本类组件

文本时窗口中必不可少的一部分&#xff0c;tkinter模块中&#xff0c;有3种常用的文本类组件&#xff0c;通过这3种组件&#xff0c;可以在窗口中显示以及输入单行文本、多行文本、图片等。 Label标签组件 Label组件的基本使用 Label组件是窗口中比较常用的组件&#xff0c;…

【LeetCode】有效的数独

目录 一、题目二、解法 一、题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…

智能充电(新能源电动车,电单车)云管理系统的定制解决方案

一 系统简介 智能充电&#xff08;新能源电动车&#xff0c;电单车&#xff09;云管理系统 是一套能够实现对充电站/桩的实时通讯、状态监控、故障检测、运营分析、数据统计、策略设置的智能化多任务管理系统。 二 平台概览 智能充电云管理系统 https://chongdianzhuang.itg…

嵌入式Linux系统编程 — 7.4 fork、vfork函数创建子进程

目录 1 父进程与子进程概念 2 fork创建子进程 3 系统调用 vfork()函数 4 vfork与 fork函数如何选择 1 父进程与子进程概念 进程与子进程是操作系统中的一个基本概念&#xff0c;用于描述进程之间的层级关系。下面是对这一概念的简要说明&#xff1a; 父进程&#xff1a;在…

从项目中初识Autosar状态机转换

目录 0 前言 1 状态转换 1.1 BSM TO RMS 1.2 RMS TO RSS 1.3 RMS TO NOS 1.4 RSS TO PBSM 1.5 PBSM TO BSM 1.6 RSS TO NOS 1.7 RSS TO RMS 2 结尾 0 前言 之前在这篇《从项目中初识Autosar网络管理》已经和大家讲了Autosar网络管理的几个状态机以及定时器的大致概念&a…