如何用ST语言写一个多功能开关控制程序(附赠案例程序)
在项目开发过程中,难免会遇到门襟(安全门)控制、机器状态切换、定时任务、用户界面交互等等情况,那么编写一个控制功能块就能方便地解决问题。控制要求:
[*]边缘触发与状态切换:当Mode变量为FALSE时,如果IN输入引脚检测到一个上升沿(即从FALSE变为TRUE),输出Q将直接被设置为TRUE。而当Mode为TRUE时,同样的上升沿将导致Q输出的状态发生切换,即从TRUE变为FALSE或反之。
[*]设置信号:一旦SET输入变量被置为TRUE,输出Q将立即被设置为TRUE。
[*]超时自动复位:如果Timeout变量被赋予了一个非零的时间值,那么在该时间值到期后,输出Q将自动被复位为FALSE。
[*]复位信号:RST输入变量一旦被置为TRUE,输出Q将立即被置为FALSE。
功能块程序://变量声明
VAR_INPUT CONSTANT
Mode : BOOL;
Timeout : TIME;
END_VAR
VAR_INPUT
IN,SET,RST : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
Ton1 : TON;
Edge: BOOL;
END_VAR
// 如果Ton1.Q,则将Q设置为FALSE
IF Ton1.Q THEN
Q := FALSE;
END_IF;
// 如果RST(复位)信号为1,则将Q设置为FALSE
IF RST THEN
Q := FALSE;
ELSIF SET THEN// 如果SET信号为1,则将Q设置为TRUE
Q := TRUE;
//如果IN为1且Edge为0,则根据Mode的值来切换或设置Q的值
ELSIF IN AND NOT Edge THEN
IF Mode THEN
q := NOT Q;
ELSE
q := TRUE;
END_IF;
END_IF;
// 更新Edge变量的值为IN的当前值,用于下一次检测IN的变化
Edge := IN;
// 如果timeout的值大于0秒(即,如果设置了超时时间),则调用Ton1函数,将Q的值作为输入,并设置超时时间
IF Timeout > T#0S THEN
Ton1(in := Q, PT := Timeout);
END_IF;
上述功能块适用于需要根据外部信号变化来控制输出状态的场景,特别是在需要边缘触发、状态切换、超时自动复位和快速响应复位信号的控制逻辑中。
页:
[1]