你好!我是初学S7-300,遇到困难,请各位老师多多指教!
我想利用S7-300 CPU313(自带DI24/DO16)实现三个计数通道分别对三台电机的编码器(EH 88 P 1024 Z 8/24L 25 X 3 P R)进行计数功能,来完成对运动物体移动的控制(实现在总长度一定的情况下,移动到若干个设定的区间都有一个输出信号,移动完全程长度后,计数值自动复0,周期重复),另设一个手动按钮,进行计数值复0。
我想做到:
一、 计数器0、1通道分别计数二台设备,编码器输入,计数从0----1000。不考虑正反转运行(一个方向)
要求:1:在计数的过程中能输出当前实际计数值,供比较器使用。计数大于和等于100时输出一个信号,大于和等于500时又输出一个信号,大于和等于900时输出一个信号,到1000时输出一个信号,同时将当前实际计数值置0。还要设置一个外部输入信号,可将当前实际计数值置0。
二、计数器3通道编码器输入,计数从0----5000。不考虑正反转运行(一个方向)
要求:1:在计数的过程中能输出当前实际计数值,供比较器使用。计数大于和等于200时输出一个信号,大于和等于1500时又输出一个信号,大于和等于4500时输出一个信号,到5000时输出一个信号,同时将当前实际计数值置0。还要设置一个外部输入信号,可将当前实际计数值置0。
现我的困惑是:
一、硬件配置中计数器的属性中,计数器通道,我不能一次将0-2通道设置完成,设置完0通道后,再设置1通道时,机架上只有1通道,没有0通道。
二、输入/输出地址的问题:
A:CPU默认输入输出地址为I124-126,O124-125;B:手册中对0通道的输入使用DI0.0—0.2(实物接线位置);C:手册中5.4节《在用户程序中实现功能》中,介绍:要在计数模式下读取实际值,可调用“计数”子模块中设置的输入地址。在SFB47中,LADDR是在“HW CONFIG”中指定的子模块I/O地址,如果I/O地址不同,必须指定二者中较低一个,这句话怎样理解?HW CONFIG”中子模块I/O地址有默认值,是否对0-2通道将要分别设置?
缺省值=300HEX,300HEX和I124-126,O124-125是什么关系?
手册中5.4节《在用户程序中实现功能》中,介绍:要在计数模式下读取实际值,可调用“计数”子模块中设置的输入地址。0通道I地址为n+0,1通道I地址为n+4,2通道I地址为n+8,n是多少?
COUNTVAL是实际计数值,如SFB47的数据块设定DB20,其实际计数值存放在DB20.DBD14中,程序中能否直接将它,在任何一个FC或FB中同某一个具体数值(比方500)进行大小比较?
三、SFB47的背景数据块
在“HW CONFIG”中,分次对0-2通道进行设定,分别对SFB47指定数据块DB20、DB30、DB40,是不是DB20.DBD14、DB30.DBD14、 DB40.DBD14分别存放0—2通道的实际计数值?
手册中5.4节《在用户程序中实现功能》中,提示注意:对于每个通道均必须始终通过同一背景数据块调用SFB,因为该背景数据块包含SFB内部处理过程所需要的状态。上述做法对不对?这句话怎样理解?
四、COUNTVAL、LADDR都能读出实际计数值吗?
真诚感谢!