我们公司购买了许多 Beckhoff PLC 中的第一台,我目前正在开发状态机。
我通常在 C 中做的是使用 switch case,其中每个 case 调用一个函数,即该特定状态的状态函数。此状态函数在完成时返回 true。状态函数返回 true 后 switch-case 选择新状态
一个简短的例子:
// 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 中创建一个简单的函数。我知道我可以使用 POU 来制作一个新的功能块。但这给我带来的问题是该函数被放在不同的文件中。我希望功能块与我在向您展示的 C 风格状态机中演示的状态机位于同一个文件中。
我可以这样做吗?如果是这样,怎么办?
巴斯
编辑:这是生成的功能块代码:
FUNCTION_BLOCK fillBufferF
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR