西门子s7-200 plc高速计数功能的组成部分

作者:老电工时间:2015-10-30 05:37:03

一、西门子s7-200 plc高速计数功能的组成部分

西门子S7-200PLC集成有高速计数功能,高速计数是PLC的一项非常重要的功能,在工业领域中测量转动速度与周期一般都是用脉冲式仪器,例如旋转编码器。

这类仪器的频率远远大于PLC的采集频率,因此使用高速计数器显得尤为重要。

S7-200高速计数功能

一是输入地址,二是计数模式,按有无方向,有无复位,外部复位和软复位等进行分类。

三是相应的控制特殊功能寄存器,用于控制计数器的模式和预置值等。

1、高速计数器复位

高速计数的复位是使用计数器时非常重要的地方。由于外部器件例如编码器等,一般都会有累积误差,那么就需要定期的进行复位。

另外,编码器一些功能的实现也要求它具有复位功能。

2、高速计数器测量转速周期

使用编码器和高速计数器,定时中断等,可以进行旋转体的速度周期等数据的测量,此功能在对电机测量方面有广泛的应用。

二、西门子S7-200 PLC高速计数器指令的初始化的步骤

高速计数器指令的初始化的步骤
(1)用首次扫描时接通一个扫描周期的特殊内部存储器SM0.1去调用一个子程序,完成初始化操作。
因为采用了子程序,在随后的扫描中,不必再调用这个子程序,以减少扫描时间,使程序结构更好。

(2) 在初始化的子程序中,根据希望的控制设置控制字(SMB37、SMB47、SMB137、SMB147、SMB157),如设置SMB47=16#F8,则为:允许计数,写入新当前值,写入新预置值,更新计数方向为加计数,若为正交计数设为4×,复位和起动设置为高电平有效。

(3)执行HDEF指令,设置HSC的编号(0-5),设置工作模式(0-11)。如HSC的编号设置为1,工作模式输入设置为11,则为既有复位又有起动的正交计数工作模式。

(4)用新的当前值写入32位当前值寄存器(SMD38,SMD48,SMD58 ,SMD138, SMD148, SMD158)。如写入0,则清除当前值,用指令MOVD   0,SMD48实现。

(5)用新的预置值写入32位预置值寄存器(SMD42 ,SMD52, SMD62, SMD142 ,SMD152, SMD162)。如执行指令MOVD  1000,SMD52,则设置预置值为1000。若写入预置值为16#00,则高速计数器处于不工作状态。

(6)为了捕捉当前值等于预置值的事件,将条件CV=PV中断事件(事件13)与一个中断程序相联系。

(7)为了捕捉计数方向的改变,将方向改变的中断事件(事件14)与一个中断程序相联系。

(8)为了捕捉外部复位,将外部复位中断事件(事件15)与一个中断程序相联系。

(9)执行全局中断允许指令(ENI)允许HSC中断。

(10)执行HSC指令使S7-200对高速计数器进行编程。

(11)结束子程序。

三、西门子PLC S7-200高速计数器指令
 
高速计数器指令有两条:高速计数器定义指令HDEF、高速计数器指令HSC。指令格式如表1所示。
(1)高速计数器定义指令HDEF。指令指定高速计数器(HSCx)的工作模式。工作模式的选择即选择了高速计数器的输入脉冲、计数方向、复位和起动功能。每个高速计数器只能用一条“高速计数器定义”指令。
(2)高速计数器指令HSC。根据高速计数器控制位的状态和按照HDEF指令指定的工作模式,控制高速计数器。参数N指定高速计数器的号码。

西门子PLC S7-200高速计数器指令

四、西门子s7-200 plc高速计数器的使用方法

西门子S7-200 PLC高速计数器的使用方法(一)

掌握西门子S7-200PLC高速计数器的基本使用方法。

程序通过先设定计数器的值,本例中设定值为13;按设备启动按钮I0.1启动设备,运行后通过信号输入点I0.0进行计数,当计数当前值等于设定值13时,输出点断开,设备运行停止。I0.2为设备停止按钮。

程序如下:
 

LD     SM0.1
MOVB   16#C8, SMB37
HDEF   0, 0
MOVD   +0, SMD38
HSC    0

上述程序注解:
(1)对高数记数器HSC0初始化,写入控制字节(16#C8含义为:要求进行初始值设定;不装入预设值;运  行中不要求更改计数方向;计数器类型为增。)
(2)执行HDEF指令,进行高速计数器工作模式的选定设置(计数器为HSC0;模式为0)
(3)初始值设定:装载高数记数器初始值为0
(4)执行HSC指令,写入HSC0设置。
 

LDN    M14.0
EU
MOVB   16#C8, SMB37
MOVD   +0, SMD38
HSC    0
 

上述程序注解:当记速值达到要求值时,M14.0复位,高速计数器计数将复位为初始值,以备下次计数使用。
 

LDD<   HC0, +13
=      M14.0
 

上述程序注解:当计数器值小于13 时,M14.0始终处于置位状态。
 

LD     I0.1
O      Q0.0
AN     I0.2
A      M14.0
=      Q0.0
 

上述程序注解:I0.1为设备启动信号;I0.1为设备停止信号。高速计数器累计值达到13 时,设备运行停止。

西门子S7-200PLC高速计数器的使用方法(二)

本例程序设计的背景:(中断单点控制)

程序是通过一个板材自动定长剪切设备工作程序简单设计进行高数计数器和中断指令的使用。

工作要求为:启动设备,料滚电机工作带动板材进行送料,同时由计数器记录长度脉冲信号,当达到脉        冲预设值时,即板材设定长度时,中断指令发信号,停止料滚电机工作,执行压料、裁 剪,裁剪完成后,压料阀和料剪同时复位,料滚电机工作,进行下一次裁剪,周而复始。
 
程序拓展:可根据实际需要设计成钢板的定长裁剪;或流量的控制。

通过本程序学习,可加深高数计数器指令和中断指令的使用了解。I0.0为计数脉冲输入点。
 
主程序:
 

复制代码 代码示例:
Network 1 // 开机调用子程序,进行高数记速器的参数设定
LD     SM0.0
CALL   SBR0
Network 2 // 送料电机启动控制
LD     I1.1
O      T39
S      Q0.0, 1
Network 3 // 送料电机停止控制
LD     I1.0
R      Q0.0, 3
Network 4 // 压紧时间设置
LD     Q0.1
TON    T37, 15
Network 5
LD     T37
S      Q0.2, 1
Network 6 // 剪裁时间设置
LD     Q0.2
TON    T38, 10
Network 7 // 压板、裁刀复位时间设定
LD     T38
LD     M0.0
AN     T39
OLD
R      Q0.1, 1
TON    T39, 20
=      M0.0
R      Q0.2, 1
Network 8 // 程序调试计数器运行检测;实际中可删除。
LD     SM0.0
MOVD   HC0, VD30
 

 
子例行程序及注解:  
第一条为设定高数计数器参数:16#E8=11101000。含义是:启用计数器;可更新当前值即SMD38;允许更新设定值即SMD42;不更改计数方向。
 

复制代码 代码示例:
LD     SM0.1
MOVB   16#E8, SMB37  设定高数计数器参数;
MOVD   +0, SMD38     设定当前值SMD38=0
MOVD   +20, SMD42    设定预装值SMD42=20;
HDEF   0, 0      选用0#记速器连接12号中断事件
ATCH   INT0, 12
ENI     开中断;
HSC    0        开启0#计速器
 

 
中断例行程序注解:
 

复制代码 代码示例:
LD     SM0.0
R      Q0.0, 1      中断执行,Q0.0失电料滚停转
MOVB   16#E8, SMB37 重新设置高数计数器控制参数SMB37
MOVD   0, SMD38  清空高数计数器当前值SMD38。
HSC    0         执行高数计数器指令HSC0。
S      Q0.1, 1   中断执行,压板控制得电工作开始。

五、西门子S7-200 PLC高速计数编程的问题

旋转编码器(1000脉冲\转),用向导编的高速计数程序,程序已经在项目中使用了,但还有不少地方没搞清楚,向导完成后自动生成一个HSC0_INT,在主程序里我用SM0.1调用它进行初始化处理。在主程序我用MOV_DW 将HC0脉冲实时读到VD100中,但我感觉对脉冲VD100处理的有问题,我是用脉冲数除以普通定时器时间得出转速。同事和我讲要用中断处理读到的脉冲算速度,普通定时器受扫描周期影响(实际应用感觉速度误差不是很大),不清楚中断具体怎么用?

答:使用定时器的误差受到定时器分辨率,定时设定时间及程序扫描周期的影响,可以看看手册第六章中关于不同分辨率定时器差别的介绍。

在这些处理方法中,使用定时中断的做法应该是最准确的。

定时器受到程序扫描周期和定时器时基及指令使用的位置影响会产生误差,而定时中断不受这些影响,每次执行的时间间隔误差很小。

下面是软件的帮助中的一个时间中断的例子(100毫秒定时中断)
 

复制代码 代码示例:

NETWORK 1 // 主程序
// 在首次扫描时,调用子程序0
LD SM0.1
CALL SBR_0

NETWORK 1 // 子程序0
LD SM0.0
MOVB 100 SMB34 // 将间隔设为定时中断0至100毫秒
ATCH INT_0 10 // 将定时中断0(事件10)附加在INT_0上
ENI // 全局中断启用
 
NETWORK 1 // 中断0
// 每100毫秒读取AIW4数值
LD SM0.0
MOVW AIW4 VW100

本站仅提供信息发布平台,文章仅代表作者个人观点。

猜你喜欢

首页 > plc > 西门子plc