验证

配置健康页面:工作站在流程、逻辑、仪表画面以及服务器和 Broker 的列表里扫描什么、它能报出的每一条发现以及它们的措辞、点一行会打开什么、导航栏上的角标,以及为什么这里不修任何东西。

以 Markdown 查看

验证页面列出工作站站不住脚的地方:某个通道绑定、某个联锁、某个自动化字段、某个 Logic 表达式、脚本或条件,或者某个仪表画面组件,指向了工作站已经没有的点位、变量、流程或地址;还有写法被它的编辑器拒绝的 Logic 表达式、脚本或条件;还有某个 Process 动作,它的文书按现在的配置一次运行发不出来;还有一次运行的启动会拒绝的流程。它是导航栏底部的验证入口,对持有查看验证权限的身份打开,地址是 /validation。它是一个滚动页面,按整幅宽度绘制,因为每一条发现都是一句话。它是状态栏里运行时健康状态的兄弟:那一个说工作站是否在读,这一个说配置是否仍然解析得开。

它也列出工作站用来交出数据的那些列表(OPC UA 服务器的列表、Modbus 服务器的寄存器映射、MQTT Broker 的发布列表)中信号源已被删除的行:这样的行仍留在列表里,但不再提供或发布任何内容。

这一页只报告;它从不修理。点一行会打开拥有这处故障的那个编辑器,并停在持有它的那个实体上,修理就是你在那里做的编辑。

状态卡片

顶部那张卡片就是这一页对配置的全部答复,也是唯一会宣布工作站干净的地方:

状态 圆点 标题 细节
干净 绿色 没有需要修复的地方 流程、逻辑、仪表画面以及工作站提供和发布的内容里的每一处引用都能解析,每个流程都能启动,每个动作都具备产出所需的东西。
有发现 琥珀色 N 项需要修复(只有一项时写“1 项”) 这里不做修复。点开一行会打开拥有该缺陷的编辑器,并定位到承载它的那个对象。

卡片上带着这一页唯一的命令,重新扫描(悬停提示:“立刻再检查一遍整份配置。只要有东西发生变化,这份列表也会自行刷新。”)。有扫描在进行时它是灰的。因为一次找到同样结果的扫描会让列表原封不动,所以结果报在状态栏的操作记录条上:“重新扫描完成:没有需要修复的地方。”“重新扫描完成:N 项需要修复。”,或者“重新扫描失败:原因”。

你很少需要重新扫描。校验器一直开着,跑在工作站上,并在它所读取的任何一个界面上出现一阵改动之后 750 毫秒自己重扫一遍:Connector 的设备、线路和点位;Process 模型;素材;Logic 的变量、动作和报警;仪表画面;标签模板;报告版式。这一页和导航栏上的角标跟着结果走。一次正好赶上 Connector 在挪进挪出设备(一次驱动刷新、一台设备正在添加)的扫描,会等 Connector 安定下来之后重做,因此一个引用绝不会仅仅因为它的设备正在途中就被判为损坏。

工作站用来交出数据的三个列表它也读:在 OPC UA 服务器、Modbus 服务器或某个 Broker 的发布卡片上添加、编辑或删除一行,或者删除某一行指向的点位、变量、报警或命令,都会同样触发重扫。

那些分组

发现按拥有它们的界面分组,顺序是固定的。里面什么都没有的分组不画出来,因此一台只有一处仪表画面故障的工作站只显示一个分组。

分组 发现的种类 标题下面那一行
Process 绑定(通道绑定、联锁、自动化)、流程和它们布防的事件条目,以及动作文书 N 项。通道绑定、联锁和单元自动化指向了本工作站已经没有的点位、变量或流程,启动会拒绝的流程,以及那些按当前配置无法让一次运行产出文件的动作。
Logic 表达式变量、动作、报警 N 项。表达式、动作脚本和报警条件读取了一个已经无法解析的地址,或者写法被它们的编辑器拒绝。
仪表画面 组件 N 项。组件的属性指向了一个已经无法解析的地址。它们照常绘制,但什么都读不到。
Connector OPC UA 服务器列表、Modbus 服务器寄存器映射和 MQTT Broker 发布列表中的行 N 项。信号源已被删除的 OPC UA 服务器列表、Modbus 服务器寄存器映射和 MQTT Broker 发布列表中的行。它们仍留在列表中,但不再提供或发布任何内容。

一行

