FP0H的CAM控制
此指令根据高速计数器的经过值,通过最多32个目标值,按照指定DUT中的参数执行CAM控制。对于每一个CAM输出,将以一对ON和OFF设置值设置目标值。
只要经过值与其中一个目标值匹配,就可以执行中断程序。
输入
高速计数器通道:0–3
包含数据表的区域的开始地址
输出
包含输出字地址的区域的开始地址(WR、WL或WY),例如BOOL32_OVERLAPPING_DUT。根据使用diNumberOfTargetValuesAndOutputRelays设置的编号选择大小(16或32位)。
输入
使用以下DUT作为样本,创建您自己的DUT:F165_HighSpeedCounter_Cam_8_Values_OnOff_DUT
可以在DUT中指定以下参数:
控制代码
输出的字地址
目标值数量
(F165_HighSpeedCounter_Target_Values_OnOff_DUT中的ON/OFF设置值)
最大目标值
设置范围:1–2147483646 (16#1–16#7FFFFFFE)
输出
如果目标值的数量在1–16的范围内,将使用一个字。如果目标值的数量在17–32的范围内,将使用两个字。
示例:当输出地址设置为“内部继电器”、输出地址的起始字编号设置为“0”,且目标值的数量设置为“32”时,分配R0至R1F作为CAM输出的地址。
已指定输出继电器(Y)时,值同时输出至CPU输出和操作存储器。
示例
1000–4999 R100:ON
7000–8999 R101:ON
通过F165_HighSpeedCounter_Cam,能以指定的最大目标执行控制。启用/禁用最大目标值控制和最大目标值的设置在数据表中指定。
数据表因目标值数量和指定最大目标值设置而异,范围为12至138字。
仅当dwCamControlCode中的目标值控制设置为16#0010(采用最大值)时,数据表结尾的最大目标值有效。当目标值控制设置为16#0000(不采用最大值)时,可以省略此设置。
启用 |
禁用 |
||
---|---|---|---|
计数范围 |
0至目标值 |
最小负值至最大正值 |
|
超出计数范围时的操作 |
递增计数: |
当经过值超出目标值时,设置为0。 |
当经过值超出最大正值时,返回最小负值。 |
递减计数: 数据表的指针从最后一个目标值移动至目标值1。 |
当经过值降到0以下时,设置为目标值。 |
当经过值降到最小负值以下时,返回最大正值。 |
输出因ON设置值和OFF设置值而异。
OFF设置值>ON设置值
当经过值大于或等于ON设置值且小于OFF设置值时,相应输出位打开。当经过值超出范围时,相应位关闭。
递增计数: |
递减计数: |
---|---|
OFF设置值(1)>ON设置值(2) |
ON设置值>OFF设置值
当经过值小于ON设置值且大于或等于OFF设置值时,相应输出位关闭。当经过值超出范围时,相应位打开。
递增计数: |
递减计数: |
---|---|
ON设置值(1)>OFF设置值(2) |
ON设置值=OFF设置值
当经过值超出范围时,相应位关闭。
递增计数: |
递减计数: |
---|---|
ON设置值(1)=OFF设置值(2) |
在系统寄存器中选择所需通道的高速计数器输入。
当执行高速计数器指令时,所用通道的高速计数器控制标志(例如sys_bIsHscChannel0ControlActive)变为TRUE。只要控制标志为TRUE,就无法执行使用相同通道的其他高速计数器指令。
此指令最多可以在两个通道上同时执行。
若要取消指令执行,将存储高速计数器控制代码(sys_wHscOrPulseControlCode)的数据寄存器的第3位设置为TRUE。然后高速计数器控制标志变为FALSE。若要重新启用执行高速计数器指令,请将第3位复位至FALSE。将sys_wHscOrPulseControlCode的位3设置为TRUE时,也会禁用最大目标值控制。当最大目标值控制停止时,保持CAM输出且高速计数器继续计数。
激活指令前,复位或预置高速计数器经过值。
执行指令期间对所用通道重写经过值可能会导致意外操作。
如果在主程序中执行指令,请确保相邻目标值之间的最小时间跨度大于扫描时间。
如果在中断程序中执行指令,请确保相邻目标值之间的最小时间跨度大于中断程序的最大执行时间。
当使用复位输入或软件复位时,请确保目标值1是整数且³ 1。
当最大目标值控制与复位输入或软件复位一起使用时,请小心不要同时使用它们。
在高速计数器控制期间执行硬件复位或软件复位时,高速计数器经过值复位为0。分配至CAM输出的输出将为基于经过值0的输出。
每次经过值达到各目标值时,也可启动中断程序INTn。若要执行此操作,中断控制指令ICTL应允许中断程序的激活。
如果目标值>最大目标值。
如果目标值= 0。
如果目标值未以升序排列
如果目标值>最大目标值。
如果目标值= 0。
如果目标值未以升序排列
DUT F165_HighSpeedCounter_Cam_8_Values_OnOff_DUT在FP Library中预定义,并且可以用作样本。
在全局变量列表中,定义项目中所有POU都可以访问的变量。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
bEnable: BOOL:=FALSE;
dutF165FP0H_CH0: F165_HighSpeedCounter_Cam_8_Values_OnOff_DUT;
END_VAR
VAR_EXTERNAL
g_dutCamControl_WY0: BOOL32_OVERLAPPING_DUT;
END_VAR
当变量bEnable设置为TRUE时,执行此函数。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,F165_HighSpeedCounter_Cam!,,14,0,28,5,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,2,14,4,);
B(B_VAROUT,,g_dutCamControl_WY0,28,2,30,4,);
B(B_VARIN,,dutF165FP0H_CH0,12,3,14,5,);
L(1,0,1,6);
L(1,2,5,2);
L(7,2,14,2);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEnable) then
F165_HighSpeedCounter_Cam(iHscChannel := 0, s_dutDataTable := dutF165FP0H_CH0,
dutBitOutputs => g_dutCamControl_WY0);
end_if;