S7
这篇文章我们以一个实际例程来介绍S7-1200高速计数器(HSC)的组态和编程。
假设我们现场需要对流过管路的水的体积进行计量,管路中安装有体积流量计,它以脉冲的形式给PLC发送信号,项目中使用的PLC为1214C/DC/DC/DC。
首先来确定流量计与PLC之间的电气接线。考虑到脉冲的频率不超过100kHz,可以使用1214C的HSC1来测量(HSC的介绍可参考上一篇文章)。下图最左边一栏是HSC1的端子定义:
其中I0.0(DIa.0)是脉冲的输入通道,I0.1是信号方向的通道,I0.3是外部复位信号的通道。由于该信号使用内部输入,不需要方向和外部复位,故I0.1和I0.3可以不连接。传感器的接线示意图如下:
接下来进行硬件配置,在博途V13的项目管理器中,找到项目文件,双击'设备配置(Device configuration)',
在右侧的硬件配置窗口中,选中CPU模块,
在其属性中,点击'高速计数器(High speed counter)'-'HSC1',在其'通用(General)',属性中选中'使能高速计数器(Enable the high speed counter)';这样高速计数器HSC1的功能就激活了;
接下来设置高速计数器的模式和工作方式:
在'计数类型(Type of counting)'中有两种可选:计数(Counting)和频率测量(Frequency),这里选择'计数(Counting)';
在'Operating phase'中选择'单相(Single phase)';
在'计数方向依据(Counting direction is specified by)'中,由于没有外部方向的输入信号,所以选择'用户程序内部控制(User program-internal control)';
在'初始计数方向(Initial counting direction)'中选择'向上计数(Count up)';
接下来设置初始值和复位值:
'Initial counter value'用来设置计数器的初始值;
'Initial reference value'用来设置计数器的最大值,计数到该数值后计数器将会复位;也可以勾选'使用外部输入进行复位(Use external reset value)'进行复位,这样的话需要在I0.3接外部复位信号;
接下来对地址进行配置,可以使用默认的地址:
计数器的数值会保存到输入过程映像区的ID1000中,程序中通过读取ID1000的值就能获取脉冲的数,如果要直接访问计数器的物理地址,可以使用'ID1000:P'。
若此时将配置下载到CPU,高速计数器已经可以工作了。如果你需要在高速计数器复位时触发某个事件,可以在'事件配置(Event Configuration)'中勾选'当计数值等于参考值时触发中断(Generate interrrupt for counter value equals to reference)':
给事件定义一个名称,然后在'硬件中断(Hardware interrpt)'中打开添加硬件中断组织块对话框;
这样当计数器到达复位条件时,就会触发硬件中断,调用该中断组织块,执行其内部的程序。
高速计数器的硬件配置到这里就完成了,下面我们介绍一个指令'CTRL_HSC',使用该指令可以在程序中修改硬件配置中的参数。在博途V13的指令列表中,找到'工艺指令(Technology)'-'计数器(Counting)'-'CTRL_HSC',将该指令拖到程序块中;
该指令需要一个背景DB块,在添加的时候系统会提示。可以使用默认值,也可以自己命名,如下图;
添加完成后,指令在数据块中如下图:
其中参数'HSC'为高速计数器的编号,本例程使用的HSC1,所以写作'w#16#1';
'DIR'是使能外部方向信号,这里使用'False';
'CV'是使能新的计数器初始值,如果有需要,将该参数要设置成'True',然后在'NEW_CV'中输入你想设置的值,比如'L#5'。默认为'False';
'RV'是使能新的计数器参考值,,如果有需要,将该参数设置成'True',然后在'NEW_RV'中输入你想设置的值,比如'L#3000'。默认为'False';
'PERIOD'使能一个新的计数周期;
'BUSY'和'STATUS'为输出值,表示系统是否繁忙及当前的状态。
好了,关于S7-1200高速计数器的组态和编程我们就介绍到这里了。如果你对高速计数器的工作原理及硬件配置不清楚,可以参考上一篇文章:S7-1200硬件篇之高速计数器(HSC)。