繁体   English   中英

结构化文本中的 C 样式 function?

[英]C style function in structured text?

我们公司购买了许多 Beckhoff PLC 中的第一台,我目前正在开发 state 机器。

What I typically do in C is using a switch case in which every case calls a function, the state function of that particular state. 此 state function 完成后返回 true。 开关盒在 state function 返回 true 之后选择新的 state

一个简短的例子:

// state functions
uint8_t fooF() {
    //do foo stuff
    if( /*whateevr*/ ) return 1;
    return 0;
}

uint8_t barF() {
    // do bar stuff
    if( /*whateevr*/ ) return 1;
    return 0;
}    

uint8_t foobarF() {
    // do foobar stuff
    if( /*whateevr*/ ) return 1;
    return 0;
}

// state machine 
void stateMachine() {
    switch( state ) {
        case foo: 
        if( fooF() ) {
            nextState( bar); 
        }
        break;

        case bar: 
        if( barF() ) {
            nextState( foobar); 
        }
        break;

        case foobar: 
        if( foobarF() ) {
            if( /* flow condition */ ) { nextState( foo ); 
            else                       { nextState( bar ); 
        }
        break;
    }
}

这我想尽可能地在 ST 中重现这种结构。

我还没有找到如何在 ST 中制作简单的 function。 我知道我可以使用 POU 制作一个新的 function 块。 但这给我带来的问题是该函数被放在不同的文件中。 I want the function block to be in the same file as my state machine as I demonstrated in the C style state machine I showed you.

我可以这样做吗? 如果是这样,怎么办?

巴斯

编辑:这是生成的 function 块代码:

FUNCTION_BLOCK fillBufferF
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR

如果您使用的是 Twincat 3,您可以向您的 FB 添加方法以在您的 switch case 中调用。

否则,如果您使用的是 Twincat 2,则无法将方法添加到您的 FB,因为 Twincat 2 不支持 object 面向编程。

您可以创建要添加到项目中的函数(不仅是 Function 块)。 然后,您可以将您的特定功能与 state 机器 function 块一起分组到一个文件夹中。

如果您正在使用 Twincat 2,您可以做的另一件事是将操作添加到您的 Function 块。 它们与 Twincat 3 方法不同,因为没有自己的方法堆栈。

您不能在 Action 中声明变量,也不能从它们返回值,但如果您想更好地组织 Function 块的代码,它们会派上用场。

您不能在 Function 块调用中声明您的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM