配方

一次运行写入的那些设定值:开始时套用的一组即时值,或者一条时序的阶跃、斜坡和保持曲线,两者都可以带上每一次结束的运行都会写的收尾块。

以 Markdown 查看

一份配方写这个模型可写的那些通道。即时配方是一组在运行开始时套用一次的设定值;时序配方是一条按运行自己的计时驱动的、由阶跃、斜坡和保持段组成的有序曲线。两者都可以以一个收尾块结束,也就是运行无论怎么结束都会写下的那个安全状态。每一次写入都走那唯一一个记入日志的写入出口,并按实际执行的情况记进运行记录文件。配方住在 Process > 模型 > 某个模型 > 设定 > 配方下面,需要编辑配方与判定权限。

配方文件夹

选中配方那一行会打开文件夹页面(“运行记录开始时流程套用的设定值,经同一个出口写入,并按实际执行的情况记录下来。”),一份一张卡片,按名称排;点一张卡片就打开它,那个叉则把它删掉。一份都没有时,页面写着“还没有配方。添加一个。”

命令 做什么 什么时候变灰(情形) 什么时候不画出来(角色)
新建配方(选中文件夹时在详情栏上;右键添加配方 添一个 Recipe <n>:即时,失败时暂停,没有设定值。并选中它。 任何一个单元上有运行,或者运行时已停止。 没有编辑配方与判定时。

配方的页面

标题栏带着名称、那一行“运行记录开始时流程套用的设定值,经同一个出口写入,并按实际执行的情况记录下来。”,以及一枚写着类型的小药丸。每一个字段都自动保存,每一次编辑都会重画曲线预览。

定义

字段 是什么 取值 / 默认 效果
名称 这份配方在树里、在一个流程的配方选择框里,以及在一张操作面板的套用配方选择框里叫什么。 自由文本;创建时是 Recipe <n> 给那一行改名。
类型 这份配方的形态。 即时(默认):一组在开始时套用一次的设定值。时序:一条按自己的计时走的、有序的阶跃 / 斜坡 / 保持曲线。 在下面两种形态之间切换页面。已经填好的设定值和曲线段都保留下来;只画当前类型所读的那一种形态。留着不用的那一块既不套用也不占用:一次运行只写并只锁住当前类型所写的东西。一个流程只接受类型与它的方式相合的配方。
失败时(只有时序才有) 一次写入失败、或者它需要的值读不出来时,这条曲线怎么办。 暂停(默认)、继续中止;见时序形态下面那张表。 这是配方的规则;每一段都可以覆盖它。
附注 给读这份配方的人看的自由文本。 多行;默认为空。 别无他用。

那些值

设定值和目标值以文本形式输入,套用时按不变文化解析成通道的类型:

通道类型 接受的字面量
Bool truefalse10
Integer 一个整数,. 绝不用作分隔符
Real . 作小数分隔符的数字(12.51e-3
String 任意文本,照原样
DateTime 一个可往返的日期和时间(2026-09-02T14:30:00+00:00

不合通道类型的字面量绝不会被写出去:那次写入在运行记录文件里记为失败,并交给失败规则处理。这一页上每一张通道行的表格,添行时只提供同一张表格里其他行还没有占用的可写通道,因此一条通道在一组里只被写一次、在一段里也只被写一次;每一条可写通道都被占用之后,添行的按钮变灰,写着“每一条可写通道在这里都已经有设定值了。”(或者“……在这一段里都已经有目标值了。”),而一条可写通道都没有时则写“这个模型还没有可写的通道。”

一份即时配方

两张互不相干的卡片,各自的标题上都有一个设定值按钮,按它就在第一条空着的可写通道上添一行,值为 0

卡片 它写什么
设定值(开始时套用) 在开始时写一次,写在这次运行记录任何东西之前。
收尾(安全状态) “运行记录结束时一律写入:完成、停止或中止都算。”

两张表格的列是一样的:

是什么 取值
通道 被写的那条可写通道,写作 Ch<number> · <name> 这张表格里还没有被占用的只写通道和读写通道。
数值 被写下去的那个字面量。 见“那些值”。
行上的动作 删除问“删除设定值”:那条通道的名称,“这会把这个设定值从配方里删掉。”

一份时序配方

时序形态先画那条曲线,然后是那些曲线段,旁边是曲线段里被点中的那一段,最后是收尾块。

时序曲线

这张图就是配方本身:每一条被那些曲线段作为目标的数值通道一条系列,标签写作 <name> [<unit>],画成那些曲线段拼出来的分段曲线(阶跃是跳上去然后保持,斜坡是从带进它的那个值倾斜过去,保持段或者没有目标值的段则维持不变),横轴是累计的秒数。落在非数值通道上的目标值不画出来。这张图带着每一张图都有的工具栏,也可以在它自己的窗口里打开(见图表);流程页面在它的套用那一段下面画的是同一条曲线。

曲线段

这个列表的标题是曲线段,它的曲线段按钮添一个 60000 ms 的阶跃段,没有目标值,并把它选中。点一行就在曲线段目标值那一栏里打开它;什么都没选中时,那一栏写着“选中一个曲线段,就能在一个地方编辑它的全部内容,包括它要驱动到的目标值。”

是什么 取值 / 默认
类型 这一段在曲线上摆出的形状;每一个选项名字旁边都带着那个形状。 阶跃(默认)、斜坡保持
时长(ms) 配方在这一段里停留多久才走到下一段。 一个毫秒数;创建时是 60000。这个字段不接受负数:输入会被拒绝,字段下面的附注会写出来,之前的值回来。
失败时 这里出现失败时,是跟随配方的规则,还是跟随这一段自己的某一种。 (随配方)(默认:继承)、暂停继续中止
目标值 这一段要驱动到什么,写在一行里:<channel> = <value>, …。保持段什么都不驱动,因此它读起来是空的。 只读;在那一栏里编辑。
行上的动作 删除问“删除曲线段”:第 <n> 段 · <类型>,“这会把这一段及其目标值从配方里删掉。”
段的类型 它做什么
阶跃 在段开始时写下它的目标值,然后停留这段时长(阶跃段可以停留 0 ms)。
斜坡 在这段时长里,把每一条目标通道从它最后被命令的值(还没有被命令过时,则从它当前的值)线性地驱动到目标值。斜坡是把通道从一个读数带到另一个读数,所以它的目标选择器只提供存数值的通道:文本通道或者日期时间通道留在列表里但选不了,并写明阶跃只往它写一次。
保持 在这段时长里维持最后被命令的那些值;它什么都不写,也不带目标值。

那一栏的标题是 第 <n> 段 · <类型>,它把那三个字段连同一句图例重复一遍,并在每一个下面写出当前值的效果:

字段 图例 效果
类型 每个选项旁边的那个形状。
时长(ms) “配方在这一段里停留多久才走到下一段。” “执行 1 分 30 秒。”(0 或更小时写“完全没有时长”)。
失败时 “这里出现失败时,是按配方说的那样处理,还是按这一段单独要求的另一种方式处理。” “跟随配方:暂停。”或者“这一段覆盖配方的做法:中止。”

它们下面是目标值,装着这一段的那些目标值,那一栏的标题上有一个目标值按钮,按它就在这一段还没有驱动的第一条可写通道上添一行,值为 0。在保持段上,这张表格被换成一行“保持段维持曲线已经达到的值,因此它自己不驱动任何目标值。”,按钮变灰,写着“保持段维持已经达到的值。要在这里驱动目标值,请更改段的类型。”;保持段从更早的类型带下来的目标值仍然存着,而运行、曲线预览和执行清单都一样地忽略它们:

是什么
通道 被驱动的那条可写通道,只在这一段其他目标值还没有占用的通道里提供。
目标值 被写下去(阶跃)或者被达到(斜坡)的那个字面量。
行上的动作 删除问“删除目标值”:那条通道的名称,“这会把这个目标值从这一段里删掉。”

失败时

一次写入被拒绝、或者它需要的值读不出来时,失败规则对时序配方生效:

规则 这次运行怎么办
暂停 把曲线冻结在最后那个设定值上,等操作员继续或者中止。数据记录照样记录。
继续 把这次失败按实际执行的情况记下来,然后接着走;这条失败的通道在这一段余下的时间里被跳过。
中止 写下收尾块,并把这次运行以中止结束。

收尾(安全状态)

和即时配方上那张卡片一样,“运行记录结束时一律写入:完成、停止或中止都算。”,带着它自己的设定值按钮和表格。

一份配方在哪里被用到

界面 它拿这份配方做什么
一个流程的套用那一段 选择框提供这个模型的每一份配方;类型和这个流程的方式不合的配方列作“<name>(不兼容)”,处于禁用状态,理由写在悬停提示里。即时或受控流程接受一份即时配方或者不要配方;时序流程接受一份时序配方或者不要配方,而且它的曲线必须装得进那个时间窗口。那一段的文字说清这个选择写什么:“开始时写入 4 个设定值。”“开始时写入 4 个设定值,收尾时再写入 2 个。”“用 2 分 30 秒走完 3 个曲线段,收尾时再写入 2 个设定值。”,或者“不写入任何设定值。”见流程
一张操作面板的单条命令卡片 套用配方在任何运行之外,通过那个记入日志的出口、在一把短命的锁下面,把一份即时配方的设定值写一次;不创建运行记录文件,日志就是那份记录。只提供即时配方。见操作面板

一次运行拿它做什么

启动时,这次运行在它整个持续期间取得对配方所写的每一个信号源的所有权,因此一次配方要写另一次运行占着的信号源的启动会被指名拒绝,而在这次运行占着那些信号源期间,来自别处(一个仪表画面字段、一个脚本、一个 OPC UA 客户端)的每一次写入都会被拒绝。一组即时值在开始时写一次;一条时序曲线按这次运行的计时一段一段走,而一个没有配方的时序流程照样拿到那个计时,好让这个时间窗口里的每一个成员一起开始、一起重复、一起结束。暂停冻结这个计时,继续把它放开;暂停期间数据记录照样记录。每一次写入都以这次运行为来源记入日志,并按实际执行的情况记进运行记录文件,因此以后读的人看到的是当时到底写了什么、什么时候写的。

收尾块在这次运行结束时一律写下:完成、停止或中止都算。应用本身在运行中途被关掉时不写它:那次运行并没有结束,它会在下一次启动时以暂停状态、在它持久保存下来的那一段和那个循环上继续。

删除配方

删除配方在选中这份配方时立在详情栏的危险组里,也在它的右键菜单里,还是文件夹页面卡片上那个叉。它先问一次(“删除配方”,“这会把这份配方从模型里删掉。”)。每一个套用过它的流程都把它的配方引用清空,变成一次不带配方的运行。它需要编辑配方与判定,在工程锁定和运行时停止之下变灰。

一份配方不做的事

  • 它什么也不读、什么也不判:限值是判定的事。
  • 它不写任何按单元的值。每一个单元在它自己绑定的信号源上收到的是同样那些字面量。
  • 它绝不重试一次被拒绝的写入;失败规则就是全部答案。
  • 一份时序配方不能作为单条命令触发;只有流程才跑曲线。
  • 曲线预览只画数值通道;一个 Bool 或 String 目标值照写,但从不画出来。