存储高速计数器和脉冲输出控制代码的特殊数据寄存器,可通过系统变量sys_wHscOrPulseControlCode访问。(系统变量sys_wHscOrPulseControlCode对应于特殊数据寄存器DT90052。)
由高速计数器控制代码执行的操作
若要取消指令执行,将存储高速计数器控制代码(sys_wHscOrPulseControlCode)的数据寄存器的第3位设置为TRUE。然后高速计数器控制标志变为FALSE。若要重新启用执行高速计数器指令,请将第3位复位至FALSE。
X0高速计数器输入
当控制代码的第2位设置为TRUE时,无法使用系统寄存器中指定的复位输入进行硬件复位。即使复位输入已变为TRUE,也将继续计数。在第2位复位至0之前,禁用硬件复位。
计数输入控制操作
X0高速计数器输入
当控制代码的第1位设置为TRUE时,禁止计数且经过值保持为其当前值。当第1位复位至FALSE时,计数继续。
X0高速计数器输入
当控制代码的第0位设置为TRUE时,执行软件复位且经过值设置为0。经过值保持为值0,直到第0位复位至FALSE为止。
控制代码的第0~15位以4个为一组进行分配。每组中的位设置由十六进制数表示(例如00020000 0000 1001 = 16#2009)。
0:继续/1:取消
0:启用/1:禁用
0:允许/1:禁止
0:否/1:是
例如:16#2009
组 |
数值 |
描述 |
|
---|---|---|---|
IV |
2 |
通道编号: 2 |
|
III |
0 |
(固定) |
|
II |
0 |
(固定) |
|
I |
9 |
十六进制9对应于二进制1001 |
|
取消高速计数器指令(第3位):取消(第3位) |
1 |
||
复位输入:启用(第2位) |
0 |
||
计数:允许(第1位) |
0 |
||
将经过值复位至0:是(第0位) |
1 |
控制代码的第0-15位以4个为一组分配,每个组包含一个通道的设置。每组中的位设置由十六进制数表示(例如0000 0000 1001 0000 = 16#90)。
0:继续/1:取消
0:启用/1:禁用
0:允许/1:禁止
0:否/1:是
组 |
IV |
III |
II |
I |
通道 |
3 |
2 |
1 |
0 |
组 |
数值 |
描述 |
|
---|---|---|---|
IV |
0 |
– |
|
III |
0 |
– |
|
II |
9 |
通道编号: 1 十六进制9对应于二进制1001 |
|
取消高速计数器指令(第3位):取消(第3位) |
1 |
||
复位输入:启用(第2位) |
0 |
||
计数:允许(第1位) |
0 |
||
将经过值复位至0:是(第0位) |
1 |
||
I |
0 |
– |
将复位输入设置为TRUE,将经过值设置为0。使用复位输入设置(第2位)禁用系统寄存器中分配的复位输入。
所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。
VAR
bSoftwareReset: BOOL:=FALSE;
(*Activates the function*)
END_VAR
VAR CONSTANT
HSC_CH0_RESET_ELAPSED_VALUE: WORD:=16#0001;
(*Resets elapsed value of channel 0*)
HSC_CH0_CONTINUE: WORD:=16#0000;
(*Continues counting in channel 0*)
END_VAR
VAR
END_VAR
在步骤1中执行复位,并且在步骤2之后输入0以开始计数。仅复位不会开始计数。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,HSC_CH0_RESET_ELAPSED_VALUE,22,2,24,4,);
B(B_CONTACT,,bSoftwareReset,5,1,7,3,R);
B(B_VARIN,,HSC_CH0_CONTINUE,22,6,24,8,);
B(B_F,E_MOVE!,Instance,24,0,30,4,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,30,2,32,4,);
B(B_F,E_MOVE!,Instance,24,4,30,8,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,30,6,32,8,);
L(1,2,5,2);
L(7,2,8,2);
L(8,2,24,2);
L(8,6,24,6);
L(8,2,8,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if DF(bSoftwareReset) then
sys_wHscOrPulseControlCode:=HSC_CH0_RESET_ELAPSED_VALUE;
sys_wHscOrPulseControlCode:=HSC_CH0_CONTINUE;
end_if;
所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。
VAR
bSoftwareReset: BOOL:=FALSE;
(*Activates the function*)
END_VAR
VAR CONSTANT
HSC_CH1_RESET_ELAPSED_VALUE: WORD:=16#1001;
(*Resets elapsed value of channel 1*)
HSC_CH1_CONTINUE: WORD:=16#1000;
(*Continues counting in channel 1*)
END_VAR
VAR
END_VAR
在步骤1中执行复位,并且在步骤2之后输入0以开始计数。仅复位不会开始计数。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,HSC_CH1_RESET_ELAPSED_VALUE,24,2,26,4,);
B(B_CONTACT,,bSoftwareReset,5,1,7,3,R);
B(B_VARIN,,HSC_CH1_CONTINUE,24,6,26,8,);
B(B_F,E_MOVE!,Instance,26,0,32,4,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,32,2,34,4,);
B(B_F,E_MOVE!,Instance,26,4,32,8,,?DEN?D?AENO?C);
B(B_VAROUT,,sys_wHscOrPulseControlCode,32,6,34,8,);
L(1,2,5,2);
L(7,2,8,2);
L(8,2,26,2);
L(1,0,1,8);
L(8,6,26,6);
L(8,2,8,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if DF(bSoftwareReset) then
sys_wHscOrPulseControlCode:=HSC_CH1_RESET_ELAPSED_VALUE;
sys_wHscOrPulseControlCode:=HSC_CH1_CONTINUE;
end_if;