简单的锯齿波编程
今天在“找答案”栏目中看到有这样一个帖子,描述在单位时间内,将一个寄存器内的数据由0上升(下降)最大值或退回到0。问题链接:http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=212415&cid=1072
我记得西门子关于这个类似的问题,早就有类似的官方例子,典型的就是Rampe(斜波函数发生器指令)、锯齿波电路的应用,有需求可以到官网上下载来学习。
我在实际回复时,根据网友提问的条件:“15S时间内数据MW100由0上升至60,或者在这个时间段将MW100数据由60下降到0”的依据,写一个简单的程序段,cpu选择315-2pn/dp,调用循环中断组织块OB35,在这个信号定时中断组织块中编辑这个控制程序。
编程思路:
1) 根据这个15S时间,把它折算为15000mS,315-2pn/dp的cpu循环定时中断默认值为100mS,需要重新设置后下载到cpu中,15000 / 60 = 250 mS;
2) 如果定义M0.0为升控制条件、M0.1为降控制条件、M0.2清除MW100数据;
3) 因为控制要求最大值为60,最小值为0,需要在程序中做一些限制。
程序:仿真验证
1) 组态cpu硬件:
插入导轨,1#槽插入电源模块,2#槽插入所选择的cpu,双击导轨2#槽的cpu,在弹出的cpu属性窗口“周期性中断”将原100mS,修改为按要求的250mS,确定,编译、保存项目。
2) 在step7编辑区“插入”一个OB35:
在step7编辑区,插入一个OB35,确定。
3) 在OB35中编辑升、降程序:
4) 将硬件和程序下载到仿真器,进行验证:为方便监控数据状态创建一个变量表VAT_1。
5) 仿真验证结果:
仿真结果能够在15S时间内,将MW100内的数据由0上升到60。
这个程序非常简单,在ADD_I前面加入控制条件和数据上限,下降的原理与上升的一致。有需要的网友可以通过自己具体的要求,适当修改循环定时中断OB35中的程序段就可以应用了。
小结:
循环定时中断,一般plc均带有类似的循环定时中断组织块或子程序,循环的含义是调用后cpu会根据设置的定时时间,无限循环进行,当定时中断时间到,OB1主程序会优先执行一次该组织块或子程序。但凡,中断组织块(子程序)均带有一次调用有效周期为一个的特性,类似于沿脉冲触发。理解了上述基本概念,编辑类似的程序变的简单了。