西门子S7-300高速计数详解(1)
在S7-300中有两种方法可以进行高速计数:方法1:带C的CPU集成有高速计数功能(本文主要介绍);方法2:扩展高速计数模块FM350。高速计数步骤:(1)硬件接线;(2)在硬件组态窗口开通高速计数功能,并设置参数;(3)在程序中调用高速计数功能块,并赋值参数。
测试说明: 在高速计数测试中采用西门子314C-2PN/DPCPU和24V增量编码器(转1圈发出500个脉冲)。CPU314C集成有4路高速计数器,分别是通道0、通道1、通道2和通道3;在测试中,我们使用通道0。
1、硬件接线 CPU与增量编码器接线如图1所示。 PLC系统给各个高速计数器通道分配了输入点,高速计数器输入点是固定的。在硬件组态窗口把默认输入输出分配地址改为从IB0和QB0开始的地址,这样通道0分配的前面3个输入点就是I0.0、I0.1、I0.2;其余通道依此类推;具体地址分配见附1。 该编码器转1圈,A相输出500个脉冲,B相输出500个脉冲,Z相输出1个脉冲。
高速计数的模式有两种:(1)脉冲+方向(2)双脉冲

2、硬件组态与参数设置 按照图1接好线缆之后,开始对PLC进行硬件组态。
(1)打开博途软件,创建新项目,项目命名“高速计数器20240703”,点击创建。创建完成后点击项目视图。

(2)点击添加新设备,选中控制器下的S7-300系列的314C-2 PN/DPCPU,选中该CPU的订货号后,点击确定。

(3)在设备组态里选择CPU,在下方属性-常规-计数中找到通道0,高速计数通道操作模式默认是未组态,改为连续计数。
操作模式说明:连续计数:计到上限(上溢)时跳到下限(下溢)开始计数;单次计数:计到上限时跳到下限等待新的触发;周期计数:从装载值开始计数,到可设置上限时跳到装载值重新计数;频率测量:测量出所接收脉冲的频率值;脉冲宽度调制:脉宽调制(PWM)高速输出。

(4)选择输入0的信号评估;一般选择旋转编码器模式,因为脉冲和方向模式在编码器发生抖动时容易发生误差,旋转编码器精度高一点。
脉冲和方向:当前的计数方式是脉冲+方向,I0.0接入脉冲信号(A相和B 相选1个接入),I0.1接入控制脉冲方向的信号;单倍频旋转编码器:I0.0和I0.1都接脉冲信号,编码器转1圈计数500个脉 冲;双倍频旋转编码器:I0.0和I0.1都接脉冲信号,编码器转1圈计数2*500个 脉冲;四倍频旋转编码器:I0.0和I0.1都接脉冲信号,编码器转1圈计数4*500个 脉冲。

(5)根据需要选择是否开通硬件门,如果勾选硬件门,则需要在I0.2接入信号,高速计数需要该信号为1;即软件门和硬件门开启才能进行高速计数。不勾选硬件门,则只要软件门开启就能计数。

(6)中止计数:软件门关闭再开启后,继续在以前的计数值上累加计数; 中断计数:软件门关闭再开启后,重新开始计数。

(7)勾选达到比较器值后,系统自动判别,当读取的脉冲值达到比较值后,系统自动执行硬件中断组织块OB40。可以在OB40中复位马达动作信号(利用计数功能块写入比较值)。

如果勾选了达到比较器值硬件中断,在操作参数中改一下比较值的数值,如果保持默认为0,那么程序刚启动脉冲计数值为0的时候会产生硬件中断。

(8)如果在步骤7中选择了达到比较器值硬件中断,则需要在中断选择中选择过程,如果还需要诊断,则选择诊断和过程。

(9)按照实际需要选择输出特征,例如选择了“计数器值>=比较值”,则在计数器值大于等于比较值时Q0.0输出为1;也可以设定输出值地址,设定过程见3(4)设定输出值。

(10)滞后类似于死区,避免脉冲值在比较值附近振动导致的不必要的动作。

(11)如果勾选计数方向反向,则增计数变为减计数,减计数变为增计数。

(12)脉冲计数值是DINT数据类型,计数范围是-2³¹ 至(+2³¹ -1)。如果计数值到达(2³¹ -1)再增计数,就会产生上溢;如果计数值达到-2³¹再减计数,就会产生下溢。若勾选上溢,那么出现上溢时会产生硬件中断;下溢同理。

3、PLC编程(1)打开组织块OB1,在工艺指令里找到COUNT功能块,鼠标左键选中COUNT功能块拖拽到程序段上,在跳出来的调用选型中点击确定。

(2)高速计数功能块引脚基本功能LADDR:作为高速计数通道的模块的I/O地址,如果输入输出地址不一 致,填写较低的地址(16进制);CHANNEL:通道编号,如果是通道0则写入0;
SW_GATE:启动/停止软件门,启动软件门后开始计数。
图15已填写了必须的引脚,具备了脉冲计数功能。

图16:脉冲计数功能块基本功能
JOB_ID:作业编号;
JOB_VAL:写作业的值。
这三个引脚是搭配使用的,在JOB_ID写入作业编号,即确定引脚的功能,在JOB_VAL写入数值,给JOB_REQ一个上升沿触发。
作业编号 | 说明 | |
W#16#0000 | 作业不起作用 | |
W#16#0001 | 写入计数值 | |
W#16#0002 | 写入加载值 | |
W#16#0004 | 写入比较值 | |
W#16#0008 | 写入滞后 | |
W#16#0010 | 写入脉冲宽度 | |
W#16#0082 | 读取加载值 | |
W#16#0084 | 读取比较值 | |
W#16#0088 | 读取滞后 | |
W#16#0090 | 读取脉冲宽度 |

(4)设定输出值CTRL_DO:允许/禁止输出;
SET_DO:手动输出;
STS_DO:输出状态。

(5)锁存值LATCHVAL:锁存值,当锁存输入有信号时,即把当前脉冲值存入锁存值。

(6)其他引脚功能STS_GATE:软件门的状态;
STS_STRT:硬件门的状态;
STS_LTCH:锁存输入的状态;
STS_C_DN:减计数的状态;
STS_C_UP:增计数的状态;JOB_DONE:为1则可以启动新作业;
JOB_ERR:为1则代表有故障;
JOB_STAT:故障编号。
(7)新建硬件中断组织块OB40 在OB40里编写程序,当脉冲计数到达比较值时,产生硬件中断,运行OB40组织块,可以在组织块中复位马达动作信号,使马达停止运动,实现了马达的定位。

如果勾选了多种硬件中断的情况,那么可以根据OB40里的局部变量判断硬件中断原因。 把组织块OB40里的LW6变量赋值给MW110,LD8变量赋值给MD112;通过监控MW110和MD112的值来判断产生硬件中断的原因。MW110是产生中断的模块的IO地址,不同原因产生的硬件中断再通过MD112的位来判断。

达到比较器值:




附1:高速计数器地址分配说明CPU312C集成有2路高速计数器(通道0、通道1);CPU313C集成有3路高速计数器(通道0、通道1、通道2);CPU314C集成有4路高速计数器(通道0、通道1、通道2、通道3)。