Design patterns CodeSys 2.3状态机

Design patterns CodeSys 2.3状态机,design-patterns,state-machine,codesys,state-pattern,Design Patterns,State Machine,Codesys,State Pattern,在IEC61131-3/CodeSyS v2.3中,使状态机(SM)高效灵活的最佳方法是什么? 在CodeSys V2.3上是否有SM实现的好例子 据我所知,SM有三种不同类型: 1.案例逻辑SM-简单,仅根据if逻辑更改状态,完全不灵活,难以维护 2.表驱动SM-更好,但没有函数指针,需要额外的条件指令来基于当前状态运行某些操作 3.状态设计模式SM-最佳选择,灵活,无重大案例陈述,无重复 我正在尝试采用Adam Tornhill的C状态设计模式: 但是从纯C到结构化文本的翻译是相当困难的。

在IEC61131-3/CodeSyS v2.3中,使状态机(SM)高效灵活的最佳方法是什么? 在CodeSys V2.3上是否有SM实现的好例子

据我所知,SM有三种不同类型:

1.案例逻辑SM-简单,仅根据if逻辑更改状态,完全不灵活,难以维护

2.表驱动SM-更好,但没有函数指针,需要额外的条件指令来基于当前状态运行某些操作

3.状态设计模式SM-最佳选择,灵活,无重大案例陈述,无重复

我正在尝试采用Adam Tornhill的C状态设计模式: 但是从纯C到结构化文本的翻译是相当困难的。 CodeSys支持函数块指针,但我不知道如何在ST中声明不完整的指针类型(可能吗?)


我们的机器只使用简单的案例逻辑:

CASE iState OF
0:
    if x then
        iState := iState + 10;
    end_if

10:
    if y then
        iState := iState + 10;
    end_if

20:
etc..
非常简单,但它确实起作用

在CODESYS中不可能使用不完整的指针。唯一的选择是创建一个指向字节的指针,然后在需要使用该指针时,创建一个指向要使用的数据结构的新指针,并传递地址

CASE iState OF
0:
    if x then
        iState := iState + 10;
    end_if

10:
    if y then
        iState := iState + 10;
    end_if

20:
etc..