F165_HighSpeedCounter_Cam

FP0H的CAM控制

此指令根据高速计数器的经过值,通过最多32个目标值,按照指定DUT中的参数执行CAM控制。对于每一个CAM输出,将以一对ON和OFF设置值设置目标值。

只要经过值与其中一个目标值匹配,就可以执行中断程序。

参数

输入

iHscChannel* (INT)

高速计数器通道:0–3

s_dutDataTable (ANY_DUT)

包含数据表的区域的开始地址

输出

dutBitOutputs (ANY_DUT)

包含输出字地址的区域的开始地址(WRWLWY),例如BOOL32_OVERLAPPING_DUT。根据使用diNumberOfTargetValuesAndOutputRelays设置的编号选择大小(16或32位)。

标注

  • 输入

    使用以下DUT作为样本,创建您自己的DUTF165_HighSpeedCounter_Cam_8_Values_OnOff_DUT

    可以在DUT中指定以下参数:

  • 输出

    • 如果目标值的数量在1–16的范围内,将使用一个字。如果目标值的数量在17–32的范围内,将使用两个字。

    • 示例:当输出地址设置为“内部继电器”、输出地址的起始字编号设置为“0”,且目标值的数量设置为“32”时,分配R0R1F作为CAM输出的地址。

    1.  (1) 当经过值达到目标值1时,R0转为ON或OFF。
    2.  (2) 当经过值达到目标值16时,RF转为ON或OFF。
    3.  (3) 当经过值达到目标值18时,R11转为ON或OFF。
    注释

    已指定输出继电器(Y)时,值同时输出至CPU输出和操作存储器。

  • 示例

    1.  (1) 经过值
    2.  (2) 目标值1;ON设置值:1000

      1000–4999 R100:ON

    3.  (3) 目标值;OFF设置值:5000
    4.  (4) 目标值2;ON设置值:7000

      7000–8999 R101:ON

    5.  (5) 目标值;OFF设置值:9000

最大目标值控制

  • 通过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位复位至FALSEsys_wHscOrPulseControlCode的位3设置为TRUE时,也会禁用最大目标值控制。当最大目标值控制停止时,保持CAM输出且高速计数器继续计数。

  • 激活指令前,复位或预置高速计数器经过值。

  • 执行指令期间对所用通道重写经过值可能会导致意外操作。

  • 如果在主程序中执行指令,请确保相邻目标值之间的最小时间跨度大于扫描时间。

  • 如果在中断程序中执行指令,请确保相邻目标值之间的最小时间跨度大于中断程序的最大执行时间。

  • 当使用复位输入或软件复位时,请确保目标值1是整数且³ 1。

  • 当最大目标值控制与复位输入或软件复位一起使用时,请小心不要同时使用它们。

  • 在高速计数器控制期间执行硬件复位或软件复位时,高速计数器经过值复位为0。分配至CAM输出的输出将为基于经过值0的输出。

  • 每次经过值达到各目标值时,也可启动中断程序INTn。若要执行此操作,中断控制指令ICTL应允许中断程序的激活。

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果通道编号或数据表的值超出允许范围
  • 如果尚未在系统寄存器中设置高速计数器
  • 如果目标值>最大目标值。

  • 如果目标值= 0

  • 如果目标值未以升序排列

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果通道编号或数据表的值超出允许范围
  • 如果尚未在系统寄存器中设置高速计数器
  • 如果目标值>最大目标值。

  • 如果目标值= 0

  • 如果目标值未以升序排列

使用FP0H的CH0示例

DUT

DUT F165_HighSpeedCounter_Cam_8_Values_OnOff_DUTFP Library中预定义,并且可以用作样本。

全局变量

在全局变量列表中,定义项目中所有POU都可以访问的变量。

POU头Copy code to clipboard

所有用于编程此函数的输入和输出变量已在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

POU本体

当变量bEnable设置为TRUE时,执行此函数。

LD本体Copy code to clipboard

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

ST本体Copy code to clipboard

if (bEnable) then
    F165_HighSpeedCounter_Cam(iHscChannel := 0, s_dutDataTable := dutF165FP0H_CH0,
                              dutBitOutputs => g_dutCamControl_WY0);
end_if;

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