每一行就是一条发现,而且不用打开任何东西就说清了它讲的是什么:

  • 一个表示种类的图标:Process 绑定用单元图标,动作文书用打印标志,流程用书面组成标志,事件条目用旗帜标志,Logic 树里的变量、动作和报警各用自己的标志,组件用仪表画面标志。
  • 实体的名称,随后在类型能说出名称说不出的东西时写上它的类型(集成商从未命名过的组件退回到它的种类,这样一行就不会读成“仪表盘 仪表盘”),再随后在有位置时写“位于位置”。
  • 那条发现:对于指名了目标的字段,写“字段指向 引用,而它已经不存在。”,其中的引用用等宽字体排;对于运行时用不了的字段,写“字段:哪里不对。”
  • 右边一个箭头:这一行会打开点什么。这一行的悬停提示和它的无障碍名称是整句话再加上点击落到哪里(“在 Process 中打开该单元”“在 Process 中打开该动作”“在 Process 中打开该流程”“在 Process 中打开该事件条目”“在编辑器中打开该组件”“在 Logic 中打开该变量”“在 Logic 中打开该动作”“在 Logic 中打开该报警”)。
  • 对服务器列表中的一行,图标是 Connector 树为持有该列表的对象(OPC UA 服务器、Modbus 服务器、MQTT Broker)画的标记,点击落到哪里由悬停提示的末尾说出(“在 OPC UA 服务器中打开该行”“在 Modbus 服务器中打开该行”“在 MQTT Broker 的页面中打开该行”)。

这次扫描能产出的每一条发现

下面的措辞就是这一页自己的措辞。通道绑定存的是它信号源的键,所以它那一行写出的是那个再也解析不了的键;联锁、自动化信号源和回写量存的是操作员从来不读的标识,所以它们那一行不把标识打出来,而是说那个点位或变量已被移除。

Process:通道绑定

类型“通道绑定”;名称:通道的名称(或者“(已移除的通道)”);位置:“模型 · 单元”。打开这个模型的通道屏幕并停在该单元上。

字段 措辞
点位 指向存下来的点位键,而它已经不存在
变量 指向存下来的变量键,而它已经不存在

Process:联锁

类型“联锁”;名称:单元的名称;位置:“模型 · 单元”。一个单元按它实际观测的东西来判:它自己的信号源,或者在它跟随模型时用模型的默认设置。打开这个模型的自动化屏幕并停在该单元上。

字段 措辞
信号源 它跟随模型,而模型的默认设置没有指定布尔信号源。
信号源 没有配置布尔信号源。
信号源 点位和变量同时被选中了。
点位 它设定的那个点位已被移除。
点位 DateTime 类型的点位无法转换成布尔值。(Guid 和 ByteString 类型的点位同理)
变量 它设定的那个变量已被移除。
变量 日期和时间类型的变量无法转换成布尔值。(图片、图标和颜色类型的变量同理)

前三条只有在这个模型的停止联锁处于启用时才报出来。

Process:自动化

类型“自动化”;名称:单元的名称;位置:“模型 · 单元”。只有已启用的自动化才被判:关掉的那种什么也不驱动,也就从列表里退场。打开这个模型的自动化屏幕并停在该单元上。

字段 措辞
命令 没有配置启动信号源。
流程 固定的那个流程不可用。(固定选择方式)
选择器 一条信号源发现(见下),针对整数信号源
选择码 n 它选中的流程已被移除。
启动命令的信号源、停止命令的信号源等等,每个命令信号源一条 一条信号源发现,针对布尔信号源
元数据 有一条映射填的是已被移除的流程或字段。
元数据“字段” 一条信号源发现(数值字段用数值,其余用布尔、整数、实数、文本或日期),或者:这个字段不支持自动生成。
回写量“就绪”、回写量“活动”、回写量“所选代码”、回写量“命令结果” 它写入的那个点位已被移除。/ 它写入的那个点位不可写。/ 它需要一个布尔类型的点位。(就绪、活动)/ 它需要一个整数类型的点位。(所选代码、命令结果)

一条信号源发现是下列之一:“没有配置信号源。”“点位和变量同时被选中了。”“它读取的那个点位已被移除。”“它读取的那个点位不可读。”(该点位被禁用或者只写)“类型类型的点位在这里不兼容。”“它读取的那个变量已被移除。”“类型类型的变量在这里不兼容。”兼容性跟着字段的角色走:布尔信号源需要布尔类型的点位或变量;整数信号源需要整数类型;数值信号源需要整数或实数类型;元数据信号源接受布尔、整数、实数、文本或日期中的任何一种类型。

Process:流程

类型“流程”;名称:流程的名称;位置:模型的名称。这里的判断走的是一次运行启动时走的同一道关口,因此这份列表说跑得起来的流程,就是台架会接受的流程。打开这个流程自己那一页。

