首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeSys 2.3状态机

CodeSys 2.3状态机
EN

Stack Overflow用户
提问于 2015-12-26 21:32:57
回答 1查看 1.5K关注 0票数 1

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

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

1.用例逻辑SM -简单,仅根据if逻辑改变状态,一点也不灵活,很难维护。

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

3.状态设计模式SM -最佳选项,灵活,没有庞大的CASE语句,没有重复。

我正在尝试采用Adam Tornhill的C状态设计模式:http://www.adamtornhill.com/Patterns%20in%20C%202,%20STATE.pdf,但它很难从纯C语言转换为结构化文本。CodeSys支持函数块指针,但我不知道如何在ST中声明不完整的指针类型(这可能吗?):

代码语言:javascript
复制
/*C-style incomplite state pointer*/
typedef struct State* StatePtr;

struct State
{
   EventFunc exampleFunc1;
   EventFunc exampleFunc2;
}

{ST-style incomplite state pointer ???}
TYPE Sm_state_t :
STRUCT
State:POINTER TO ???;
END_STRUCT
END_TYPE
EN

回答 1

Stack Overflow用户

发布于 2016-06-08 18:34:09

我们只对我们的机器使用简单的CASE逻辑:

代码语言:javascript
复制
CASE iState OF
0:
    if x then
        iState := iState + 10;
    end_if

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

20:
etc..

很简单,但它能做这件事。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34471815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档