[英]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.