技术论坛

 简单的锯齿波编程

返回主题列表
作者 主题
WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
楼主    2019-02-22 09:53:34
主题:简单的锯齿波编程 精华帖 

简单的锯齿波编程

   今天在“找答案”栏目中看到有这样一个帖子,描述在单位时间内,将一个寄存器内的数据由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主程序会优先执行一次该组织块或子程序。但凡,中断组织块(子程序)均带有一次调用有效周期为一个的特性,类似于沿脉冲触发。理解了上述基本概念,编辑类似的程序变的简单了。


星动行働
侠士

经验值: 1384
发帖数: 213
精华帖: 0
1楼    2019-02-22 09:58:43
主题:回复:简单的锯齿波编程

 谢谢您的分享,我最近在项目上也在使用循环中断的功能,对于循环中断的使用有了更多的认识。特别是小结部分,总结的很细,结合了具体的使用过程。

我个人肤浅的理解是循环中断实际就是一个系统自带的定时器,可独立于主程序外,用好了,节约定时器和计数器的资源。

勤奋吃苦,是最好的技巧与捷径。
菲戈
至圣

经验值: 28599
发帖数: 5906
精华帖: 61
2楼    2019-02-22 10:27:29
主题:回复:简单的锯齿波编程

编程技巧,值得收藏

欢迎交流,QQ:2301013064 邮箱:feige6@139.com
holdkcsxyz
至圣

经验值: 12948
发帖数: 1802
精华帖: 22
3楼    2019-02-22 11:06:17
主题:回复:简单的锯齿波编程

感谢分享,提供了软件模拟的思路。软件模拟的锯齿波估计够锯齿的,硬件集成的555引脚可控加个滤波器效果也不错了,再不行可以用信号发生器。

WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
4楼    2019-02-22 11:25:32
主题:回复:简单的锯齿波编程

你说的555是不是那个集成电路?早前,我使用过这个集成电路做的定时器,这个电路非常简单的搭接就可以了。我第一次使用这个集成电路555,由于RC电路中的电解电容器操作漏电,定时器很长时间才输出,以为是电路连接错了,

现在,自己做线路板已经没有再做了。但是,这个过程将永远记录在我的心里。

不断攀登
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
5楼    2019-02-22 13:42:29
主题:回复:简单的锯齿波编程

不错,楼主有东西~

邮箱 yongquancun@126.com
Zane
至圣

经验值: 75765
发帖数: 19245
精华帖: 376
6楼    2019-02-22 23:31:02
主题:回复:简单的锯齿波编程

能不能编一个不要计算中断分辨率,在OB1及时钟中断中都能用的斜坡函数?

Zane 注册自动化系统工程师 Always save before download
WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
7楼    2019-02-23 17:06:13
主题:回复:简单的锯齿波编程

没有吃透你的要求,是在OB1中编辑斜坡函数?

如果是,这个并不难,取一个根据斜坡时间长度的数据,用一个系统时钟的时间作为升、降速速率,做斜坡函数。

Zane
至圣

经验值: 75765
发帖数: 19245
精华帖: 376
8楼    2019-02-24 16:17:42
主题:回复:简单的锯齿波编程

通用的,在OB1及定时中断中均可使用,且与定时中断的设置无关

Zane 注册自动化系统工程师 Always save before download
quiet
奇侠

经验值: 7577
发帖数: 1988
精华帖: 0
9楼    2019-02-25 08:32:17
主题:回复:简单的锯齿波编程

运算周期越小越平滑,cpu够力的话最好是1ms改变一次。


WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
10楼    2019-02-25 10:11:16
主题:回复:简单的锯齿波编程

理解了,这几天正在考虑这个问题。

WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
11楼    2019-02-25 10:12:52
主题:回复:简单的锯齿波编程

我也是这样想的,但是,一定会增加cpu工作负担,让cpu每1mS输出也不是一件容易的事情。

quiet
奇侠

经验值: 7577
发帖数: 1988
精华帖: 0
13楼    2019-02-27 14:47:58
主题:回复:简单的锯齿波编程

要是plc的扫描周期小于1毫秒的话,也不用中断了,其实这个运算量很小的。


WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
14楼    2019-02-27 15:21:34
主题:回复:简单的锯齿波编程

实际上就模拟量输出模块的控制精度而言,不一定需要做的过份的平滑线性。

就输出波形上看,当然希望运算次数越多越平滑。

baishan
侠士

经验值: 1012
发帖数: 435
精华帖: 1
16楼    2019-02-28 10:41:38
主题:回复:简单的锯齿波编程

15000 / 60 = 250 mS 为什么要除以60那?

只要去研究,就会有收获,学无止境!
WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
17楼    2019-02-28 11:04:23
主题:回复:简单的锯齿波编程

15000是时间长度,即15S时间内,60是需要上升(下降)的数据。

即在15S时间内,数据由0上升(下降)到60,这个60不要理解为时间数据的进制关系。

我将上升速率设置为250mS,即每250mS时间到,数据升(降)1个数据,如有不明白按我的例子程序自己写一边,仿真验证是最能够理解的方法。


WWCWWC
至圣

经验值: 71500
发帖数: 7980
精华帖: 145
18楼    2019-02-28 14:50:55
主题:回复:简单的锯齿波编程

是的。

  我这不是为了做那个网友的提问问题来着吗,他要求将一个MW100的数据在15S时间内,由0上升到60的数。

就是把60这个数,按15S时间分配的。

这几天也在做Z版的题目,近期工作任务多,稍后我做好也会发上来的。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。