仪表画面组件
什么是仪表画面组件:类型目录、它们绑定的地址、读数如何绘制,以及每一种类型共有的属性分区。
组件是仪表画面上的一个条目:一块由网格单元格围成的矩形,在里面画出点什么。多数组件读取实时地址空间并把它呈现出来,少数向它写入,还有少数只负责绘制。你从仪表画面编辑器工具栏的添加区放置一个组件,把它拖到某个确定的单元格上,或者点一下让它占用第一个空位,放好之后它会在属性里打开,等你配置。
每一种类型都有自己的参考页,列在类型目录里,也列在本分组自己的目录里。本页写的是它们共有的东西:绑定的地址、读数如何绘制,以及每一种类型上都会重复出现的属性分区。哪个角色可以按下某个控件,以及登录角色无权时组件所戴的那把锁的标记,写在View 与仪表画面。
类型目录
添加面板按类别把目录分组,类别说明的是一个家族做什么。显示是所有负责报告的组件:朴素的数值显示与表格、指示灯,以及那些按时间跟踪点位或者把点位并排比较的图表。控制是专门用来写入的家族:它的每一个组件都是为了把一个值放到某个点位上而存在的。不过它并不是操作员唯一会按的界面。报警把待处理的报警清单搬到画面上,报警提示条就在那里确认,可以逐行确认,也可以整批确认;下面列出的流程类卡片同样是按下去用的。媒体放置图片、图元库里的标记和工业图形。布局在整幅画面的后面把一个区域框起来。
| 类别 | 组件 |
|---|---|
| 显示 | 文本 · 数值 · 点位表 · 状态指示灯 · 折线图 · 柱状图 · 饼图 · 仪表盘 · 指标卡 · 进度 |
| 控制 | 开关 · 输入框 · 按钮 · 选择器 · 设定值滑块 · 步进按键 |
| 报警 | 报警提示条 |
| 媒体 | 图片 · 图标 · 图元 |
| 布局 | 边框 |
在这个面板之外,自动生成的单元操作面板还带着流程类卡片,它们由 Process 工作区摆放,添加面板里并不提供:联锁、流程选择器、事件条目列表和备注时间线。
媒体类组件所画的图片、标记和图形,来自 Logic 页面上工作站自己的资源库:资源库存放图片、图标和颜色,图元则是挑选一个图元的那份目录,其中还带着连线所连接的连接点。
地址与实时读数
实时组件绑定的是地址:指向工作站实时地址空间的带根名称,和 Logic 所读的是同一个空间(见 Logic 页面)。一个地址指名一个点位,不管它在哪里:
| 地址写法 | 指的是什么 |
|---|---|
Connector.<Driver>.<Device>.<Tag> |
一个 Connector 点位的工程值;设备如果归在文件夹里,驱动和设备之间还要写上这些文件夹(见 Connector 页面) |
Variables.<name> |
一个 Logic 变量(内部存储值或计算值) |
Alarms.<name> |
一条报警的活动状态 |
Assets.Icons.<name> |
图标库里的一个标记 |
Process.<Model>.<Unit>.… |
一个单元的运行点位:各项读数、Commands.*、Next.<field>、Commands.Comment |
地址字段是带建议的自由文本:建议列表取自实时点位清单,最多 50 行,按该字段所消费的值类别收窄(仪表盘建议数值,开关把 Bool 点位排在前面,写入类控件只列出可写的东西),每一行都标出自己的类型。你随时可以手写一个列表里没有的地址,包括一个还不存在的地址。字段一旦指名了某个点位,编辑器就在字段下面显示这个点位此刻读到什么:一个自己不画数字的组件,靠它才能给出这份确认。在基于 Process 模型定义的画面上,模型的抽象通道排在每一份列表的最前面;选中一条,绑定的就是这条通道,至于是哪个单元,留到某个单元打开这幅画面时再回答。
画布按实时地址空间刷新自己的组件:在工作站自己的窗口上每 150 ms 一次,在远程浏览器上每 400 ms 一次,读的是逻辑扫描周期发布出来的那些值。对每一个实时组件,有两条规矩始终成立:
- 绝不显示陈旧的值。 一个点位不再读到数据时,组件落到它自己的占位表示上(缺口短横、空心的灯、图表上的断口),绝不是最后那个数字。
- 只有一种读数异常标记。 一个组件所绑定的点位读不到(地址解析不到任何东西,或者点位答复的质量不可用)时,它戴上同一个标记:单元格四周一圈虚线的警示轮廓,右上角一个带圈的
!小徽标。每一种类型戴的标记都一样,所以只需要学一次。一个解析得到、质量良好、但没有值的点位不算故障(两次运行之间空着的试验台、循环之外的计数器),因此组件保持它那安静的占位表示,标记不会亮起。而没有绑定的地址不是谁的过错:一幅还在拼装当中的画面,不该读起来像一幅满是警告的画面。
数值的显示
一个读数画多大,由同一份约定管着,画布上每一处文字表面都遵守它(数值显示、说明文字、按键面、状态词):
- 每一处表面要么是自动的(由单元格决定大小,上限是这处表面自己所声明的内容需要预留的宽度:位数、小数位、单位,或者写好的那些字),要么是指定的,也就是你给出一个磅值(9 到 144)。指定的字号是照字面来的:不管在哪个单元格里都按那个字号绘制,绝不会为了塞下内容而缩小。字号从来不跟着恰好到来的那个值走,所以一个在四到六个字符之间跳动的数字,绝不会把字体大小推来推去。
- 数字绝不画成截断的样子。 凡是显示不全的地方(位数多于字段所声明的,或者指定的字号宽过单元格),表面就画出
####,也就是电子表格和 DCS 用来表示字段窄于其值的那个记号,完整读数放在提示里。 - 自由文本用省略号截断,完整文字放在提示里。文字绝不戴数字的那个记号。
- 一个读不到数据的点位,又是另一回事:缺口短横,并且在这份沉默确实是故障时再加上那个共用的读数异常标记。没有读数和没有地方,从不互相借用对方的记号。
- 数字靠在自己字段的右边,用等宽数字,这样一列读数才能自己对齐。
11 px 的可读性下限处处成立,共用的内容缩放旋钮在解析出来的字号上再乘一个系数:往小调总是看得见(仍受下限约束),往大调只能长到这一行仍然不被截断为止。
共有的属性分区
选中一个组件就打开它的属性。以组件自身类型命名的那些分区排在最前面(它的内容、它的数据、它的格式),写在那一种组件自己的页面上。围绕着它们的,是每一个组件都共有的那些分区。绘制这些分区的面板、每个地址字段下面的实时读数,以及在各种类型之间重复出现的那些控件(显示字号、读数形式、刻度区段、图表工具箱),写在仪表画面编辑器。
标识是为编辑这幅画面的人给组件起的名字:名称写在属性面板的最上方,在组件列表里作为这一行的标签,也由它回答搜索。它不会在操作员的画面上画出任何东西,那是外观里的标题。
外观是组件的那个方框:
| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 显示边框 | 画出组件自己的轮廓。 | 开 / 关 | 关 |
| 边框粗细(px) | 这道轮廓有多重。1 px 是一张卡片的边;更重的一笔不必再动第二种颜色,就能把一组东西和周围分开。 | 1 到 4 | 1 |
| 显示背景 | 用那对颜色填满组件的矩形,把它变成一张卡片。关掉时,网格从后面透出来。 | 开 / 关 | 关 |
| 背景色 | 填充色是一对,每个主题各占一半,两半一起编辑,因为屏幕上出现哪一半由当前运行的主题决定。 | 各写 #RRGGBB |
浅色 #FFFFFF · 深色 #2B2B2B |
| 标题(角上) | 组件自己的角上标签,说明这张卡片是什么,位于这一类型所绘制的内容之上。留空就没有这一行说明。 | 自由文本 | 空 |
| 标题字号(px) | 留空时每张卡片按自己的单元格决定标题大小;指定的字号照字面来,正是它让整幅画面的标题保持一致。放不下的部分用省略号截断,完整标题在提示里。 | 11 到 96,或留空 | 空(自动) |
| 标题颜色 | 标题的一对墨色。不去动它,标题就跟着主题自己那种安静的色调。 | 各写 #RRGGBB |
浅色 #6B6B6B · 深色 #A0A0A0 |
| 内容缩放 | 内容占它这个方框的多少:你画出的单元格已经决定了内容的大小,这个旋钮在单元格内部再调一次,不必重画网格。图形按几何方式响应它,数值显示按排版方式响应它。 | 0.25 到 3 | 1 |
位置与图层放着数值形式的 X / Y / W / H、图层(Z),以及移到最前 / 移到最后这一对。高级只在带有不常用附加项的类型上出现。操作用来复制或删除组件。
按住 Ctrl 可以选中多个组件,一起编辑它们共有的东西:外观里的字段会铺到整份选择上(成员之间取值不一致的字段写“不一致”),图层命令保持这一批之间的相对次序,复制和删除对它们全体生效。按类型独有的字段则需要单独选中一个组件。