触发器
触发器编辑器:身份与位置、带种类、间隔和动作的“排程”卡片、“调度”竖栏、每 100 毫秒的调度器及其固定延时和跳过的节拍、那些命令,以及触发器做不到什么。
触发器把一个起因绑到一个动作上。今天唯一的起因种类是定时间隔:调度器按一个固定周期把绑上的那个动作发出去。在 Logic 那一栏 Triggers 一节下面选中一个触发器(或者用“新建…”>“新建触发器”造一个),就能打开它的编辑器;读要查看 Logic,编辑要配置 Logic。触发器上没有操作类命令:它自己会发,而手工跑一次是那个动作自己的“运行”。
标题栏显示触发器标记、名称、那一行“一份排程,它自己按你设的间隔运行一个动作。”,触发器关着的时候还有一枚已禁用的胶囊。表单那一列里放着身份和排程;右边那条竖栏放着调度。
身份
| 字段 | 它是什么 | 取值 / 默认值 | 影响 |
|---|---|---|---|
| 名称 | 显示名称;这个触发器发出去的那些运行都记在它名下。 | 自由文本;新触发器叫 TriggerN;名字留空则存成 Trigger。 |
每一次按键都自动保存。触发器是按身份被引用的;改名不影响别的任何东西。 |
| 位置行 | 这个触发器归在哪里:Triggers / <folder> / <name>。 |
只读。 | 触发器没有地址。要改文件夹就用树里的移动到。 |
| 说明(可选) | 自由文本。 | 空。 | 没有影响。 |
排程
| 字段 | 它是什么 | 取值 / 默认值 | 影响 |
|---|---|---|---|
| 种类 | 起因。 | 定时间隔,唯一的一种。 | 今天没有影响。 |
| 间隔(毫秒) | 发出的周期。 | 一个至少为 100 的整数(调度器扫查的分辨率);默认 1000。 | 更小的、负的或者解析不了的输入会保留已存的间隔,并显示“间隔必须是一个至少 100 毫秒的整数(调度器的分辨率)。”改了间隔会把时钟重置:下一个节拍在下一次扫查之后整整一个新间隔才到点。 |
| 动作 | 这个触发器发出去的那个动作。 | (none) 或者本工作站的任何一个动作;默认 (none)。 |
没有动作的触发器空转,并写“请绑一个动作。在那之前触发器空转。”;动作被删掉的写“绑定的动作已经不存在了。请另挑一个。”;动作被禁用的写“绑定的动作‘X’已禁用,所以触发器空转。” |
每个字段都自动保存;卡片下面那条校验提示每半秒重算一次。
调度
调度器每 100 毫秒扫查一次,把到点的东西发到逻辑队列上:
- 刚创建、刚启用,或者刚改过间隔、种类或动作的触发器,会在下一次扫查时被起表:它的第一个节拍在那之后一个间隔到点。
- 发出去之后,下一个节拍从此刻起整整一个间隔才到点(固定延时):忙过一阵之后绝不会有一串补发。
- 一个到点时该触发器上一次运行还排着队或者还在执行的节拍会被跳过,而不是排队;这次跳过被计数,下一个节拍重新排程。一个慢动作后面攒不出积压。
- 动作缺失或已禁用的触发器空转:它被重新排程但不发出,而空转从不算作一次跳过。
- 这次运行记在触发器的名字下面,它的结果落在那个动作的上次运行竖栏里。已禁用的触发器从不发出。
调度那条竖栏显示实时诊断:上次发出、下次到点(调度器起表之前是一道短横)、跳过的节拍(一个只存在内存里的计数,重启之后回到 0),以及那句提示“一个在上一次运行还没了结时到来的节拍会被跳过,而不是排队(不会积压)。只有失败的运行会到事件控制台,记在这个触发器的名字下面。”
Triggers 根的面板在“数值”那一列里列出每一个触发器和它的状态:“每 1000 毫秒 · 上次 <when> · 跳过 N 次”,或者“已禁用”。
命令
| 命令 | 作用 | 何时置灰 | 何时不画出来 |
|---|---|---|---|
| 启用 / 禁用 | 翻转“已启用”;启用会把时钟重新起表。 | 工作站被锁住或只读。 | 角色没有“配置 Logic”。 |
| 复制 | 把这个触发器(同一个动作、同一个间隔)复制到 Triggers 根下面一个空闲的名字上并打开它;副本一开始没有排程。 | 工作站被锁住或只读。 | 角色没有“配置 Logic”。 |
| 删除触发器 | 先问“要删除‘X’吗?这会把这个触发器拿掉。此操作无法撤销。” | 工作站被锁住或只读。 | 角色没有“配置 Logic”。 |
删掉绑上的那个动作,会让触发器变成没有绑定,而不是跟着动作一起被删掉。
触发器不做什么
没有别的起因种类:没有东西是由一次数值变化、一个条件、一天里的某个时刻或者开机来触发的。一个触发器只发一个动作,绝不发好几个,也绝不手工发出:要手工跑就跑那个动作本身。调度器随运行时一起停下,而工作站正在关闭时被“运行时已停止”拒绝的一次发出会被静静丢掉。