验证
配置健康页面:工作站在流程、逻辑和仪表画面里扫描什么、它能报出的每一条发现以及它们的措辞、点一行会打开什么、导航栏上的角标,以及为什么这里不修任何东西。
验证页面列出工作站站不住脚的地方:某个通道绑定、某个联锁、某个自动化字段、某个 Logic 表达式、脚本或条件,或者某个仪表画面组件,指向了工作站已经没有的点位、变量、流程或地址;还有某个 Process 动作,它的文书按现在的配置一次运行发不出来;还有一次运行的启动会拒绝的流程。它是导航栏底部的验证入口,对持有查看验证权限的身份打开,地址是 /validation。它是一个滚动页面,按整幅宽度绘制,因为每一条发现都是一句话。它是状态栏里运行时健康状态的兄弟:那一个说工作站是否在读,这一个说配置是否仍然解析得开。
这一页只报告;它从不修理。点一行会打开拥有这处故障的那个编辑器,并停在持有它的那个实体上,修理就是你在那里做的编辑。
状态卡片
顶部那张卡片就是这一页对配置的全部答复,也是唯一会宣布工作站干净的地方:
| 状态 | 圆点 | 标题 | 细节 |
|---|---|---|---|
| 干净 | 绿色 | 没有需要修复的 | 流程、逻辑和仪表画面里的每一个引用都解析得开,每一个流程都能启动,每一个动作也都具备发出所需的东西。 |
| 有发现 | 琥珀色 | N 项待修复(只有一项时写“1 项”) | 这里不修任何东西。点一行会打开拥有这处故障的那个编辑器,并停在持有它的那个实体上。 |
卡片上带着这一页唯一的命令,重新扫描(悬停提示:“现在把整份配置再检查一遍。有东西改动时,列表也会自己刷新。”)。有扫描在进行时它是灰的。因为一次找到同样结果的扫描会让列表原封不动,所以结果报在状态栏的操作记录条上:“重新扫描完成:没有需要修复的。”“重新扫描完成:N 项待修复。”,或者“重新扫描失败:原因”。
你很少需要重新扫描。校验器一直开着,跑在工作站上,并在它所读取的任何一个界面上出现一阵改动之后 750 毫秒自己重扫一遍:Connector 的设备、线路和点位;Process 模型;素材;Logic 的变量、动作和报警;仪表画面;标签模板;报告版式。这一页和导航栏上的角标跟着结果走。一次正好赶上 Connector 在挪进挪出设备(一次驱动刷新、一台设备正在添加)的扫描,会等 Connector 安定下来之后重做,因此一个引用绝不会仅仅因为它的设备正在途中就被判为损坏。
那些分组
发现按拥有它们的界面分组,顺序是固定的。里面什么都没有的分组不画出来,因此一台只有一处仪表画面故障的工作站只显示一个分组。
| 分组 | 发现的种类 | 标题下面那一行 |
|---|---|---|
| Process | 绑定(通道绑定、联锁、自动化)、流程和它们布防的事件条目,以及动作文书 | N 项。通道绑定、联锁和单元自动化指名了工作站已经没有的点位、变量或流程,启动会拒绝的流程,以及那些文书按现在的配置一次运行发不出来的动作。 |
| Logic | 表达式变量、动作、报警 | N 项。表达式、动作脚本和报警条件读取了已经解析不开的地址。 |
| 仪表画面 | 组件 | N 项。属性指向已经解析不开地址的组件。它们照样绘制,但什么也读不到。 |
一行
每一行就是一条发现,而且不用打开任何东西就说清了它讲的是什么:
- 一个表示种类的图标:Process 绑定用单元图标,动作文书用打印标志,流程用书面组成标志,事件条目用旗帜标志,Logic 树里的变量、动作和报警各用自己的标志,组件用仪表画面标志。
- 实体的名称,随后在类型能说出名称说不出的东西时写上它的类型(集成商从未命名过的组件退回到它的种类,这样一行就不会读成“仪表盘 仪表盘”),再随后在有位置时写“位于位置”。
- 那条发现:对于指名了目标的字段,写“字段指向
引用,而它已经不存在。”,其中的引用用等宽字体排;对于运行时用不了的字段,写“字段:哪里不对。” - 右边一个箭头:这一行会打开点什么。这一行的悬停提示和它的无障碍名称是整句话再加上点击落到哪里(“在 Process 里打开这个单元。”“在 Process 里打开这个动作。”“在 Process 里打开这个流程。”“在 Process 里打开这个事件条目。”“在编辑器里打开这个组件。”“在 Logic 里打开这个变量。”“在 Logic 里打开这个动作。”“在 Logic 里打开这条报警。”)。
这次扫描能产出的每一条发现
下面的措辞就是这一页自己的措辞。写成 tag:… 或 var:… 的引用,是某个已经不存在的点位或变量存下来的标识;写成文字的键,是某个绑定存下来的键。
Process:通道绑定
类型“通道绑定”;名称:通道的名称(或者“(已移除的通道)”);位置:“模型 · 单元”。打开这个模型的通道屏幕并停在该单元上。
| 字段 | 措辞 |
|---|---|
| 点位 | 指向存下来的点位键,而它已经不存在 |
| 变量 | 指向存下来的变量键,而它已经不存在 |
Process:联锁
类型“联锁”;名称:单元的名称;位置:“模型 · 单元”。一个单元按它实际观测的东西来判:它自己的信号源,或者在它跟随模型时用模型的默认设置。打开这个模型的自动化屏幕并停在该单元上。
| 字段 | 措辞 |
|---|---|
| 信号源 | 它跟随模型,而模型的默认设置没有指定布尔信号源。 |
| 信号源 | 未配置布尔信号源。 |
| 信号源 | 同时选中了一个点位和一个变量。 |
| 点位 | 指向 tag:…,而它已经不存在 |
| 点位 | DateTime 类型的点位转换不成布尔量。(Guid 和 ByteString 类型的点位同理) |
| 变量 | 指向 var:…,而它已经不存在 |
| 变量 | DateTime 类型的变量转换不成布尔量。(Image、Icon 和 Color 类型的变量同理) |
前三条只有在这个模型的停止联锁处于启用时才报出来。
Process:自动化
类型“自动化”;名称:单元的名称;位置:“模型 · 单元”。只有已启用的自动化才被判:关掉的那种什么也不驱动,也就从列表里退场。打开这个模型的自动化屏幕并停在该单元上。
| 字段 | 措辞 |
|---|---|
| 命令 | 未配置启动信号源。 |
| 流程 | 固定流程不可用。(固定选择方式) |
| 选择器 | 一条信号源发现(见下),针对整数信号源 |
| 选择器代码 n | 它选中的流程已被移除。 |
| 启动信号源、停止信号源等等,每个命令信号源一条 | 一条信号源发现,针对布尔信号源 |
| 元数据 | 某个映射填的是已被移除的流程或字段。 |
| 元数据“字段” | 一条信号源发现(数值字段用数值,其余用布尔、整数、实数、文本或日期),或者:这个字段不支持自动生成。 |
| 回写就绪、回写活动、回写所选代码、回写命令结果 | 指向 tag:…,而它已经不存在;或者:它写入的点位不可写入。/ 它需要一个布尔类型的点位。(就绪、活动)/ 它需要一个整数类型的点位。(所选代码、命令结果) |
一条信号源发现是下列之一:“未配置信号源。”“同时选中了一个点位和一个变量。”“它读取的点位已被移除(tag:…)。”“它读取的点位不可读取。”(该点位被禁用或者只写)“类型类型的点位在这里不兼容。”“它读取的变量已被移除(var:…)。”“类型类型的变量在这里不兼容。”兼容性跟着字段的角色走:布尔信号源需要布尔类型的点位或变量;整数信号源需要整数类型;数值信号源需要整数或实数类型;元数据信号源接受布尔、整数、实数、文本或日期中的任何一种类型。
Process:流程
类型“流程”;名称:流程的名称;位置:模型的名称。这里的判断走的是一次运行启动时走的同一道关口,因此这份列表说跑得起来的流程,就是台架会接受的流程。打开这个流程自己那一页。
这些拒绝是关口写的,它一律用英文措辞,无论工作站设成哪种语言,这一行都照原样引用。
| 字段 | 措辞 |
|---|---|
| 组成 | An evaluation judges over recorded rows. This procedure carries one but no datalog. |
| 组成 | Occurrence 'name' watches recorded samples. This procedure arms it but has no datalog. |
| 组成 | Nothing to run: this procedure references neither a datalog nor a recipe. |
| 组成 | Instant mode needs an instant recipe (or none). A temporal profile has no single tick. |
| 组成 | Controlled mode needs an instant recipe (or none). Setpoints apply at Start, safe-state at Stop. |
| 组成 | Temporal mode needs a duration. Set one. |
| 组成 | Temporal mode needs a temporal recipe (or none). An instant set has no timeline. |
| 组成 | The recipe profile (N ms) is longer than the temporal window (M ms). |
| 组成 | Occurrence 'name' watches 'Channels.channel', which this procedure's datalog does not record. |
| 组成 | 关于一次完成的运行对产量贡献了什么的拒绝,或者关于某个配方值到不了它瞄准的那个通道的拒绝,用的是拥有它的那个编辑器的措辞。 |
Process:事件条目
类型“事件条目”;名称:事件条目的名称;位置:模型的名称。只读取被某个流程布防的事件条目,而且不论多少个流程布防它,都只读一次,因为条件只有一个,修复也只有一处。打开这个事件条目自己那一页。
| 字段 | 措辞 |
|---|---|
| 条件 | 条件自己的拒绝,用的是事件条目编辑器的措辞:本模型没有的通道引用、读不通的条件、返回的不是 Bool 的条件,或者两个通道落到同一个名字上。它同样是用英文写的。 |
一个自身站得住、却依然判不了的条件,因为这个流程的数据记录把它盯着的那个通道漏掉了,那就算在那个流程头上:数据记录是流程自己的选择。
Process:动作文书
类型“动作”;名称:动作的名称;位置:模型的名称。这里的判断和动作自己那一页画出“需要复核”提示时用的是同一个,因此在那里被认为就绪的动作,在这里也是就绪的。打开这个动作自己那一页。
| 字段 | 措辞 |
|---|---|
| 命令 | 请添加一条命令:这个动作目前不产生任何输出。 |
| 命令 n · 开始时的标签、命令 n · 完成时的报告等等 | 关于那条命令的第一条说明,后面还有更多时再加上“(这条命令上还有 k 条)”。带好几条说明的一条命令仍然是一次修理,在同一页上完成,因此它只占一行。 |
一条命令可能带的说明,按修理它们的顺序排列:
- 请至少选择一个完成结论。(完成时的命令一个结论都没有勾选)
- 请选择一份报告。/ 选中的报告已不存在。
- 请选择一个标签模板。/ 模板被清除或删除了;存下来的映射仍然保留。/ 选中的全局模板已不存在。
- 选中的模板还没有任何打印命令;请在一次运行走到这条命令之前写好或导入它们。
- 无法读取模板标记:错误
{{marker}}需要一个信号源。/{{marker}}被映射了不止一次。{{marker}}:请选择一个信号源 / 这个信号源在开始时还取不到 / 请从这个模型的元数据目录里选一个字段 / 请从这个模型的某个判定里选一条判据 / 请明确指定一个从 0 到 n 的循环序号 / 请去掉这个日期时间信号源上的小数位 / 请对这个数值信号源使用默认格式 / 小数位必须在 0 到 9 之间 / 请去掉这个文本信号源上的数值或日期格式{{marker}}已经从当前模板里移除;请把它存下来的映射删掉。
Logic
没有位置:Logic 的那几种都在顶层。每一个解析不开的地址一行,地址按表达式书写它的样子写出。只扫描表达式变量;内部存储值变量没有表达式可读。
| 类型 | 字段 | 措辞 |
|---|---|---|
| 表达式变量 | 表达式 | 指向 address,而它已经不存在 |
| 动作 | 脚本 | 指向 address,而它已经不存在 |
| 报警 | 条件 | 指向 address,而它已经不存在 |
仪表画面
类型:编辑器给这个组件的种类起的名字(仪表盘、折线图、数值…);名称:为这个组件输入的名称,没有就用它的标题,再没有就用编辑器推导出来的;位置:仪表画面的名称。每一个地址字段一行,因此一个组件的数值和颜色读了两个已移除的点位,就是两次修理。
| 字段 | 措辞 |
|---|---|
| 地址、强调色地址、系列 2 › 地址,以及该种类的每一个其他地址字段(嵌套的列表按它的路径书写) | 指向 address,而它已经不存在 |
只读取地址字段,而且只读能解析成带根、至少有一段的地址的那种值:一个写着“Process.Press 1.Temperature”的文本组件是文字,不是引用,永远不会被报出来。同一个字段里的同一个地址算一条发现。定义在 Process 模型上的画面会跳过:它们通过一个单元占位符来绑定通道,在某个单元打开那张画面之前,没有任何点位答得上那些地址。
点一行会打开什么
| 种类 | 打开什么 | 落在哪里 |
|---|---|---|
| 组件 | 处于编辑模式的仪表画面(/d/{dashboard}?edit=true&focus={component}) |
该组件被选中、它的属性也显示出来,地址就在那里重新输入。编辑需要编辑仪表画面权限;没有它,仪表画面以查看方式打开。 |
| 通道绑定 | Process 工作区(/process?focus={unit}&screen=channels) |
这个模型的通道屏幕,该单元那一行被选中,它上面的每一层文件夹都展开。 |
| 联锁、自动化 | Process 工作区(/process?focus={unit}&screen=automation) |
这个模型的自动化屏幕,该单元那一行被选中。 |
| 动作文书 | Process 工作区(/process?focus={action}&screen=action) |
那一栏里这个动作自己的页面。 |
| 流程 | Process 工作区(/process?focus={procedure}&screen=procedure) |
那一栏里这个流程自己的页面。 |
| 事件条目 | Process 工作区(/process?focus={occurrence}&screen=occurrence) |
那一栏里这个事件条目自己的页面。 |
| 表达式变量、动作、报警 | Logic 页面(/logic?focus={id}) |
那个实体在它的编辑器里被选中,它在地址空间里所属的那一节展开。 |
打开只是把你送到故障上;目标页面随后对这次编辑施加它自己的权限(Process 屏幕上是管理 Process,Logic 里是配置 Logic)。页面到达时已经解析不开的实体(这期间被删掉了)会被忽略,页面就按它平常的样子打开。
导航栏上的角标
导航栏上的验证入口戴着一枚警示色的小药丸,写着待修复的项数,超过九十九写“99+”,配置干净时则不戴。这个数字是校验器自己的,由这一页所跟随的那同一次重扫在后台保持最新,因此你在任何页面上编辑时它都会跟着动,不需要打开这一页。
这一页永远不做的事
- 它什么也不修:不重新绑定,不删除,不重命名。每一行都是一次“打开”;行上没有别的动作,也没有批量动作。
- 它从不评判运行时:一台不通信的设备是状态栏里的健康状态,不是这里的一条发现。指向一个存在但读数质量不良的点位的引用,是解析得开的。
- 它从不报出被禁用的自动化、定义在模型上的画面、看起来像地址的自由文字、内部存储值变量,或者同一条动作命令的第二条及以后的说明(数字会说还有多少条在那一页上等着)。
- 它从不读取没有任何流程布防的事件条目,也从不把同一个已布防的事件条目列两次,不论有多少个流程布防它:一个条件就是一处修复。
- 它从不在 Connector 处于半途状态时扫描;它会等,然后只量一次。
- 在每一块屏幕上它都是同一份列表,工作站的窗口和浏览器一样,对每一个可以打开它的身份也一样:权限把的是这一页的关,不是每一行的关。
- 运行时停止期间,这一页和每一页一样让位给暂停提示;角标保留它最后的数字。