说说200 smart高速计数器的计数1
上文说到高速计数器使用的基本组态方式,可以采用向导方式或者直接编程方式,而采用向导方式更适合初次使用西门子200 smart高速计数器的组态和使用,实际上这2种编写方式均围绕着设置控制字节SMB37,初始值SMD38,预设值SMD42,状态字节SMB36仅仅起到监视高速计数器的实际运行状态。因为是高速计数器的工作于高速状态(相对于普通数字量输入),所以,有若干个高速中断供用户方便调用。
其中,(当前值=预设值)中断事件号12对应于高速计数器HSC0;中断事件号13对应于高速计数器HSC1;中断事件号16对应于高速计数器HSC2;中断事件号32对应于高速计数器HSC3。(方向改变)中断事件号27对应于高速计数器HSC0;中断事件号17对应于高速计数器HSC2。(外部复位)中断事件号28对应于高速计数器HSC0;中断事件号18对应于高速计数器HSC2。
在实际应用时,高速计数器相对于其它功能的组态,还是比较容易理解的,组态高速计数器主要是对控制字节SMB37的理解。
控制字节SMB37:(HSC0)
注:HSC1:SM47.0~SM47.2未定义;HSC3:SM137.0~SM137.2未定义
当前值SMD38(HSC0):实际反映高速计数器计数值
预设值SMD42(HSC0):
强调需要高速计数器计数到的数值,允许用户多次赋预设值,如当前值等于预设值中断里重新赋值。
状态字节SMB36(HSC0):
另外,对于HSC1、HSC2、HSC3所对应的控制字节、状态字节、当前值、预设值的地址区编排:SMB47、SMB46、SMD48、SMD52;SMB57、SMB56、SMD58、SMD62;SMB137、SMB136、SMD138、SMD142
上述参数地址是西门子200 smart PLC硬件已经定义好的,用户只能按不同的高速计数器号对应关系自行选择使用,所能够连接的高速输入也只能是增量值型,而非绝对值型。
高速计数器编程一般步骤:以HSC0为例
1) 设置控制字节,对应于SMB37
2) 设置当前值,对应于SMD38
3) 设置预设值,对应于SMD42
4) 定义高速计数器工作模式
5) 连接相应的中断事件
6) 开中断
7) 启用高速计数器
8) 设置高速滤波时间、断电保持V区
假设,我用一个第三方的旋转编码器:24V;增量型;A/B正交、Z相输出,做一个测速程序。编码器订货号:koyo TRD-2T1000BF
编辑一个测速程序,仅仅需要编辑一个增计数方式的高速计数器输入程序,调用定时中断SMB34=100mS,中断10次计算一次速度平均值。硬件连接编码器A相到I0.0,连接编码器24V电源。
按高速计数器一般编程步骤,先初始化一些相关值。
程序:
初始化子程序:
主程序调用:
定时中断:
设置“系统块”数字量输入I0.0由6.4mS修改为0.2uS,图示:该项必须设置!如果采用默认值6.4mS,则最大计数频率78HZ,无法设别高速脉冲。
将程序编译、保存,连接外部编码器及电源后上电,下载到cpu并运行。为方便监控程序,新建“状态图表”,图示:
从状态图表中可以看出,在定时中断中计算出当时的每秒脉冲总数为+90个,在实际使用中需要根据具体的要求再进行转换,如、每分钟转速。
小结:
编写200 smart PLC集成的高速计数器,关键是熟悉与高速计数器号相关的控制字节。如、组态HSC0,与之对应的控制字节SMB37。设置当前值SMD38,就是指定高速计数器从那个数据开始计数(一般设置从0开始)。如果需要调用当前值等于预设值,则还需要设置预设值数据,并开启当前值等于预设值的中断,开中断,开高速计数器,调用高速计数器号,上述数据的写入仅仅只需要调用一次,或用沿触发一次即可。
至于用读取到的高速计数器数据做什么?可以按要求在相应的中断子程序或者其它程序段中编写用户程序。
特别需要强调的是调用高速计数器,在200 smart PLC中必须设置高速输入端的滤波时间!以免引起不必要的错误。
关于断电保持的方法:
1) 将V区VD112设置为断电保持。
2) 在主程序中将高速计数器的值不断传送给VD112。
3) 当断电后,PLC重新启动时,VD112的断电前值会根据SM37.6 = 1设置,将原值重新写入到SMD38当前值中。
断电保持V区的设置,图示: