CS-Stdio Display Builder

2023-11-14

Display Builder

1) 操作界面编辑器和Runtime

2)在EPICS edd/dm, medm, edm, ...想法上构建

3)与CS-Studio 'BOY'兼容性非常好

4)大约2015年在CS-Stdio/Eclipse中开始,现在在CS-Studio/Phoebus中

5) 从209年以Web Runtime获取。

示例:

SNS加速器

SNS线站

浏览这些示例

1) 启动CSS/Phoebus

2) 你的设置可能有一个菜单条目

3)如果没有,或者如果你想要检查和编辑这些示例:Application/Display/Examples/Install Example Display。

发送PV到其它工具

 环境菜单用PV打开其它工具

在编辑其中打开已有显示窗口

1) 环境菜单可以在编辑器中打开任何显示窗口

 2) 下载远程文件

创建新显示窗口

菜单Application->Display->New Display:输入一个带有.bob扩展名的名称。 

编辑一个显示窗口

 

 推荐用于编辑的设置

1) 选择一个顶层目录,例如在你安装了示例文件的位置。

2) 打开Application->Utility->File Brower

  • 设置它为你的顶层目录
  • 在File browser标签上,打开环境菜单,"Split Horizontal",接着"Lock Pane"。

3) 菜单Window->Save Layout As .. "Editding"

4)   菜单Applications->Display->New Display:在你的顶层目录中创建新文件。

保持其简单

1) 添加一个部件

2) 输入标签的文本或者部件的PV名称

3) 结束

运行时,部件将

1) 显示用单位格式化的PV的值。

2) 指示警报,断开

3)显示带有PV名和值的工具提示

4) 从枚举PV读取组合框选项,从数值PV读取滑动条范围。

5) 当'控制'部件没有PV写访问时,被禁用。

扩展第一个显示窗口

1) 从调色板拖动一个"Text Update"到编辑窗口,输入PV名称"sim://ramp(1,10,1)"。注意:PV名称自动补全弹出。

 

 2) 添加一个"Boolean Button":PV名"loc://test"

3) 添加"LED":PV名"Ioc://test"。注意在PV历史中的名称。

4) 执行这个显示窗口。工具按钮或环境菜单。

PV名称

1) ca://some_pv_name:EPICS通道访问PV

2)some_pv_name:一般相同,由于"ca://"是默认的。

3) sim://sine:模拟的PV。见自动补全提示。

4)loc://x(4):本地PV。见自动补全提示。

5)pva://x:EPICS pvAccess。

部件调额板

1) 显示所有可用的部件

  • 为"Search"输入名称
  • 悬浮鼠标见详细信息。
  • 拖拽或者选项&拖动

 2) 类别

  • 图形显示静态标签,图片,...
  • monitors根据读取PV更新
  • 控制读取一个PV以及写入这个PV
  • 绘图趋于从一个或多个(waveform)PVs读取
  • 结构体组部分,嵌入的子显示窗口

通过从其它Apps拖动/放置创建部件

带有PVs列表的邮件:

  • 拖动那个文本到显示窗口编辑器
  • 选择部件类型

 可支持:

文本 --> Label

文本 --> PV部件

图像文件 --> 图像部件

*.bob --> 嵌入的窗口显示部件

操作多个部件

显示窗口属性

 在显示窗口背景上点击,不选取部件,用于编辑整个显示窗口属性

1) Name:在标签卡中显示。

2) Macos:被在这个显示窗口中所有部件使用。

3) Grid Size:可以辅助放置部件。

部件属性

选取一个(或多个)部件来编辑它们的(共同)属性。

1) Search:要查找所要的属性。

2)  PV Name:对于大多数部件的最重要属性。

详细情况取决于部件类型。

部件公共属性

默认值一般是合理的:

1) 用PV设置的精度格式化

2) 显示由PV提供的单位

3)警报-敏感边界

4) 从PV获取项目(Combo, ...)

预定义的"named"颜色和字体

在需要时使用。

配置指定名称的颜色和字体

在项目开始时设置较好

部件注意事项

1) Text Entry,Text Update:对于"long string" waveform,设置格式=String。默认将显示数组。

2)LED,Boolean Button, CheckBox:

  • Boolean PV
  • 数值PV 0或非0(当"Bit"设成默认-1时)。
  • 在一个数值PV中Bit(此时"Bit"设置成0,1,2,...)

3)Multi-State LED:

  • 枚举或者数值PVs
  • 默认为使用状态值0,1,2,3,...

4) Combo Box, Radio Button:

  • 最合适枚举PV:输入PV名,完成。
  • 另外,取消选取"Items from PV"并且输入项目。

Action Button

1) 添加ActionButton

2) 配置"Actions"属性,并且添加"Open Display"

3) 运行:点击按钮打开“其它”显示窗口。

在原则上,任何部件都由"Actions"。它们出现在这个部件的运行时环境菜单中。但对终端用户不明显,例如一个Label将有一个actions。

屏幕导航

1) Replace:

  • 推荐的默认
  • 如在web浏览器中允许前进/后退
  • 使得打开的窗口最少

2) New Tab

  • 用新的标签卡打开
  • 允许指定的面板名称

3) New Windows:在新窗口中打开

4) 使用"Replace",仍然可以使用:

  • 环境菜单
  • Control用于tab
  • shift-control用于window

屏幕导航:标签卡

标签卡:

每个标签卡是在内存中,相同的*.bob

  • 在选取时,立即出现
  • 隐藏时,使用CPU和内存

导航标签卡:

在选取时,标签卡是从单独的*.bob被装载。

  • 可能需要一点时间来装载
  • 隐藏时不使用CPU和内存

1)从以下传递宏给显示窗口

  • 封闭的组或者标签卡部件
  • 显示窗口
  • 嵌入的部件容器或者装载这个显示窗口的动作
  • Phoebus首选项

2) 要使用:$(NameOfMacro)或者${NameOfMacro}

3) 示例:

  • PV Name: $(PV)        其中PV=TheFullPVName
  • PV Name: Motor$(N) 其中N=1,2,3,...
  • Width::$(WID)        其中WID=200
  • Visble:$(SHOW)     其中SHOW=true

宏的示例

创建一个以下结构的显示窗口层级:

1) 创建显示窗口"sub.bob"

  • 添加一个Label部件,其Text属性设置为"Motor $(N)"
  • 添加一个TextUpdate部件,其PV Name属性设置为"loc://pos$(N)(10)"
  • 添加一个ActionButton部件,其PV Name属性设置为“loc://pos$(N)(10)”,并且Action属性设置为"Write PV",值为20,其Text属性设置为"Write 20"。
  • 复制上一步的按钮,更新设置其值为30,其Test属性设置为"Write 30"。

 2) 创建显示窗口"top.bob"

  • ActionButton的Actions的Display Path设置成sub.bob的完整路径,宏名和宏值为N=1。
  • 复制粘贴这个按钮,更新N=2.

 3)执行top.bob, 点击按钮。

 

1) 默认值:$(MACRO=default)

允许单独测试,而不需要给这个显示窗口传递值。

2) 为Boolean输入宏

按"$"宏按钮,从下拉菜单选择有效选项或者输入一个宏

宏的使用顺序

当宏没有被定义时,它将使用:

1)部件属性

  • 使用属性视图中工具提示中显示的内部属性名。
  • 注意:工具提示通常被预设成"$(pv_name)\n$(pv_value)"
  • Action Button有PV Name属性,不像在其它部件中直接使用PV name,而是在"Write PV"中时,PV名被预设成$(pv_name).
  • Action Button文本被预设成"$(actions)"。

2) Java属性

$(os.name)

3) 环境变量

$(HOME), $(USER)

预定义的宏

1) $(DID):唯一的显示窗口标识符,对每个显示窗口PVs有用,loc://x$(DID)(10)

2) $(DNAME):显示窗口名称

组部件

1) 包含其它部件。

2) 可见作用:边界,名称。

3) 实际作用:

  • 组可以为包含的组件定义宏。
  • 在编辑器中组可以作为一个单元被移动,复制/粘贴。

组属性:

1) Name:在边框中显示。

2) Style:"Group Box"用于指定边界。

3) Macros:被传递给被包含部件。

组编辑快捷方式

1) 选择部件

2) 环境菜单"Create Group"

3)  环境菜单"Remove Group"

嵌入的显示窗口

1) 在一个部件内托管一个完整的*.bob文件。

2) 允许从较小显示窗口组成更高级显示窗口。

  • 每个设备的*.bob
  • 在一个显示窗口中显示多个设备。

嵌入的显示窗口示例

创建如下的窗体结构:

1) 创建显示窗口“sub.bob”(或者使用之前创建的那个)

  • 放置Label部件,text属性为"Motor $(N)"
  • 放置TextUpdate部件,PV属性为"loc://pos$(N)(10)"

2)创建显示窗口"main.bob":

  • 嵌入的窗口文件,sub.bob, Macros N=1
  • 复制/粘贴嵌入的显示窗口,更新N=2

3) 执行main.bob

 

 嵌入的显示窗口尺寸:

a) 嵌入的显示窗口尺寸:

  • 将托管这个*.bob的部件的大小
  • 由部件宽度和高度属性定义

b) 内容尺寸

  • *.bob的尺寸
  • 由显示窗口宽度和高度属性定义。

如果那些尺寸不同?

嵌入显示窗口的Resize选项

1) No Resize

2) Size content to filt widget

3) Size widget to fit content

No Resize通常最好。滚动条根据需要显示。

Resizing倒置奇怪的字体大小或者部超出它们的初始尺寸。

嵌入的显示窗口编辑

顶层资源

1) 见帮助,首选项设置

2)用"-settings /path/to/my_settings.ini":

  • 文件系统:使用NFS或"git pull"来发布文件。
  • http: 所有用户总是看到相同文件的集合。

很多部件和属性

与更早的EPICS窗口显示工具比较:

1) 组部件替代了线条

2) LED替代了变化颜色的圆圈

3) Tab/Navigation Tabs替代了按钮,本地PVs,条件可见性

显示窗口描述含有:

1) 相关部件的组

2) LED用于二进制PV,不是颜色发生变化的圆圈

规则

1) 理想上,使用部件的内建功能

  • 在TestUpdate, LED, ...中显示的PV值
  • 通过边界指示的警报

2) 有时对例如隐藏一个部件有用,即是:根据PV改变可见性。

  • 规则可以完成这个目标
  • 但功能可能对需要维护一个显示窗口的下一个人不明显。

添加一条规则

1) 添加一个TextUpdate部件。

2) 设置PV为sim://ramp(0,10,1)

3) 打开部件的规则

4) 添加规则,命名它为"Hide"

5)  选择“Visible"属性

6) Add PV sim://ramp(0,10,1)

7) 添加布尔表达式"pv0>8"

8) 取消选择值

9) 运行

规则详解

1) 由至少一个PV触发:可以使用更多非触发PVs

2)表达式使用pv0, pv1, ..., pvStr0, pvStr1, ..来访问PVs的值。

3) 规则内部转成成Jython:使用预览来调试

4) ”else:..“设置属性为原来的值。

 脚本

1) 脚本被附加到了一个部件。

2) 由至少一个PV触发:可以使用多个非触发PVs

3) 用以下调用:

  • pvs[]:请求的PVs的数组
  • widget:部件

4) 脚本可以:

  • 读和写接收到的PVs
  • 设置部件属性
  • 在显示窗口中定位其它部件
  • 在产品中调用java代码
  • 非常强大
  • 导致一个不能维护糟糕情况

5) 每个*.bob文件一个脚本执行器,在后台线程中运行。

  • 慢速的脚本不阻塞UI
  • 一次每个显示窗口一个脚本:a)很多持续时间短的脚本;2)一个从不退出的脚本

