F178_HighSpeedCounter_Measure

输入脉冲测量

此指令测量指定计数周期和脉冲周期内的输入脉冲数量。

参数

输入

s1_iHscChannel (INT)

高速计数器通道:0–5

s2_NumberOfPulses_iPeriodTime_ms (INT)

计数周期[ms]

1–5000 (1ms–5s)

s1_NumberOfPulses_iNumberOfPeriods (INT)

计数周期数:1–5

s1_PulsePeriod_iMeasurementMethod (INT)

脉冲周期测量单位

0:不测量脉冲周期

1:脉冲周期以ms为单位进行测量

2:脉冲周期以ms为单位进行测量

3:脉冲周期以msms为单位进行测量

s1_PulsePeriod_iTimeoutValueOf1msUnitOutput (INT)

脉冲周期测量的超时值[ms]

0:无超时

1: 100ms

2: 200ms

3: 300ms

4: 500ms

输出

d_NumberOfPulses_diAverage (DINT)

每个计数周期的平均脉冲数(计数周期内的脉冲数/计数周期数)

d_PulsePeriod_diTime_ms (DINT)

脉冲周期m

d_PulsePeriod_diTime_ms (DINT)

脉冲周期[ms]

输入脉冲测量的特征

  • 对于输入脉冲测量,必须指定通道编号、计数周期(1ms~5s)和计数周期数(1~5)。这些参数用于计算每个计数周期的平均输入脉冲数。

  • 可以指定脉冲周期测量的单位([ms][ms]或两者)。

  • 如果测量以ms为单位,在执行此指令后立即测量并输出脉冲周期。最大可测量约174.4ms。

  • 如果测量以ms为单位,每次测量后都会更新脉冲周期值。最大可测量约49.7天。可以指定超时值,之后如果测量未完成,则测量的脉冲周期设置为-1

  • 在开始指令后的第一个计数周期内,测量的脉冲周期设置为-1,直到达到指定的计数周期数。

  • 如果脉冲周期长于可测量范围或如果测量尚未完成,则测量的脉冲周期设置为-1

通用编程信息

  • 在系统寄存器中选择所需通道的高速计数器输入。

  • 使用此指令将脉冲测量的执行条件保持为TRUE

  • 若要停止测量,将执行条件变为FALSE

  • 当执行高速计数器指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)变为TRUE。只要控制标志为TRUE,就无法执行使用相同通道的其他高速计数器指令。

  • 此指令最多可以在两个通道上同时执行。

  • 如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。

  • 在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果通道编号或数据表的值超出允许范围
  • 如果尚未在系统寄存器中设置高速计数器
  • 如果高速计数器通道已被另一个高速计数器或脉冲输出指令使用

  • 如果使用的通道数为3或以上

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果通道编号或数据表的值超出允许范围
  • 如果尚未在系统寄存器中设置高速计数器
  • 如果高速计数器通道已被另一个高速计数器或脉冲输出指令使用

  • 如果使用的通道数为3或以上

示例

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。

	VAR
		bStartMeasurement: BOOL:=FALSE;
		diNumberOfPulses: DINT:=0;
		diPulsePeriodTime_μs: DINT:=0;
		diPulsePeriodTime_ms: DINT:=0;
	END_VAR

LD本体

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

ST本体

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;

最后更新日期: 此页面上的反馈松下热线