示例:读取并保存当前计数值
使用程序设置当前值和预设值
每个高速计数器内部都存储着一个 32 位当前值 (CV) 和一个 32 位预设值 (PV)。当前值 是计数器的实际计数值,而预设值是当前值达到预设值时选择用于触发中断的比较值。可 以按照上一部分所述使用 HC 数据类型读取当前值。不能直接读取预设值。要将新的当前 值或预设值载入高速计数器,必须对控制字节以及保存所需新当前值和/或新预设值的特 殊存储器双字进行设置,同时,必须执行 HSC 指令将新值传送到高速计数器中。下表列 出了用于保存所需新当前值和预设值的特殊存储器双字。
使用以下步骤将新当前值和/或新预设值写入高速计数器(可按任一顺序执行步骤 1 和 2):
1. 加载要写入相应 SM 新当前值和/或新预设值的值(请参见下表)。加载这些新值尚不 会影响高速计数器。
2. 设置或清除相应控制字节的相应位,指示是否更新当前值和/或预设值(位 x.5 代表预 设值,位 x.6 代表当前值)。调节这些位尚不会影响高速计数器。
3. 执行引用相应高速计数器编号的 HSC 指令。执行该指令可检查控制字节。如果控制字 节指定更新当前值、预设值或两者,则会将相应值从 SM 新当前值和/或新预设值位置 复制到高速计数器内部寄存器中。
说明
执行相应的 HSC 指令前,更改新当前值和新预设值的控制字节和 SM 位置不会影响高速 计数器。
在程序中附加 HSC 中断例程
当 HSC 的当前值等于加载的预设值时,所有计数器模式都支持中断事件。使用外部复位 输入的计数器模式支持在激活外部复位时中断。除模式 0 和模式 1 以外的所有计数器模 式均支持计数方向改变时中断。可单独启用或禁用这些中断条件。有关中断使用的完整讨 论,请参见中断指令 (页 302)部分。
HSC 状态字节
每个高速计数器的状态字节提供状态存储器位,用于指示当前计数方向以及当前值是否或 等于大于预设值。下表定义了每个高速计数器的这些状态位。
说明
只有在执行高速计数器中断例程时,状态位才有效。监控高速计数器状态的目的在于启用 对正在执行的操作有重大影响的事件的中断程序。
高速计数器的初始化顺序示例
HSC0 在以下初始化和操作顺序说明中被用作计数器。
● HSC0 和 HSC2 支持计数模式 (0, 1)、(3, 4)、(6, 7) 和 (9, 10)。
● HSC1 和 HSC3 仅支持计数模式 0。 初始化说明假设 CPU 刚刚被置于 RUN 模式,因此扫描存储器位为真。如果不是如 此,请记住在进入 RUN 模式后,只能为每台高速计数器执行一次 HDEF 指令。为高速计 数器第二次执行 HDEF 会生成运行时错误,并不会更改该计数器执行 HDEF 时计数 器的设置方式。
说明
虽然以下顺序分别显示如何更改方向、当前值和预设值,但您可以按照相同的顺序更改所 有数值或这些数值的任何组合,方法是相应设置 SMB37 的值,然后执行 HSC 指令。
初始化模式 0 和 1
下列步骤说明如何为带内部方向的单相向上/向下计数器(模式 0 和 1)初始化 HSC0。
1. 使用扫描存储器位调用执行初始化操作的子例程。由于使用子例程调用,后续扫 描不再调用子例程,因此可减少扫描执行时间并使程序结构更加合理。
2. 在初始化子例程中,根据所需的控制操作加载 SMB37。 例如:SMB37 = 16#F8 产生如下结果: – 启用计数器 – 写入新当前值 – 写入新预设值 – 将方向设置为加计数 – 将复位输入设为高电平有效
3. 将 HSC 输入设 0 且 MODE 输入设为下列值之一后执行 HDEF 指令: – 模式 0 表示无外部复位 – 模式 1 表示有外部复位
4. 用所需当前值加载 SMD38(双字大小值)(加载 0 可进行清除)。
5. 用所需预设值加载 SMD42(双字大小值)。
6. 为捕获当前值等于预设值事件,将 CV = PV 中断事件(事件 12)附加于中断例程,编 程中断。有关中断处理的完整详细信息,请参见讨论中断指令的部分。
7. 为捕获外部复位事件,将外部复位中断事件(事件 28)附加于中断例程,编程中断。
8. 执行全局中断启用指令 (ENI) 以启用中断。
9. 执行 HSC 指令,使 CPU 对 HSC0 编程。
10. 退出子例程。