字段 措辞
组成 判定要在记录下来的数据行上做。这个流程带了一条判定,却没有数据记录。
组成 事件条目‘名称’监视记录下来的采样点。这个流程把它布防了,却没有数据记录。
组成 没有可执行的内容:这个流程既没有引用数据记录,也没有引用配方。
组成 即时方式需要一个即时配方,或者不用配方。时序曲线没有单一的时刻。
组成 受控方式需要一个即时配方,或者不用配方。设定值在启动时写下,安全状态在停止时写下。
组成 时序方式需要一个时长。请设定一个。
组成 时序方式需要一个时序配方,或者不用配方。即时的一组设定值没有时间轴。
组成 配方曲线(N ms)比时间窗口(M ms)长。
组成 事件条目‘名称’监视‘Channels.通道’,而这个流程的数据记录不记它。
组成 关于一次完成的运行对产量贡献了什么的拒绝,或者关于某个配方值到不了它瞄准的那个通道的拒绝,用的是拥有它的那个编辑器的措辞。

Process:事件条目

类型“事件条目”;名称:事件条目的名称;位置:模型的名称。只读取被某个流程布防的事件条目,而且不论多少个流程布防它,都只读一次,因为条件只有一个,修复也只有一处。打开这个事件条目自己那一页。

字段 措辞
条件 条件自己的拒绝,用的是事件条目编辑器的措辞:本模型没有的通道引用、读不通的条件、返回的不是布尔值的条件,或者两个通道落到同一个名字上。它同样是用英文写的。

一个自身站得住、却依然判不了的条件,因为这个流程的数据记录把它盯着的那个通道漏掉了,那就算在那个流程头上:数据记录是流程自己的选择。

Process:动作文书

类型“动作”;名称:动作的名称;位置:模型的名称。这里的判断和动作自己那一页画出“需要复核”提示时用的是同一个,因此在那里被认为就绪的动作,在这里也是就绪的。打开这个动作自己那一页。

字段 措辞
命令 请添加一条命令:这个动作目前不产生任何输出。
命令 n · 开始时的标签、命令 n · 完成时的报告等等 关于那条命令的第一条说明,后面还有更多时再加上“(这条命令上还有 k 处)”。带好几条说明的一条命令仍然是一次修理,在同一页上完成,因此它只占一行。

一条命令可能带的说明,按修理它们的顺序排列:

  • 请至少选择一个完成结论。(完成时的命令一个结论都没有勾选)
  • 请选择一份报告。/ 选中的报告已不存在。
  • 请选择一个标签模板。/ 模板已被清除或删除;已保存的映射仍然保留。/ 选中的全局模板已不存在。
  • 选中的模板还没有打印机指令;请在运行记录走到这条命令之前写入或导入。
  • 无法读取模板标记:错误
  • {{marker}} 需要一个信号源。/ {{marker}} 被映射了不止一次。
  • {{marker}}:请选择一个信号源 / 这个信号源在开始时还取不到 / 请从这个模型的元数据目录里选一个字段 / 请从这个模型的某个判定里选一条判据 / 请明确指定一个从 0 到 n 的循环序号 / 请去掉这个日期时间信号源上的小数位 / 请对这个数值信号源使用默认格式 / 小数位必须在 0 到 9 之间 / 请去掉这个文本信号源上的数值或日期格式
  • {{marker}} 已从当前模板中移除;请删掉它保存的映射。

Logic

没有位置:Logic 的那几种都在顶层。每一个解析不开的地址一行,地址按表达式书写它的样子写出。只扫描表达式变量;内部存储值变量没有表达式可读。当一段文本的每个地址都能解析时,还会像它的编辑器那样评判这段文本,编辑器拒绝的文本占一行,措辞就是编辑器自己的那句消息:保存为 !Variables.Start 的报警得到“‘Variables.Start’是点位本身,而不是它的值:作为条件时它始终被视为真。请用 Variables.Start.ValueToBool() 读取它的值。”这次评判不包括编辑器用当前值做的试算,所以一行不会随着读数时有时无;空文本不列出:那是还没写的定义。

类型 字段 措辞
表达式变量 表达式 指向 address,而它已经不存在
动作 脚本 指向 address,而它已经不存在
报警 条件 指向 address,而它已经不存在
表达式变量 表达式 编辑器拒绝这段文本时的那句消息 (校验拒绝什么)
动作 脚本 编辑器拒绝这段文本时的那句消息 (校验拒绝什么)
报警 条件 编辑器拒绝这段文本时的那句消息 (校验拒绝什么)

仪表画面

类型:编辑器给这个组件的种类起的名字(仪表盘、折线图、数值…);名称:为这个组件输入的名称,没有就用它的标题,再没有就用编辑器推导出来的;位置:仪表画面的名称。每一个地址字段一行,因此一个组件的数值和颜色读了两个已移除的点位,就是两次修理。

字段 措辞
地址、颜色点位、第 2 个系列 › 地址,以及该种类的每一个其他地址字段;每个字段都用编辑器属性面板给它的标签来称呼(嵌套的列表按它的路径书写) 指向 address,而它已经不存在

