| 作者 | 主题 |
|---|---|
|
伊默 至圣
经验值:19238 发帖数:4259 精华帖:118 |
楼主
主题:我来吃个螃蟹,发个关于S7-200脉冲的讨论.
就初学者而言,S7-200的脉冲输出功能比较麻烦,但是实际上它的包络表功能还是非常强大的,可以实现多段包络。 但是
1、对于自己编程实现三段包络(加速、匀速、减速)来说实际是有一个非常矛盾的问题:由于采用初始周期+周期增量+脉冲个数,以此来确定包络,想想做一个加速的包络会出现什么问题呢?随着周期越来越小,而周期增量却不变,导致加速度越来越大!举个极端的例子假设周期增量为-2us,某一时刻周期为4us,那么下一周期的脉冲周期为2us ,看看,短短的2us之内,速度翻了一倍! 这显然是不合理的! 2、采用软件提供的向导功能,能达到非常平稳的加减速控制! 可是向导只提供在向导内绘制包络表,而不能实时的更改,比如最大脉冲频率,脉冲数目等,这又非常不方便! 我想要得到一个可以通过上位机随时更改步进速度(脉冲周期)和运动位移(脉冲数目)且可以非常平稳的加减速的包络表,怎么办? 以下给出一个粗略的方案,供大家参考,大家如果有什么不同的意思一起讨论! 打开软件,选择PTO/PWM向导功能。 1、设置最大脉冲频率20000,最小脉冲频率1000,如下图 2、设置加减速时间均为200毫秒,如下图 3、绘制一个脉冲频率为20000(最大频率),脉冲个数为10000的三段包络,如下图 4、绘制一个脉冲频率为10000(最大频率的0.5倍),脉冲个数为10000的三段包络,如下图 5、绘制一个脉冲频率为5000(最大频率的0.25倍),脉冲个数为10000的三段包络,如下图 之后,完成向导功能,切换到“数据块”,查看向导数据块的内容,会有如下发现: A、对应最大频率20K的加速脉冲为2099; B、对应最大频率10K的加速脉冲为521; C、对应最大频率5K的加速脉冲为127; 根据上面三项,我们大致得出一个统计规律,设PLC的最大频率为F(除224XP外都是20K),该频率下对应的加速脉冲个数为N(F), 则当脉冲频率为f时对应的加速脉冲个数为: N(f)=((f/F)的平方) * N(F) 验证一下: 10K时,N(10K)= 0.5的平方 *2099 =524 --->实际需要521 5 K时,N(5K)= 0.25的平方 *2099 =131 --->实际需要127 上式说明误差还是非常小的! 另外,一般来讲我们做的都是加速度等减速度,所以减速脉冲个数也等于加速脉冲个数! 接下来,我们要用这个粗略的统计规律来如何为我们服务呢? 假设通过上位机给定后,可以得知脉冲频率为F,脉冲个数为N ,那么如何得到一个可以实施的平稳的三段包络呢? 方法还是同上,使用向导设置, 不过不需要再设置包络表了! 只需要设置好最小频率,最大频率,加速时间,减速时间,然后确定就好了。 剩下的就是编程的问题了: 1、由以上公式可知,该段包络的减速段脉冲个数为x=(F/20000)平方 * N ,意即PLC在发出(N-x)个脉冲后就需要开始减速了!又设“减速时刻脉冲个数”=(N-x) 2、在主程序内调用: 初始化时使能HC0的模式12,对Q0.0输出脉冲计数;在启动该包络的上升沿时刻给“PTO实际频率”赋值为F(最大频率)并使能HC0高速计数中断; 主程序: LD 运行标志 EU MOVD F,PTO实际频率 //给定最高频率 MOVD N, SMD42 //给定总脉冲个数 -D 1, SMD42 //补偿(-1)个脉冲 HSC 0 ATCH HC0中断, 12 //HC0 Pv=Sv中断 LD SM0.0 = L60.0 LDN 运行标志 = L63.7 LDN SM0.0 = L63.6 LD L60.0 CALL PTO0_CTRL, L63.7, L63.6, L20.0, PTO0_Err, PTO0_Pos LD 急停 = L60.0 LD 运行标志 = L63.7 LD L60.0 CALL PTO0_MAN, L63.7, PTO实际频率, PTO0_Err, PTO0_Pos LDD> HC0, 减速时刻脉冲个数 MOVD 1000, PTO实际频率 //最后停止频率(最小频率) HC0中断子程序 LD SM0.0 R 运行标志,1 LD SM0.0 = L60.0 LDN 运行标志 = L63.7 LDN SM0.0 = L63.6 LD L60.0 CALL PTO0_CTRL, L63.7, L63.6, L20.0, PTO0_Err, PTO0_Pos
I can do it
|