1# @Language: Markdown
2# @Software: VS Code/MacDown/Typora/Vim
3# @Author  : Di Wang
4# @Email   : [email protected]

See epics examples

介绍

自从去年夏天bessy被网络攻击之后, sequencer的网站 (http://www-csr.bessy.de/control/SoftDist/sequencer/) 就打不开了. Ralph建立了一个镜像仓库, 可以从此处下载源码. (http://www-csr.bessy.de/control/SoftDist/sequencer/)

我个人没有用过sequencer, 简单逻辑我习惯通过db完成, 稍微复杂一点的用subroutine调用c函数.

但它的确适合用于诸如磁铁初始化的过程. 优点在于区分了Control flow和data flow.

安装

sequencer需要安装re2c.

在ioc中加入sequencer的方式

1# Build sncExample into exampleSupport
2sncExample_SNCFLAGS += +r
3example_DBD += sncExample.dbd
4# A .stt sequence program is *not* pre-processed:
5exampleSupport_SRCS += sncExample.stt
6exampleSupport_LIBS += seq pv
7example_LIBS += seq pv

用法

SNL 代表 State Notation Language, sequencer就是用来定义状态机. 首先判断当前状态, 然后依据条件判断是否进入另一个状态.

 1program sncExample
 2double v;
 3assign v to "{user}:aiExample";
 4monitor v;
 5
 6ss ss1 {
 7    state init {
 8        when (delay(10)) {
 9            printf("sncExample: Startup delay over\n");
10        } state low
11    }
12    state low {
13        when (v > 5.0) {
14            printf("sncExample: Changing to high\n");
15        } state high
16    }
17    state high {
18        when (v <= 5.0) {
19            printf("sncExample: Changing to low\n");
20        } state low
21    }
22}