规则 vs 脚本

1) 最终都在终端Jython代码中

2)    都应该是异常。普通显示窗口不需要它们。但是强大的,替代了单独的自定义Java/Python/C/C++程序。

3) 首选规则,因为它们描述含义,维护更容易。

何时使用脚本

1) 简单,容易记录,并且极大提高了UI。

2)会是其中之一,专用的,难以维护,单独的程序。用脚本,至少其集成进了操作UI。

示例:

1) 把标量PVs转成loc://waveform用于XYPlot中的参考

2)用基于config文件examples/template_and_script的50个部件填充显示窗口

3)添加来自web服务的信息到显示窗口

何时不使用脚本

1) 它增加了本应该位于IOC上的逻辑到了显示窗口

显示窗口应该只显示PVs并且允许用户写PVs

显示窗一定不做任何事情

2)你必须请求实现这个脚本的帮助:如果你不能实现它,你也不能维护它。

示例:

1) 当压力太高,打开解压阀。斜坡电源。如果某人关闭这个显示窗口?打开了两个显示窗口怎么办。

2)摆弄显示窗口中的某个东西:它不是视频游戏。

概要

Display Builder是强大的编辑器并且使用很多部件,宏等运行。

保持其简单:

1) 添加部件

2)输入Label的文本或者部件的PV名称。

3) 结束

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CS-Stdio Display Builder 的相关文章

  • 小程序swiper动态数据不显示

    情景一 swiper的current不在第一页了 导致第一页的数据看不到 处理方法 在请求数据的时候重置current为0 即
  • C语言printf和scanf函数

    最近在敲c语言例子的时候 对于很多小知识点不清楚 这里主要根据例子来总结一下 一 printf函数 1 printf是格式输出函数 它的作用是想终端输出若干个任意类型的数据 一般格式如下 printf 格式控制 输出表列 例如 printf
  • (Java 基础知识) Java线程池

    ExecutorService 建立多线程的步骤 1 定义线程类 class Handler implements Runnable 2 建立ExecutorService线程池 ExecutorService executorServic
  • 配置logback 不打印日志

    今天尝试下logback 做测试
  • 【C++】 Qt-事件(下)(事件过滤、自定义事件)

    文章目录 事件过滤 自定义事件 事件过滤 event 函数是一个protected的函数 这意味着我们要想重写event 必须继承一个已有的组件类 重写其event 函数 event 函数的确有一定的控制 不过有时候我的需求更严格一些 我希
  • DB2数据库跨实例恢复

    DB2数据库也可以和Oracle一样 进行异机或跨实例进行备份集的恢复 原理与Oracle有几分类似 但DB2对表空间的处理有点特殊 分自动管理的表空间和非自动管理的表空间 经过测试 大致恢复过程如下 首先在线备份原数据库 包含原数据库的日
  • Windows 10 安装python到U盘并设计自动添加环境变量脚本

    1 在python官网正常下载python安装包 2 U盘插到电脑上 安装到U盘的版本如果和电脑上的完全相同 则需要暂时屏蔽python环境变量 未实验 我选择的是在U盘中安装的32位的python3 7 9 笔记本电脑上安装的是64位的p
  • 在qt项目中使用外部第三方字体库字体

    文章目录 一 第三方字体库字体 二 使用方法 1 直接代码添加 2 使用QSS进行添加 一 第三方字体库字体 在项目开发中 有时候我们可能会由于某些原因会用到qt所提供的字体库之外的字体 这个时候就不可以直接设置字体了 需要做一些操作才行
  • 转:在线HTML编辑器 CKEditor4 下载及使用说明。

    转 在线HTML编辑器 CKEditor4 下载及使用说明 这里是CKEditor4最新版本 演示实例 其它实例请下载后可查看源码 CKEditor4是FCKeditor之后重新开发的版本 是一款专门使用在网页上属于开放源代码的所见即所得文
  • 3.6设计模式————迪米特法则——面向对象设计原则

    迪米特法则的定义 迪米特法则 Law of Demeter LoD 又叫作最少知识原则 Least Knowledge Principle LKP 产生于 1987 年美国东北大学 Northeastern University 的一个名为
  • Postgresql:删除及查询字段中包含单引号的数据

    Postgresql 删除及查询字段中包含单引号的数据 1 假设pg表t info的属性att 值为固定的 test 2 假设值为不固定的 abcde 参考 1 假设pg表t info的属性att 值为固定的 test 删除可以用 用 转义
  • Java常用类(二):StringUtils类

    目录 1 什么是StringUtils类 2 StringUtils类的常用方法 2 1 isEmpty String str 2 2 isNotEmpty String str 2 3 isBlank String str 2 4 isN
  • C/C++库函数(tolower/toupper)实现字母的大小写转换

    C C 库函数 tolower toupper 实现字母的大小写转换 本文将介绍库函数实现字母的大小写转换 常用到的是在ctype h C 中是cctype 库文件下定义的函数方法 首先来看一下C下tolower toupper函数实现原型
  • latex:圆周率如何表示

    2019独角兽企业重金招聘Python工程师标准 gt gt gt pi 转载于 https my oschina net letiantian blog 316387
  • Python常见排序之冒泡排序(详解)

    一 为啥叫冒泡排序呢 因为越小的元素会经由交换慢慢 浮 到数列的顶端 升序或降序排列 就如同碳酸饮料中co2的气泡最终会上浮到顶端一样 故名 冒泡排序 二 排序思路 1 相邻元素之间的比较 如果第一个元素比第二个元素大 则他们两个进行交换
  • java中实现es count distinct

    需求 说一下最近项目中碰到的一个es方面的需求 在一个字段columnB里面 获取特定值0的总数据量 然后在这些数据里面 再做另一个字段columnA的去重并得到该字段值的集合 方案 两种方案写成sql类似如下 两次es查询 SELECT
  • 【论文精度】Transformer--Attention Is All You Need

    沐神论文精度 https www bilibili com video BV1pu411o7BE spm id from pageDriver Paper https arxiv org pdf 1706 03762 pdf Transfo

