目标值匹配打开(高速计数器)
如果高速计数器的经过值与目标值匹配,则中断处理立即将指定的输出变为TRUE。
输入
高速计数器通道:
FP-S:0–3
FP-X R:0–11
FP-X T:0–7
FP0:0–3
F168_PulseOutput_Trapezoidal:0–3
F171_PulseOutput_Trapezoidal:0–5
在以下范围内为目标值指定一个32位数据值:
FP0、F168_PulseOutput_Trapezoidal:-838808–+8388607
FPS, FP-X, F171_PulseOutput_Trapezoidal: -2147483467–+2147483648
输出
当经过值与目标值匹配时变为TRUE的输出:
FP-S, FP0, F168_PulseOutput_Trapezoidal: Y0–Y7
FP-S(V3.1或更高版本),F171_PulseOutput_Trapezoidal:Y0–Y1F
FP-X:Y0–Y29F
目标值匹配打开控制的特征
目标值: 10000
当经过值与目标值匹配时,PLC输出变为TRUE。另外,高速计数器控制标志变为FALSE,且指令被禁用。
如果指定了尚未执行的输出,则仅设置或复位相应WY地址的内部存储器。
当经过值与目标值匹配时,将执行中断程序。任何已输入任务列表的中断都将自动启用。每个通道编号都会分配一个特殊的中断程序编号。
PLC类型 |
FP0、FP-e |
FPS、FP0H |
FP-X (继电器类型), FP-XH |
FP-X (晶体管类型) |
FP0R |
---|---|---|---|---|---|
中断0 |
通道0 |
通道0 |
通道0 |
通道0 |
通道0 |
中断1 |
通道1 |
通道1 |
通道1 |
通道1 |
通道1 |
中断2 |
通道2 |
通道2 |
|||
中断3 |
通道2 |
通道2 |
通道3 |
通道3 |
通道2 |
中断4 |
通道3 |
通道3 |
通道4 |
通道4 |
通道3 |
中断5 |
通道5 |
通道5 |
|||
中断6 |
通道6 |
通道6 |
通道4 |
||
中断7 |
通道7 |
通道7 |
通道5 |
||
中断8 |
通道8 |
||||
中断9 |
通道9 |
||||
中断10 |
|||||
中断11 |
通道A |
||||
中断12 |
通道B |
在系统寄存器中选择所需通道的高速计数器输入。
FP-X、FP0R: 当执行高速计数器指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)变为TRUE。只要控制标志为TRUE,就无法执行使用相同通道的其他高速计数器指令。
FP0, FP-e, FPS: 高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)被分配为相同的特殊内部继电器编号(例如R903A)。因此,当执行高速计数器指令或脉冲输出指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)和脉冲输出控制标志(例如sys_bIsPulseChannel0Active)均为TRUE。只要此标志为TRUE,就无法执行其他高速计数器指令或脉冲输出指令。
如果主程序和中断程序都包含同一通道的代码,请确保两者不同时执行。
若要将之前通过此指令设置为TRUE的PLC输出设置为FALSE,请使用RST或MOVE指令。
若要取消指令执行,将存储高速计数器控制代码(sys_wHscOrPulseControlCode)的数据寄存器的第3位设置为TRUE。然后高速计数器控制标志变为FALSE。若要重新启用执行高速计数器指令,请将第3位复位至FALSE。
在执行扫描时,高速计数器控制标志或脉冲输出控制标志的状态可能改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
在全局变量列表中,定义项目中所有POU都可以访问的变量。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR_EXTERNAL
out_0: BOOL:=FALSE;
(*output Y0 of PLC*)
END_VAR
VAR
start: BOOL:=FALSE;
(*start condition*)
END_VAR
当变量start设置为TRUE时,执行此函数。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F166_HighSpeedCounter_Set!,Instance,12,0,26,5,,?DEN?Hn_diHscChannel?Ds_diTargetValue?AENO?Cd_Y);
B(B_VARIN,,0,10,2,12,4,);
B(B_VARIN,,10,10,3,12,5,);
B(B_VAROUT,,out_0,26,2,28,4,);
B(B_CONTACT,,start,5,1,7,3,R);
L(1,2,5,2);
L(7,2,12,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(start) then
F166_HighSpeedCounter_Set(n_diHscChannel := 0,
s_diTargetValue := 10,
d_Y => out_0);
END_IF;