顺序功能图 用于结构化描述PC程序组织单元的内部组织,它使用本标准定义的语言之一,用于执行 顺序控制 功能。

SFC将PC程序组织单元划分为一系列的 转换 ,它们之间用 有向连接 连起来。每个 与一组 动作 关联,每个 转换 与一个 转换条件 关联。

如果一个程序组织单元的任何部分被划分为SFC元素,那么整个程序组织单元都应进行划分。如果一个程序组织单元没有划分,那么整个程序组织单元可被视为单个 动作

SFC要求保存状态信息,故可以描述的程序组织单元只有 功能块程序

表示程序组织单元的状态,该状态描述了程序组织单元对于输入输出的行为特性。这些行为规则由其关联的 动作 定义。

在图形语言中,表示为包含步名称的块;在文本语言中表示为STEP...END_STEP构造。 有向连接 表示为步上方的垂直线,或使用文本表示为TRANSITION...END_TRANSITION构造。

步运行时间 (指从初始化开始)用***.T表示。当步被置为不活动时,步运行时间置为不活动的时间;当步被激活时,步运行时间被置为T#0s

步的状态 可以是激活的或未激活的,文本语言中用***.X表示,图形语言中用块右侧的连线表示。

程序组织单元的状态 由激活的 和内部、输出变量的值定义。其初始状态表示为 初始步 (初始为激活状态的步)、内部和输出变量的初始值。每个 SFC网络 都有且只有一个初始步。初始步表示为双线边缘的块。

步名、步状态、步运行时间的名称的作用域对于其所在的程序组织单元是局部的。 每个SFC图可以拥有的 数上限和 步运行时间 的精度是 实现相关 的。

图形语言

   | 
+-----+
| *** |     (* 步 *)
+-----+
   |
    |
+=======+ 
|| *** || 
||     ||   (* 初始步 *)
+=======+
    |

文本语言

(* 步 *)
STEP *** :  
    (* Step body *)
END_STEP

(* 初始步 *)
INITIAL_STEP *** :  
    (* Step body *) 
END_STEP

转换

转换 表示了控制从前面的一个或多个 沿着相应的 有向连接 转移到后面的一个或多个 转换 表示为与表示 有向连接 的垂直线相交的水平线。

转换 相关联的 转换条件 有如下表示方法:

  1. 有向连接 旁放一个ST语言的布尔表达式。
  2. 有向连接 旁放一个LD语言的网络。
  3. 有向连接 旁放一个FBD语言的网络。
  4. 放一个LD或FBD语言的网络,使其输出与 有向连接 通过 连接器 相交。
  5. 在ST语言中,使用TRANSITION...END_TRANSITION构造,应包含
    • TRANSITION FROM(前面的
    • TO(后面的
    • :=(指定转换条件)。
  6. 在IL语言中,使用TRANSITION...END_TRANSITION构造,应包含
    • TRANSITION FROM(前面的 )、
    • TO(后面的
    • 另起一行的指令列表(用来计算转换条件)
  7. 有向连接 右边放一个 转换名 ,该标识符应引用一个TRANSITIN...END_TRANSITINO构造。

转换条件的名称的作用域对于其所在的程序组织单元是局部的。 在计算转换条件时如果产生副作用(如对除转换条件的变量赋值)将会被视为 错误 。 每个SFC图,每个 可以拥有的 转换 数上限是 实现相关 的。

示例:

ST布尔表达式

   |
+-----+
|STEP7|
+-----+
   |
   + %IX2.4 & %IX2.3
   |
+-----+
|STEP8|
+-----+
   |

图形网络

(* LD *)             | 
                  +-----+ 
                  |STEP7| 
                  +-----+
| %IX2.4  %IX2.3     | 
+---||-----||--------+ 
|                    |
                  +-----+ 
                  |STEP8| 
                  +-----+
                     |
(* FBD *)              | 
                    +-----+ 
                    |STEP7|
         +-------+  +-----+
         |   &   |     | 
%IX2.4---|       |-----+ 
%IX2.3---|       |     |
         +-------+  +-----+ 
                    |STEP8| 
                    +-----+
                       |

连接器

              |
           +-----+ 
           |STEP7| 
           +-----+
              | 
>TRANX>-------+ 
              |
           +-----+ 
           |STEP8| 
           +-----+
              |

| %IX2.4  %IX2.3     
+---||-----||----->TRANX>
|                    

ST语言

STEP STEP7: END_STEP

TRANSITION FROM STEP7 TO STEP8 
    := %IX2.4 & %IX2.3 ;
END_TRANSITION

STEP STEP8: END_STEP

IL语言

STEP STEP7: END_STEP

TRANSITION FROM STEP7 TO STEP 8: 
    LD %IX2.4
    AND %IX2.3
END_TRANSITION

STEP STEP8: END_STEP

LD语言

TRANSITION TRAN78 FROM STEP7 TO STEP8:
    |                        | 
    | %IX2.4  %IX2.3  TRAN78 | 
    +---||-----||------( )---+
    |                        |
END_TRANSITION

转换名

   | 
+-----+ 
|STEP7| 
+-----+
   |
   + TRAN78 
   |
+-----+ 
|STEP8| 
+-----+ 
   |

动作

每个 应包含0个或更多的 动作 。没有关联动作的步被视为具有WAIT功能,等待下一个转换条件变为TRUE

动作 可以是:

  • 布尔变量
  • 一组IL指令
  • 一组ST语句
  • 一组LD横档
  • 一组FBD网络
  • SFC图

声明

支持SFC元素的PC实现至少应支持一种以下的动作声明机制。

动作 的作用域对于它的声明所在的程序组织单元是局部的。

LD语言

+----------------------------------------+ 
|               ACTION_4                 |
+----------------------------------------+ 
| |  %IX1   %MX3  S8.X  %QX17  |         |
| +---||-----||----||-----()---+         | 
| |                            |         |
| |    +------+                |         |
| +----|EN ENO|         %MX10  |         |
| | C--|  LT  |----------(S)---+         |
| | D--|      |                |         |
| |    +------+                |         |
+----------------------------------------+

SFC元素

+----------------------------------------+ 
|               OPEN_VALVE_1             |
+----------------------------------------+ 
|          | ...                         |
| +=================+                    |
| || VALVE_1_READY ||                    |
| +=================+                    |
|          |                             | 
|          + STEP8.X                     |
|          |                             |
| +-----------------+  +---+-----------+ | 
| | VALVE_1_OPENING |--| N |VALVE_1_FWD| |
| +-----------------+  +---+-----------+ |
|          | ...                         |
+----------------------------------------+

FBD语言

+----------------------------------------+ 
|               ACTION_4                 |
+----------------------------------------+
|              +---+                     | 
|        %IX1--| & |                     |
|        %MX3--|   |--%QX17              |
| S8.X---------|   |                     | 
|              +---+    FF28             |
|                      +----+            |
|                      | SR |            | 
|            +------+  | Q1 |-%MX10      | 
|         C--|  LT  |--| S1 |            |
|         D--|      |  +----+            |
|            +------+                    |
+----------------------------------------+

ST语言

ACTION ACTION_4:
    %QX17 := %IX1 & %MX3 & S8.X ; 
    FF28(S1 := (C<D));
    %MX10 := FF28.Q;
END_ACTION

IL语言

ACTION ACTION_4: 
    LD S8.X 
    AND %IX1 
    AND %MX3 
    ST %QX17 
    LD C
    LT D
    S1 FF28 
    LD FF28.Q 
    ST %MX10
END_ACTION

与步关联

支持SFC元素的PC实现应至少支持一种以下的动作与步的关联机制。

每步中的动作上限是 实现相关 的。

图形表示

  |         (* 动作块 *)
+----+  +-----+----------+---+ 
| S8 |--|  L  | ACTION_1 |DN1|
+----+  |t#10s|          |   |
  |     +-----+----------+---+ 
  + DN1
  |
            
  |         (* 连续的动作块 *)
+----+  +-----+---------------------+---+ 
| S8 |--|  L  |       ACTION_1      |DN1|
+----+  |t#10s|                     |   |
  |     +-----+---------------------+---+ 
  +DN1  |  P  |       ACTION_2      |   |
  |     +-----+---------------------+---+ 
  |     |  N  |       ACTION_3      |   |
  |     +-----+---------------------+---+


            (* 动作块的d字段 *)
    +-----+----------------------+---+ 
----|  N  |      ACTION_4        |   |---
    +-----+----------------------+---+ 
    | %QX17:=%IX1&%MX3&S8.X;         |
    | FF28 (S1 := (C<D));            |
    | %MX10 := FF28.Q;               |
    +--------------------------------+

文本表示

STEP S8: 
    ACTION_1(L,t#10s,DN1) ; 
    ACTION_2(P) ; 
    ACTION_3(N) ;
END_STEP

动作块

动作块 是包括一个布尔变量和一个动作限定符的图形元素,用来产生激活条件。

可选的指示符(c字段)可以被指定的动作赋值,来表示该动作的完成、超时、错误等。如果没有指定c字段,如果b字段指定了该动作为布尔变量,则该变量在需要的时候应被解释为c字段,如果b字段没有指定布尔变量,c的值应被视为FALSE

多个 动作块 可以在图形中相连,此时有多个指示符变量,但只能有单个共同的布尔输出变量。

除了与 相关联, 动作块 也可作为图形元素用于LD或FBD语言。

   +-----+--------------+-----+
---| "a" |      "b"     | "c" |--- 
   +-----+--------------+-----+
   | "d"                      |
   |                          | 
   +--------------------------+

其中:

  • a: 限定符
  • b: 动作名
  • c: 指示符
  • d: 动作,可以采用:IL语言,ST语言,LD语言,FBD语言

动作块在LD/FBD图中使用

(* LD *)
|  S8.X  %IX7.5  +---+------+---+  OK1  | 
+--| |----| |----| N | ACT1 |DN1|--( )--+ 
|                +---+------+---+       |

(* FBD *)
         +---+     +---+------+-----+ 
  S8.X---| & |-----| N | ACT1 | DN1 |---OK1
%IX7.5---|   |     +---+------+-----+ 
         +---+

动作限定符

每个动作块、步/动作关联都有一个相应的 动作限定符 ,如下表

限定符 解释 限定符 解释
None 非存储的 N 非存储的
R 重载的复位 S 设置(存储)
L 限制时间 D 延迟时间
P 脉冲 SD 存储和延迟时间
DS 延迟和存储 SL 存储和限制时间
P1 脉冲(上升沿) P0 脉冲(下降沿)

动作控制

动作控制应在功能上等效于下列规则:

  1. 每个动作应与一个ACTION_CONTROL功能块实例的功能等价体相关联。当动作被声明为布尔变量时,该功能块的输出Q即为该变量的状态;当动作被声明为语句或网络时,如果该功能块输出ATRUE则应连续地执行,此时动作标志Q可以通过功能块实例来只读地访问,实例名即为当前动作名,如ACTION1.Q
  2. 如果对ACTION_CONTROL的一个布尔输入相应的限定符等效于输入名称(N,R,S,L,D,P,P0,P1,SD,DS,SL),则称与 动作块 有关联。如果至少一个关联是激活的,则ACTION_CONTROL的该布尔输入的值为TRUE
  3. ACTION_CONTROLT输入的值应为一个活动关联的时间相关限定符(L,D,SD,DS,SL)的时间部分的值。
  4. 以下的情况将被视为 错误
    • 一个动作有多个活动关联具有时间相关限定符。
    • ACTION_CONTROLSL_FFQ1输出值为TRUE时,SD输入值为TRUE
    • ACTION_CONTROLSD_FFQ1输出值为TRUE时,SL输入值为TRUE
  5. ACTION_CONTROL本身不要求实现,只要动作控制等效于以上规则。

ACTION_CONTROL功能块(不带“最后扫描”逻辑)-外部接口:

       +----------------+
       | ACTION_CONTROL |
BOOL---|N              Q|---BOOL 
BOOL---|R               |
BOOL---|S               | 
BOOL---|L               | 
BOOL---|D               | 
BOOL---|P               |
BOOL---|P1              | 
BOOL---|P0              | 
BOOL---|SD              | 
BOOL---|DS              | 
BOOL---|SL              | 
TIME---|T               |
       +----------------+

演化规则

SFC网络的 初始状态 表征为 程序功能块 初始化时处于激活状态的 初始步 。激活步在 转换 发生时沿着 有向连接 进行 演化

当前面的步都处于激活状态时, 转换 处于激活状态。当 转换 处于激活状态并且转换条件为TRUE时转换发生。转换发生后,前面步的状态被重置,而后面的步被激活。

如果一次状态转移导致多个步的激活,那么这些步所属序列成为 并发序列 。同时被激活后,他们的演化将相互独立。

当步的激活已经传播至声明该步的整个程序组织单元后,对于激活步的测试和后面的转换才可以发生。

状态转移时间理论上被视为无限短,而实际上不可能为零,该时间应被PC实现限制。 同时激活步的“发散”和“收敛”构造的最大宽度是 实现相关 的。

示例:

  | 
+----+
| S5 |
+----+ 
  |
  +------+----+--...
  |      |
  +e     +NOT e & f
  |      |
+----+ +----+
| S6 | | S8 |
+----+ +----+
  |      |

5到6的转换发生条件:5为激活状态,且e为TRUE; 5到8的转换发生条件:5为激活状态,且e为FALSE,且f为TRUE

状态转移步骤示例:

转换未激活(X=0 or 1):

    |          |       |        | 
+------+    +-----+ +------+ +------+ 
|STEP10|    |STEP9| |STEP13| |STEP22| 
|      |    |     | |  *   | |  *   |
+------+    +-----+ +------+ +------+   
    |          |       |        |
    + X    ====+=======+========+==== 
    |                  |
+------+               +X
|STEP11|               |
|      |      ====+====+===+====
+------+          |        |
    |         +------+  +------+  
              |STEP15|  |STEP16| 
              |      |  |      |
              +------+  +------+ 
                  |        |

转换激活,但未发生(X=0):

    |          |       |        | 
+------+    +-----+ +------+ +------+ 
|STEP10|    |STEP9| |STEP13| |STEP22| 
|  *   |    |  *  | |  *   | |  *   |
+------+    +-----+ +------+ +------+   
    |          |       |        |
    + X    ====+=======+========+==== 
    |                  |
+------+               +X
|STEP11|               |
|      |      ====+====+===+====
+------+          |        |
    |         +------+  +------+  
              |STEP15|  |STEP16| 
              |      |  |      |
              +------+  +------+ 
                  |        |

转换发生(X=1):

    |          |       |        | 
+------+    +-----+ +------+ +------+ 
|STEP10|    |STEP9| |STEP13| |STEP22| 
|      |    |     | |      | |      |
+------+    +-----+ +------+ +------+   
    |          |       |        |
    + X    ====+=======+========+==== 
    |                  |
+------+               +X
|STEP11|               |
|  *   |      ====+====+===+====
+------+          |        |
    |         +------+  +------+  
              |STEP15|  |STEP16| 
              |   *  |  |  *   |
              +------+  +------+ 
                  |        |

本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2014/07/18/plc-sfc.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。