为了避免捕捉到不想要的计数脉冲,对于特定的应用是可以在运行时打开和关闭高速计数器的,例如那些由震动引起的干扰。 使用'HscGate' FB可以实现S7-1200高速计数执行的门控制。
在OB1中调用FB,如下图所示:
管脚定义如下表所示:
'hscValue'和'hscHwId'输入可以从CPU属性里高速计数器的设置中获取。
程序流程图
在“enable”给一个下降沿信号,将高速计数器的当前值传输到计数值 'newCV'中。
在“enable”给一个上升沿信号,在SFB 'CTRL_HSC'的帮助下将高速计数器值设置成'newCV'的值。
在Reset指令('reset')下 ,在传送到高速计数器之前将计数值'newCV'置0。
当'enable' = TRUE,高速计数器的数值被传到'countValue' 输出。
因此,在使用'enable' = TRUE时,高速计数器的计数值与'countValue'输出值完全相同。
只有在'enable' = FALSE时高速计数器值与'countValue' 输出值不相同。
这样,当给高速计数器做事件组态时,'enable'输入变量的状态也要考虑在内。
下面看看FB块中的程序:
接口设置:
FB块中的程序如下:
// 检测到enable下降沿信号,停止counter。
#instStopTrig(CLK := #enable,
Q => #statStop);
// 当停止时存储HSC数值
IF (#statStop = TRUE) THEN
#statStopValue := #hscValue;
END_IF;
// 当enable检测到上升沿开始计数
#instStartTrig(CLK:=#enable,
Q=>#statStart);
// 复位HSC
IF (#reset = TRUE) THEN
#statStopValue := 0;
#countValue := 0;
END_IF;
// 当开始,设置HSC的值为停止时的值
#instCtrlHsc(HSC := #hscHwId,
CV := #statStart OR #reset,
NEW_CV := #statStopValue,
STATUS => #status);
// 复位'reset'
IF (#reset = TRUE) THEN
#reset := FALSE;
END_IF;
// 当它使能,则将HSC的值送到counter。m
IF (#enable = TRUE) THEN
#countValue := #hscValue;
END_IF;
联系客服