随机推荐

  • 【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用

    说明 cocos2d x版本为 3 4 cocosStudio版本为2 1 5 cocosStudio 我个人目前的认识 以为就是一个界面编辑器 界面通过美工可以排布好 然后把发布的csb和png资源文件 提供给程序员使用 1 关于 coc
  • 大语言模型之八-提示工程(Prompt engineer)

    大语言模型的效果好 很大程度上归功于算力和数据集 算力使得模型可以足够大 大到模型的理解 记忆 推理和生成以及泛化能力可以同时兼备 而数据集则是模型学习的来源 LLM中的prompt方法主要用于fine tune阶段 即在预训练的基础上 针
  • Pyramid Scene Parsing Network

    Pyramid Scene Parsing Network Keras实现代码链接 https github com BBuf Keras Semantic Segmentation Contribution 提出了金字塔场景解析网络 以将
  • poj 2155 Matrix

    Problem poj org problem id 2155 vjudge net contest 146952 problem A Referencd www cnblogs com gj Acit p 3258880 html Mea
  • mysql Heartbeat主主同步方案

    Heartbeat高可用Mysql主主同步方案 1 1 方案简介 本方案使用heartbeat mysql主主同步来实现mysql数据库的高可用 当服务器或者master的heartbeat宕掉以后会自动切换到backup上 服务器或者ma
  • 使用MATLAB进行多元线性回归预测

    在回归分析中 如果有两个或两个以上的自变量 就称为多元回归 事实上 一种现象常常是与多个因素相联系的 由多个自变量的最优组合共同来预测或估计因变量 比只用一个自变量进行预测或估计更有效 更符合实际 因此多元线性回归比一元线性回归的实用意义更
  • B站马士兵python入门基础版详细笔记(7)

    B站马士兵python入门基础版详细笔记 7 接着这个博客写的笔记 他写的还是很详细的 但是只写到了第六章 python基础知识 记录在B站视频看到的python的基础知识 我的笔记就有点偷懒了 很多没有敲代码 直接截的图 一 字典 列表
  • 【半监督学习】2、Soft Teacher

    文章目录 一 背景 二 方法 2 1 End to End Pseudo Labeling Framework 2 2 Soft teacher 2 3 Box Jittering 三 实验 论文 End to End Semi Super
  • C++ void** 类型

    在C 中 0 或者字面值 nullptr 能转换成任意指针类型 指向任意非常量的指针能转换成 void 指向任意常量对象的指针能转换成 const void 参考 C 类型转换 所以 void 类型可以用以下方式理解 void ppDefi
  • 在docusaurus中使用Vue组件⚡

    docusaurus 类似于Vuepress 是一个静态站点生成工具 但不同的是 使用docusaurus可以在文档中轻易混入React组件 很适合写React相关组件的文档 而Vuepress则是适合混入Vue组件 这就让我比较困惑 如果
  • error: #35: #error directive: "... 解决方法

    出现 USER stm32f10x h 96 error 35 error directive Please select first the target STM32F10x device used in your application
  • shell大小中括号作用

    http taotaocoder blog 163 com blog static 200228274201110306203483 Shell的强大是毋庸置疑的 方便了我们也迷惑了我们 比如这些杂七杂八的括号 一向自认聪明的我也傻傻分不清
  • 动态鼠标指针_推荐8款电脑鼠标指针,让你电脑不再千篇一律

    今天应该朋友给我留言说想要一款电脑指针 我就去搜罗了八款电脑指针 这些电脑指针有优美的 有酷炫的 有简洁的 可盐可甜 01 Breeze Cursors样式 002 a element 样式3D动态旋转鼠标指针 003 bibata cur
  • Self-study Python Fish-C Note-2 P9-P14

    先存一个网址非常详细的介绍python的数据类型 https www runoob com python3 python3 data type html A 数字 Numbers 1 整数 integers python 的整数长度是不受限
  • 类中的成员

    类中的成员 字段 方法 属性 1 字段 字段 普通字段 静态字段 1 class Mycalss 2 str 这是静态字段 3 def init self str1 4 self str1 str1 普通字段 5 实例化对象 6 a Myc
  • php提交表单显示错误,php – 在提交注册表单时使用jQuery显示错误

    你需要修好几件事情 gt 首先 处理注册过程的文件不应该是与表单相同的文件 gt 它纯粹用于处理数据 因此不能使用头 Location login php 直接重定向浏览器 这部分应该由你的JavaScript代码来处理 gt 您还需要告诉
  • 笔记--java sort() 方法排序

    背景 最近在刷一道算法题 字符串重新排序 时 发现自己有思路但是写代码的时候就无从下手了 而且看了答案之后还没看懂 关键就是基础不好 对于排序没有理解 虽然我学过常用的排序算法 但是都是理念 实践少 目的 从实践和原理出发 重点是从实践出发
  • 基于博弈搜索算法的智能五子棋设计

    基于博弈搜索算法的智能五子棋设计 0 引言 在智能过程中 搜索是必不可少的 是人工智能中的一个基本问题 这是因为人工智能研究的主要是那些没有成熟方法可依的问题领域 需要一步一步搜索求解 游戏中如何找到对自己有利的局面就属于这类问题 在游戏
  • SQL注入式攻击

    一 SQL注入式攻击 1 所谓SQL注入式攻击 就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串 欺骗服务器执行恶意的SQL命令 2 在某些表单中 用户输入的内容直接用来构造 或者影响 动态SQL命令 或作为存储过程的输
  • CS-Stdio Display Builder

    Display Builder 1 操作界面编辑器和Runtime 2 在EPICS edd dm medm edm 想法上构建 3 与CS Studio BOY 兼容性非常好 4 大约2015年在CS Stdio Eclipse中开始 现