只读取地址字段,而且只读能解析成带根、至少有一段的地址的那种值:一个写着“Process.Press 1.Temperature”的文本组件是文字,不是引用,永远不会被报出来。同一个字段里的同一个地址算一条发现。定义在 Process 模型上的画面会跳过:它们通过一个单元占位符来绑定通道,在某个单元打开那张画面之前,没有任何点位答得上那些地址。

Connector

OPC UA 服务器的列表、Modbus 服务器的寄存器映射或 MQTT Broker 的发布列表中的一行,按身份持有它的信号源(点位、变量、报警,在 OPC UA 服务器上还有设备的命令):改名永远不会让它断开,删除则让这一行留在原处,并标明它失去了什么。这样的行会列在这里,正是它自己的表格标为缺失的那一行。工作站仍然拥有、只是不提供的信号源(被禁用的点位、被禁用设备的点位、没有寄存器能承载其类型的变量)不会列出:是什么把它挡在外面,这一行自己的字段会说。这一行保存的是操作员从不阅读的身份,所以它说出消失的是哪一类信号源,而不是把身份显示出来。

类型 名称 位置 字段 措辞
提供的节点 点位缺失、变量缺失、报警缺失或命令缺失 OPC UA 服务器 信号源 它提供的那个点位已被移除。/ 它提供的那个变量已被移除。/ 它提供的那个报警已被移除。/ 它提供的那个命令已被移除。
寄存器映射行 映射读出的这一行的位置(寄存器类别和寄存器) Modbus 服务器 信号源 它提供的那个点位已被移除。/ 它提供的那个变量已被移除。/ 它提供的那个报警已被移除。
发布的主题 这一行的主题 Broker 的名称 信号源 它发布的那个点位已被移除。/ 它发布的那个变量已被移除。/ 它发布的那个报警已被移除。

这个页面不删除也不改动任何东西,每个服务器对这一行照旧行事:OPC UA 服务器不为它提供任何内容,Modbus 服务器对读取其寄存器的客户端以异常 04 回应,Broker 保留它在该主题上保存的最后一条消息。修复在这一行的卡片上进行:另选一个信号源,或者删除这一行。

点一行会打开什么

种类 打开什么 落在哪里
组件 处于编辑模式的仪表画面(/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}) 那个实体在它的编辑器里被选中,它在地址空间里所属的那一节展开。
提供的节点、寄存器映射行、发布的主题 Connector(/connector?focus={row}) 树中选中 OPC UA 服务器、Modbus 服务器或该 Broker,这一行在它的提供的节点、寄存器映射或发布卡片中被选中,字段在表格下方展开,在那里另选信号源或删除这一行。

打开只是把你送到故障上;目标页面随后对这次编辑施加它自己的权限(Process 屏幕上是管理 Process,Logic 里是配置 Logic,Connector 里是配置 Connector)。页面到达时已经解析不开的实体(这期间被删掉了)会被忽略,页面就按它平常的样子打开。

导航栏上的角标

导航栏上的验证入口戴着一枚警示色的小药丸,写着待修复的项数,超过九十九写“99+”,配置干净时则不戴。这个数字是校验器自己的,由这一页所跟随的那同一次重扫在后台保持最新,因此你在任何页面上编辑时它都会跟着动,不需要打开这一页。打开这一页以及在这一页上重扫也会更新这个数字,因此小药丸显示的数字永远和列表一致。

这一页永远不做的事

  • 它什么也不修:不重新绑定,不删除,不重命名。每一行都是一次“打开”;行上没有别的动作,也没有批量动作。
  • 它从不评判运行时:一台不通信的设备是状态栏里的健康状态,不是这里的一条发现。指向一个存在但读数质量不良的点位的引用,是解析得开的。
  • 它从不报出被禁用的自动化、定义在模型上的画面、看起来像地址的自由文字、内部存储值变量,或者同一条动作命令的第二条及以后的说明(数字会说还有多少条在那一页上等着)。
  • 它从不读取没有任何流程布防的事件条目,也从不把同一个已布防的事件条目列两次,不论有多少个流程布防它:一个条件就是一处修复。
  • 它从不在 Connector 处于半途状态时扫描;它会等,然后只量一次。
  • 在每一块屏幕上它都是同一份列表,工作站的窗口和浏览器一样,对每一个可以打开它的身份也一样:权限把的是这一页的关,不是每一行的关。
  • 运行时停止期间,这一页和每一页一样让位给暂停提示;角标保留它最后的数字。
  • 它从不删除服务器列表中的一行,也从不改变服务器对它的处理,也从不列出工作站仍然拥有、只是不提供的信号源(被禁用的点位、没有寄存器能承载其类型的变量):那由这一行自己的卡片来说。