高速计数器计数值的读取与预设 1. 计数值的读取 高速计数器的当前计数值都保存在 HC 存储单元中,高速计数器 HSC0~HSC5 的当前值分别保存在 HC0~HC5 单元中,这些单元中的数据为只读 类型,即不能向这些单元写入数据。高速计数器计数值的读取如图 6-29 所示。当 I0.0 触点由断开转为闭 合时,上升沿 P 触点接通一个扫描周期,MOV_DW指令执行,将高速计数器 HSC0 当前的计数值(保存 HC0 单元中)读入并保存在 VD200 单元。 图 6-29高速计数器计数值的读取 2. 计数值的设置 每个高速计数器都用两个单元分别存放当前计数值(CV)和预设计数值 (PV),这两个值都是32 位。在高速计数器工作时,当 CV=PV 时会触发一 个中断。当前计数值可从 HC 单元中读取,预设值则无法直接读取。要将新 的CV 值或 PV 值载入高速计数器,必须先设置相应的控制字节和特殊存储 双字单元,再执行 HSC 指令以将新值传送到高速计数器。各高速计数器存放 CV 值和 PV 值的存储单元见表 6-33,
例如高速计 数器 HSC0 采用 SMD38 双字单元存放新 CV 值,采用 SMD42 双字单元存放 新 PV 值。 表6-33 各高速计数器存放 CV 值和 PV 值的存储单元 高速计数器计数值的设置如图 6-30 所示。当 I0.2 触点由断开转为闭合时,上升沿 P 触点接通一个扫描周期,首先第 1 个 MOV_DW 指令执行, 将新 CV 值(当前计数值)「100」送入SMD38 单元,然后第 2 个 MOV_DW 指令执行,将新 PV 值(预设计数值)「200」送入 SMD38 单元,接着高速计数器 HSC0 的控制字节中的 SM37.5、SM37.6 两位得电为 1,允许 HSC0 更新 CV 值和 PV 值,后 HSC指令执行,将新 CV 值和 PV 值载入高速 计数器HSC0。很多用惯了西门子S7-300/S7-400的工程师,刚换到西门子S7-1200时,会很不习惯定时器只有IEC定时器。其实呢,西门子S7-300/S7-400也有,只不过是在SFB中。 其实呢IEC定时器有诸多好处,比如定时时间长,易于嵌入FC/FB,没有数量限制,此外对于S7-300/S7-400设定时间还可以修改立即生效。对于西门子S7-1200/S7-1500,虽然在定时器功能块上修改不能立即生效,但是还是有解决方案的。 可以利用这个指令:
|
下例中把MD30改成MD1,MD34改成MD2(见下图)。我在仿真的时候在MD1中输入30.0,一按回车键出现11.8953。我按书上的地址来做就没问题了。我想问一下这与MD30改成MD1,MD34改成MD2有关系吗?这些地址可不可以随便改?
下面是我的答复:
程序中的地址是可以改动的,但是有一个根本性的原则必须遵守,即同一个地址同时只能用于一个用途,否则就好像人犯了重婚罪一样,会出大乱子!!并且这样的问题还不容易查出来。
MD1由MB1~MB4这4个字节组成,MD2由MB2~MB5这4个字节组成,MD1和MD2有3个字节(MB2~MB4)是重叠的,这样使用地址不出问题才怪!
MD2的值与程序的执行有关,而MD1中的MB2~MB4取决于MD2的值,因此在MD1中输入一个浮点数后,一按回车键MD1就会变为11.8953。
这个读者做实验用的项目没有几条指令,还不太容易出现地址重叠的问题,出现了也容易查找。在实际的项目中,为了避免重复使用地址,可以用STEP 7的参考数据中的赋值表来检查某个特定的地址是否已被使用,用交叉参考表来检查同一地址在什么地方被多次使用。
这个问题告诉我们,要想提高读程序和编写程序的水平,一定要打牢基础,像数据类型这一类基础知识,好能牢记于心。