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}