目标值匹配打开(高速计数器)
如果iChannel所指定高速计数器通道的经过值与目标值diTargetValue匹配,则由pYOutput指定的输出继电器立即变为TRUE。
输入
FPS: 0, 2
FP-X R: 0, 1
FP-X 16K C14T: 0, 1, 2
FP-X 32K C30T, C60T: 0, 1, 2, 3
FP0R: 0, 1, 2, 3
FP0: 0, 1
FP-e: 0, 1
在以下范围内为目标值指定一个32位数据值:
FP0, FP-e: -838808~+8388607
FPS, FP-X, FP0R: -2147483467~+2147483648
输出
Channel%d
和pYOuput.iOffset
的组合与全局变量确定的通道编号和输出的有效组合不匹配,则为TRUE这种非内联指令是高速计数器工具指令的一部分。有关内部使用指令的详细描述,请参阅:F167_HighSpeedCounter_Reset F166_HighSpeedCounter_Set
若要验证通道和Y输出的组合,编译器需要以下全局变量的名称模式:%sHsc_TargetValueMatch_Channel%d_Y%d_%s
始终在目标值匹配控制中将此模式用于全局变量。
Channel%d
必须是系统寄存器中启用的高速计数器通道编号
Y%d
必须是PLC支持的明确输出地址
FP-S, FP0, FP-e: |
Y0~Y7 |
FP-S(V3.1或更高版本),FP0R: |
Y0~Y1F |
FP-X: |
Y0~Y29F |
%s
是模式开头的可选描述符
_%s
是模式结尾的可选描述符
可选 | 固定模式 | 可选 |
g_b |
Hsc_TargetValueMatch_ChannelA_Y11F |
_MotorOn |
在全局变量列表中,定义项目中所有POU都可以访问的变量。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
VAR
bExecute: BOOL:=0;
iChannel1: INT:=1;
diTargetValue0: DINT:=15000;
bIsActive: BOOL:=FALSE;
diElapsedValue: DINT:=0;
bSet: BOOL:=FALSE;
bErrorSet: BOOL:=FALSE;
END_VAR
使用HscInfo_IsActive评估由 iChannel1指定的通道。如果在bSet检测到上升沿且bIsActive不为TRUE,将执行指令。通道编号与输出触点的组合将在全局变量g_bHsc_TargetValueMatch_Channel1_Y1_RedLamp_On中得到验证。当通道1的高速计数器达到目标值diTargetValue0后,输出Y1将被设置为TRUE。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_F,HscInfo_IsActive!,,9,0,18,3,,?DiChannel?C);
B(B_VARIN,,iChannel1,7,1,9,3,);
B(B_VAROUT,,bIsActive,18,1,20,3,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VAROUT,,bErrorSet,46,1,48,3,);
B(B_CONTACT,,bSet,2,1,4,3,R);
B(B_CONTACT,,bIsActive,6,1,8,3,N);
B(B_VARIN,,iChannel1,31,2,33,4,);
B(B_VARIN,,diTargetValue0,31,4,33,6,);
B(B_F,GetPointer!,,26,3,33,5,,?D?C);
B(B_VARIN,,g_bHsc_TargetValueMatch_Channel1_Y1_RedLamp_On,24,3,26,5,);
B(B_F,Hsc_TargetValueMatch_Set!,,33,0,46,6,,?DbExecute?DiChannel?DpYOutput?DdiTargetValue?CbError);
L(1,2,2,2);
L(4,2,6,2);
L(8,2,33,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bIsActive:=HscInfo_IsActive(iChannel1);
Hsc_TargetValueMatch_Set(bExecute := DF(bSet) AND NOT bIsActive,
iChannel := iChannel1,
pYOutput := GetPointer(g_bHsc_TargetValueMatch_Channel1_Y1_RedLamp_On),
diTargetValue := diTargetValue0,
bError => bErrorSet);