单元地址空间
一个单元在 Process.模型.单元 下面发布的每一个点位、它的类型和含义、哪些点位是可写的命令,以及一个 Logic 脚本可以从中读到什么。
每个单元都把自己的运行数据当作普通的 Logic 地址发布在 Process.<Model>.<Unit> 下面,因此仪表画面、Logic 表达式、内置的 OPC UA 服务器和代理都不用额外接线就够得着它。这一支在 Logic 页面上“来自其他页面”下面浏览(见来自其他页面),在每一个地址选择器里也能浏览。重命名一个模型、单元、通道或元数据字段,会替换掉相应的地址,并改写活着的文字引用;已记录的文件保留写下去时冻结的那些名称。各段是净化过的名称:模型“Climatic chamber”里一个名叫“Unit 1”的单元,寻址写作 Process.Climatic_chamber.Unit_1。
| 分支 | 暴露什么 | 可写 |
|---|---|---|
Channels.<Channel> |
每条通道当前绑定到的实时值,按通道声明的类型定型。 | 可写的通道(只写或读写角色)是经出口可写的点位;被某次运行记录占着的信号源会拒绝其他每一个写入者。 |
Procedure.<point> |
运行状态,每个点位一个标量(见下表)。 | 否。 |
Commands.<command> |
Start、Hold、Resume、Stop、Abort 和 Comment。 |
是:写入即派发(见下表)。 |
Next.<point> |
下一次启动要消耗的那个预选区。 | 只有手工填写的元数据字段可写。 |
Productivity.Today.<branch> 和 Productivity.Rolling.<branch> |
这个单元在各个周期上的产量统计。 | 否。 |
通道
一个通道点位读的是这个单元绑定背后的那个值,投影成通道的数据类型;通道没有绑定、或者它的信号源不可用时,它读作一个空档。在 Logic 脚本里,这个点位是所绑定点位或变量的一个只读定型投影,绝不是那个点位本身:Value、ValueObject、ValueRaw、ValueScaled、ValueCalibrated、ValueLimited、ValueRounded,转换函数 ValueToBool()、ValueToInteger()、ValueToReal()、ValueToString() 和 ValueToDateTime(),质量 State(),时间戳 SourceTimeStamp() 和 ApplicationTimeStamp(),以及 Refresh()、Name 和 EngineeringUnit。数值转换链上的那些成员是为点位绑定作答的;变量绑定作答的是值和应用时间戳。
Procedure
每一个点位都从活着的那次运行记录算出来,读起来质量良好;没什么可说的点位读作一个空档。
| 点位 | 类型 | 含义 |
|---|---|---|
Status |
文本 | 单元已被预留而运行记录还不存在时是 Preparing,没有东西占着它时是 Idle,其余时候就是运行状态:Running、Held、Saving、Completed、Aborted、Failed。 |
Running |
布尔 | 严格对应运行中这个状态;准备、已暂停、保存中和收尾期间它绝不为真。 |
Busy |
布尔 | 整段被占用的时间:预留、运行中、已暂停、保存中,以及运行记录文件最后关掉。 |
Verdict |
文本 | OK、NOK、Indeterminate 或 None。判过的证据在运行记录结束之后仍然读得到,直到下一次运行记录开始。 |
Mode |
文本 | 活着那次运行记录的模式,Instant、Temporal 或 Controlled;一条单条命令(快照、立即判定)也会报。空闲时是空档。 |
ActiveProcedure |
文本 | 活着那次运行记录的名称(“流程 · 单元”)。空闲时是空档。 |
SegmentIndex |
整数 | 时序曲线当前所在的曲线段,从 0 开始。没有曲线时是空档。 |
CycleIndex |
整数 | 当前的循环,从 0 开始。空闲时是空档。 |
CycleCount |
整数 | 这次运行记录的总循环数(单趟为 1)。空闲时是空档。 |
Cycle |
文本 | 循环运行记录写作“2 / 10”;运行记录不循环时是一个空档,这样绑定上去的数值显示写的是空档标记,而不是误导人的一趟。 |
FailedCycles |
整数 | 到目前为止判为不合格的循环数。运行记录不循环时是空档。 |
SamplesEvaluated、SamplesOut、SamplesUnavailable、SamplesInvalid |
整数 | 判定的证据计数器,由判定引擎原子地更新。没有判过的证据时是空档。 |
Elapsed |
小数 | 从运行记录开始到现在的秒数。空闲时是空档。 |
StartedAt |
日期和时间 | 活着那次运行记录是什么时候开始的。空闲时是空档。 |
Commands
读一个命令点位,回答的是“现在能不能执行”,因此绑定上去的按钮会自己禁用;写它则通过运行控制台派发这条命令,按写入界面的来源记进日志,并连同按下的那个人的身份一起记录下来。命令是一次服务调用,绝不是一次排队的点位写入。
| 点位 | 什么时候读作真 | 写入 |
|---|---|---|
Start |
单元不忙、运行时接受操作、联锁正常,而且已经预选了一个流程。 | 用预选的元数据启动预选的流程。 |
Hold |
有一次运行记录在运行中,而且它的流程是时序的。 | 冻结这个窗口。 |
Resume |
有一次运行记录处于已暂停,而且联锁正常。 | 解除暂停。 |
Stop |
有一次运行记录在运行中。 | 以已完成结束这次运行记录。 |
Abort |
有一次运行记录在运行中或者已暂停。 | 以已中止结束这次运行记录。 |
Comment |
永不:这个点位没有读数。 | 把写进去的文字作为一条备注追加到活着的那次运行记录上;单元空闲时,则作为一条事后补记加到这个单元最近一次已结束的运行记录上。一个一次运行记录都没有的单元会拒绝(“这个单元没有可以写备注的运行记录。”),空文字也一样被拒绝。 |
工作站拒绝写入期间(运行时已停止),每一条命令都读作假。
Next
| 点位 | 类型 | 含义 |
|---|---|---|
Next.Procedure |
文本 | 预选流程的名称。在这里只读:预选是在运行记录卡片上,或者用流程选择器组件做的。 |
Next.<Field> |
文本 | 预选的流程提示填写的每一个元数据字段一个点位;单元重新预选时这一支会重新成形,而属于另一个流程的字段读作空档。手工填写的字段(文本或数字)是一个可写的预选点位,绑定到它的输入组件写的就是它。流水号字段是对计数器此刻会拼出的那个标识的只读预测;读它绝不会把它占下来。 |
预选是全工作站范围的、放在内存里的、临时的:应用启动时它归零,而启动是把它消耗掉,不是把它清空。
Productivity
两个周期,Today(从本地零点起)和 Rolling(模型或单元上声明的那个窗口),各带三个分支(见产量):
| 分支 | 点位 | 类型 |
|---|---|---|
Summary |
ProductivityPercent、YieldPercent、TypicalElapsedSeconds |
小数;分母还不存在时是空档。 |
Summary |
Finalized、OK、NOK、Indeterminate、Unclassified、Aborted、Failed |
整数计数。 |
Outputs.<key> |
Quantity、RatePerHour |
小数;每个命名的产量项一个键,模型一个产量项都没声明时,则每个计入产出的流程一个键。 |
Procedures.<key> |
Quantity、RatePerHour,以及上面那些汇总点位 |
同上,按计入产出的流程分。 |
这些键是从稳定的 id 和冻结下来的产出单位推出来的,不是从显示名称推出来的,因此重命名绝不会让一个表达式挪窝。每一个点位都是只读的,而这份统计是从历史索引读出来的,绝不从运行记录文件读。
一个脚本可以做什么
Logic 的变量、报警和动作脚本可以读这里的一切:通道数值、运行状态、命令就绪状态、预选的值和产量点位。它们不能派发命令、不能写预选字段,也不能追加备注;那些写入属于明确的命令消费者:那些操作面板、仪表画面上的按钮、输入框和流程选择器、单元的自动化,以及那些代理工具。