s1200 博图高速脉冲计数值没有变化_如何实现SIMATIC S7-1200的高速计数器(HSC)软件门控制?...

为了避免捕捉到不想要的计数脉冲,对于特定的应用是可以在运行时打开和关闭高速计数器的,例如那些由震动引起的干扰。 使用'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;

你可能感兴趣的:(s1200,博图高速脉冲计数值没有变化)