EPICS database练习

news2024/11/25 18:31:22

给定一个以下的数据库:

# 指定Limit的上限,初始为10,可以通过通道访问进行设置,上限为100
record(ao, "$(P)Limit")
{
field(DRVH, "100")
field(DOL, "10")
field(PINI, "YES")
}

# 一个从0到'Limit'的渐变,这个Limit可以通过一个单独的记录进行配置
# 此记录1秒钟运行一次,每次运行时将自身值和Limit值进行比较,如果小于,则自增1,否则设为0
record(calc, "$(P)Ramp")
{
field(SCAN, "1 second")
field(INPA, "$(P)Ramp")
field(INPB, "$(P)Limit")
field(CALC, "A<B ? A+1 : 0")
}

根据以下要求对其进行扩展:

1、添加一个"$(P)Step"记录并且在CALC中使用它,使得渐变中步长增量能够在0.1和5之间。

2、为所有三个记录创建一个显示窗口。

3、让"$(P)Ramp"显示"a.u."的单位,并且使得它在十进制点后显示2位数字。

4、添加一个小组件到显示窗口,使得能够控制这个逻辑过程用什么速率。

5、配置"$(P)Ramp"在其值大于8时产生一个警报。

6、配置"$(P)Ramp"仅在其值变化2或更多时才发送值到一个存档程序。

7、添加一个模拟输出记录,当运行时,重置"$(P)Limit"为10。添加一个触发这个重置的按钮到显示窗口。

数据库设计如下:

$(P)Step记录用作输出,范围为0.1~5,其默认输出为1;calc通过INPC读取$(P)Step的值,并且存入C中并作为计算中使用的自增步长。

$(P)Reset记录运行时,将其值通过OUT字段写入到$(P)Step记录中。

$(P)Ramp记录字段设置如下:

  • PREC=2:小数点后取2位。
  • EGU=a.u.:设置记录的显示单位。
  • HIGH=8:当记录值超过8时,触发HSV设置的MINOR警报。
  • ADEL=2:变化超过2时,发送给存档程序。

文本数据库:

record(ao, "$(P)Limit") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DOL, "10")
  field(DRVH, "100")
  field(DRVL, "0")
}

record(calc, "$(P)Ramp") {
  field(SCAN, "1 second")
  field(CALC, "A<B ? A+C : 0")
  field(INPA, "$(P)Ramp")
  field(INPB, "$(P)Limit")
  field(INPC, "$(P)Step")
  field(EGU, "a.u.")
  field(PREC, "2")
  field(HIGH, "8")
  field(HSV, "MINOR")
  field(ADEL, "2")
}

record(ao, "$(P)Step") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DOL, "1")
  field(DRVH, "5")
  field(DRVL, "0.1")
}

record(ao, "$(P)Reset") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)Limit PP")
  field(DOL, "10")
}

测试:

运行数据库:

root@orangepi5:/usr/local/EPICS/program/softdb# softIoc -m P=Test: -d ramp_with_limit.db
Starting iocInit
############################################################################
## EPICS R7.0.7
## Rev. 2023-05-18T10:40+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
epics> dbl
Test:Limit
Test:Step
Test:Reset
Test:Ramp

用CSS创建显示窗口:

  • Limit输入框用于设置Test:Limit记录。
  • Step输入框用于设置Test:Step记录,设置范围0.1~5,用作Ramp记录渐变的步长。
  • Ramp显示文本框用于显示Test:Ramp记录。 
  • Reset按钮用于设置Test:Limit记录为10。

二进制记录

1)创建一个值为"Normal"和"Doubled"的BO记录,并将其添加到显示窗口。

2)在$(P)Ramp中使用来加倍有效的步长大小。

3)配置这个BO使其在设置成"Doubled"时,有效步长翻倍,在5秒钟后,它将恢复成"Normal"。

设计数据库如下:

添加的Bo记录名为$(P)Accel

文本数据库为:

record(ao, "$(P)Limit") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DOL, "10")
  field(DRVH, "100")
  field(DRVL, "0")
}

record(calc, "$(P)Ramp") {
  field(SCAN, "1 second")
  field(CALC, "A<B ? A+C*(D? 2 : 1) : 0")
  field(INPA, "$(P)Ramp")
  field(INPB, "$(P)Limit")
  field(INPC, "$(P)Step")
  field(INPD, "$(P)Accel")
  field(EGU, "a.u.")
  field(PREC, "2")
  field(HIGH, "8")
  field(HSV, "MINOR")
  field(ADEL, "2")
}

record(ao, "$(P)Step") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DOL, "1")
  field(DRVH, "5")
  field(DRVL, "0.1")
}

record(ao, "$(P)Reset") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DTYP, "Soft Channel")
  field(OUT, "$(P)Limit PP")
  field(DOL, "10")
}

record(bo, "$(P)Accel") {
  field(SCAN, "Passive")
  field(PINI, "YES")
  field(DTYP, "Soft Channel")
  field(OMSL, "supervisory")
  field(HIGH, "5")
  field(ZNAM, "Normal")
  field(ONAM, "Doubled")
}

加载数据库进行测试:

root@orangepi5:/usr/local/EPICS/program/softdb# softIoc -m P=Test: -d ramp_with_limit2.db
Starting iocInit
############################################################################
## EPICS R7.0.7
## Rev. 2023-05-18T10:40+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
epics> dbl
Test:Limit
Test:Step
Test:Reset
Test:Accel
Test:Ramp

CSS显示界面修改如下:

测试如下:

当按下Double时,渐变的步长在Step执行步长基础上翻倍,在点击Double的5秒钟后,恢复成Normal,并且步长变为Step指定的步长。

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

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

相关文章

vue3中的computed

一.computed用法 computed 计算属性就是当依赖的属性的值发生变化的时候&#xff0c;才会触发他的更改&#xff1b;如果依赖的值&#xff0c;不发生变化的时候&#xff0c;使用的是缓存中的属性值。 computed 属性是 Vue3 中的一个响应式计算属性&#xff0c;它可以根据其他响应…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目&#xff0c;用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2]&#xff0c;漏洞在2020年于此 代码合…

LabVIEW二维码生成与识别

LabVIEW二维码生成与识别 随着数字化时代的快速发展&#xff0c;QR二维码作为一种高效的信息传递和识别手段&#xff0c;已广泛应用于各行各业。利用LabVIEW软件及其NI视觉开发模块(VDM)来实现一个高效的QR二维码生成与识别系统。该系统不仅能够快速生成带有自定义信息的二维码…

未授权访问:VNC未授权访问

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大…

C++的数据结构(五):树和存储结构及示例

在计算机科学中&#xff0c;树是一种抽象数据类型&#xff08;ADT&#xff09;或是实现这种抽象数据类型的数据结构&#xff0c;用来模拟具有树状结构性质的数据集合。这种数据结构以一系列连接的节点来形成树形结构。在C中&#xff0c;树的概念和存储结构是实现各种复杂算法和…

如何利用AI提高内容生产效率与AIGC典型案例分析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

DI-engine强化学习入门(八)如何高效构建决策环境

本文章将介绍 DI-engine 中用于高效构建和标准化不同类型决策环境的系列工具&#xff0c;从而方便我们将各式各样的原始决策问题转化为适合使用强化学习方法解决的形式。 前言 对于“决策环境复杂性”的问题&#xff0c;这里描述的是在强化学习&#xff08;RL&#xff09;领域…

torch 单机 多卡 训练(二)

pytorch.distributed.launch和torchrun的对比 多卡训练 真的烦 并行训练最大的好处&#xff0c;在于GPU内存变大&#xff0c;不是变快 torch.distributed.launch CUDA_VISIBLE_DEVICES0,1,2,3 python -m torch.distributed.launch --nproc_per_node4 --nnodes1 --use_env k…

获取Linux上的Redis的用户名、密码、端口、host等信息

目录 进入redis-cli的目录 启动./redis-cli服务 查询密码 查询用户名 查询端口 查询host 参考文章&#xff1a;解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused-阿里云开发者社区 (aliyun.com) linux查看redis用户和密码_mo…

最新版★重大升级★神点云连锁餐饮V2独立版点餐系统★公众号/h5/小程序前后端全套源码

提醒&#xff1a; 市场上流通很多老版本代码&#xff0c;一大堆问题且无法保证售后的源码&#xff0c;请各位买家一定要睁大眼睛&#xff0c;以防上当受骗&#xff01;&#xff01;&#xff01;本系统源码全是经本人亲自测试与修复的完好版本&#xff0c;且本人用此版本源码已…

面试官:说说你对Node.js 的理解?优缺点?应用场景?

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎&#xff08;Google Chrome 的内核&#xff09;&#xff0c;利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…

EDA设计学习笔记2:STM32F103C8T6最小系统板的仿绘

今日开始仿制练习一个STM32F103C8T6最小系统板&#xff0c;通过对这个最小系统板的仿制&#xff0c;达到对自己PCB设计的练习的目的&#xff0c;最终目标是自己设计出一块PCB&#xff0c;做一个OLED的桌面小摆件...... 也不知道画出来能不能用..... 目录 主控芯片的搜索与放置…

定期更新与维护:技术与生活的同步律动

在这个数字化时代&#xff0c;科技的温暖之光照进了盲人朋友们的日常生活中&#xff0c;特别是那些辅助出行的应用程序&#xff0c;它们如同贴心的向导&#xff0c;引领着用户穿越城市的喧嚣与宁静。然而&#xff0c;要确保这些应用始终能够高效、安全地服务于盲人用户&#xf…

Centos 7.9如何使用源码编译安装curl最新版本

文章目录 1、前言2、curl源代码下载3、openssl安装4、编译curl4.1、配置编译环境4.2、编译输出二进制curl程序4.3、安装编译后的curl4.4、编译完成检查4.5、验证安装 1、前言 Centos 7.9&#xff0c;由于系统为2017年发行&#xff0c;且以稳定性为主&#xff0c;部分工具版本较…

每日OJ题_贪心算法四⑥_力扣1262. 可被三整除的最大和

目录 力扣1262. 可被三整除的最大和 解析代码 力扣1262. 可被三整除的最大和 1262. 可被三整除的最大和 难度 中等 给你一个整数数组 nums&#xff0c;请你找出并返回能被三整除的元素最大和。 示例 1&#xff1a; 输入&#xff1a;nums [3,6,5,1,8] 输出&#xff1a;1…

chorme浏览器或者edge浏览器使用开发者模式

本篇文章主要讲解edge&#xff0c;因为它内核是chorme&#xff0c;还可以使用微软账号同步&#xff0c;谷歌翻译也凉凉了&#xff0c;edge还可以用翻译&#xff0c;推荐国内windows用户用它。 打开开发者模式 直接按F12点击右上角三个点...&#xff0c;点击更多工具&#xff…

如何通过iptables配置URL过滤白名单?

正文共&#xff1a;1111 字 18 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们刚刚测完了iptables配置URL黑名单过滤&#xff08;如何通过iptables配置URL过滤黑名单&#xff1f;&#xff09;&#xff0c;整体效果还算不错。但是&#xff0c;在很多时候&#xff0c;可能我…

体验MouseBoost PRO,让Mac操作更高效

还在为Mac的右键功能而烦恼吗&#xff1f;试试MouseBoost PRO for Mac吧&#xff01;这款强大的鼠标右键增强软件&#xff0c;能让你通过简单操作即可激活多种实用功能&#xff0c;让你的工作变得更加轻松。其高度定制化的设计&#xff0c;更能满足你的个性化需求。赶快下载体验…

Spring STOMP-消息处理流程

一旦STOMP的接口被公布&#xff0c;Spring应用程序就成为连接客户端的STOMP代理。本节描述服务端消息处理的流程。 spring-messaging模块包含消息类应用的基础功能&#xff0c;这些功能起源于Spring Integration项目。并且&#xff0c;后来被提取整合到Spring框架&#xff0c;…

<MySQL> 数据库基础

目录 一、数据库概念 &#xff08;一&#xff09;什么是数据库 &#xff08;二&#xff09;数据库存储介质 &#xff08;三&#xff09;常见数据库 二、数据库基本操作 &#xff08;一&#xff09;连接数据库 &#xff08;二&#xff09;使用数据库 &#xff08;三&…