输入脉冲测量
此指令测量指定计数周期和脉冲周期内的输入脉冲数量。
输入
高速计数器通道:0–5
计数周期[ms]:
1–5000 (1ms–5s)。
计数周期数:1–5
脉冲周期测量单位
0:不测量脉冲周期
1:脉冲周期以ms为单位进行测量
2:脉冲周期以ms为单位进行测量
3:脉冲周期以ms和ms为单位进行测量
脉冲周期测量的超时值[ms]:
0:无超时
1: 100ms
2: 200ms
3: 300ms
4: 500ms
输出
每个计数周期的平均脉冲数(计数周期内的脉冲数/计数周期数)
脉冲周期m
脉冲周期[ms]
对于输入脉冲测量,必须指定通道编号、计数周期(1ms~5s)和计数周期数(1~5)。这些参数用于计算每个计数周期的平均输入脉冲数。
可以指定脉冲周期测量的单位([ms]、[ms]或两者)。
如果测量以ms为单位,在执行此指令后立即测量并输出脉冲周期。最大可测量约174.4ms。
如果测量以ms为单位,每次测量后都会更新脉冲周期值。最大可测量约49.7天。可以指定超时值,之后如果测量未完成,则测量的脉冲周期设置为-1。
在开始指令后的第一个计数周期内,测量的脉冲周期设置为-1,直到达到指定的计数周期数。
如果脉冲周期长于可测量范围或如果测量尚未完成,则测量的脉冲周期设置为-1。
在系统寄存器中选择所需通道的高速计数器输入。
使用此指令将脉冲测量的执行条件保持为TRUE。
若要停止测量,将执行条件变为FALSE。
当执行高速计数器指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)变为TRUE。只要控制标志为TRUE,就无法执行使用相同通道的其他高速计数器指令。
此指令最多可以在两个通道上同时执行。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
如果高速计数器通道已被另一个高速计数器或脉冲输出指令使用
如果使用的通道数为3或以上
如果高速计数器通道已被另一个高速计数器或脉冲输出指令使用
如果使用的通道数为3或以上
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
bStartMeasurement: BOOL:=FALSE;
diNumberOfPulses: DINT:=0;
diPulsePeriodTime_μs: DINT:=0;
diPulsePeriodTime_ms: DINT:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_F,F178_HighSpeedCounter_Measure!,Instance,25,1,53,9,,?DEN?Ds1_iHscChannel?Ds2_NumberOfPulses_iPeriodTime_ms?Ds1_NumberOfPulses_iNumberOfPeriods?Ds1_PulsePeriod_iMeasurementMethod?Ds1_PulsePeriod_iTimeoutValueOf1msUnitOutput?AENO?Ad_NumberOfPulses_diAverage?Ad_PulsePeriod_diTime_μs?Ad_PulsePeriod_diTime_ms);
B(B_VARIN,,0,23,3,25,5,);
B(B_VARIN,,10,23,4,25,6,);
B(B_VARIN,,5,23,5,25,7,);
B(B_VARIN,,SYS_F178_HSC_MEASUREMENT_μs_ms,23,6,25,8,);
B(B_VARIN,,0,23,7,25,9,);
B(B_VAROUT,,diNumberOfPulses,53,3,55,5,);
B(B_VAROUT,,diPulsePeriodTime_μs,53,4,55,6,);
B(B_VAROUT,,diPulsePeriodTime_ms,53,5,55,7,);
B(B_CONTACT,,bStartMeasurement,9,2,11,4,);
L(1,3,9,3);
L(11,3,25,3);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (bStartMeasurement) then
F178_HighSpeedCounter_Measure(s1_iHscChannel := 0,
s2_NumberOfPulses_iPeriodTime_ms := 10,
s1_NumberOfPulses_iNumberOfPeriods := 5,
s1_PulsePeriod_iMeasurementMethod := SYS_F178_HSC_MEASUREMENT_μs_ms,
s1_PulsePeriod_iTimeoutValueOf1msUnitOutput := 0,
d_NumberOfPulses_diAverage => diNumberOfPulses,
d_PulsePeriod_diTime_μs => diPulsePeriodTime_μs,
d_PulsePeriod_diTime_ms => diPulsePeriodTime_ms);
END_IF;