回复:应用探讨—软件PID功能块的使用

Zane

版主 西门子1847工业学习平台

  • 帖子

    21052
  • 精华

    399
  • 被关注

    1484

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2010-08-13 21:22:53

127楼

quote:以下是引用蓝豆在2010-08-13 14:20:50的发言:
quote:以下是引用Zane在2010-08-07 21:31:49的发言:
quote:以下是引用蓝豆在2010-08-06 11:12:36的发言:
针对101楼Zane提出的回路比较多影响控制性能的情况,我们公司的设备16个回路采取了这样的控制方式:
1、OB35中首先做一个循环,每次加1,计数到16后再从头开始
2、每次中断执行一个循环,相当于控制一个回路
3、先将当前回路值通过指针及BLKMOV传送到DB58(FB58的背景数据块)
4、调用FB58
5、将FB58的输出值赋值到模拟量输出
6、下一中断将回路数加1,相关数据传送到DB85,再执行上面步骤
7、这样相当于只用了一个FB58,我们OB35周期设定为50ms,对于每个回路来说800ms刷新一次输出,完全满足控制要求



你那16个回路的数据存在哪里啊,不是也要16个数据块吗?那加起来还多用一个数据块呢!还要来来回回传数据,不嫌麻烦啊 ,这点时间处理一个回路也够了呀,不值!
不过,还是要感谢你的交流!


可能是我描述的不够清楚,实际上整个程序2个数据块就够了:FB58的背景数据块(如DB58)和保存16个回路数据的共享数据块(如DB100)。具体的实现方法我简单描述一下:

在OB35中定义一个数据类型为Any的临时变量,利用寄存器寻址每次将当前回路的数据从DB100传送到DB58,然后执行FB58的调用,并且FB58全部采用临时变量赋值,将输出结果传送到实际输出地址,再将DB58数据传送到DB100对应回路地址保存,这样就完成了一个回路的控制。下一个周期将回路值加1,再重复上面的动作,这样就实现16个回路的控制。

至于来回传送数据,我认为数据传送占用的扫描时间应该远远少于PID功能块的扫描时间,并且只在程序的开始和结束各执行一次传送,就可以省掉15个FB58的调用,在时间上的优劣应该是很明显的。



不知道该怎么说才好! 用“掩耳盗铃”来比喻你的做法,可能不确切,但有一种意思在里面。

16个FB58的背景数据块,与1个放了16个FB58背景数据块的数据块又什么区别?

可能你的程序中只调用了一个FB58,但16个回路的计算量没有减少啊,原先系统只需计算16个回路而已,现在还要多做这么些数据的传送任务,而且还是间址寻址,系统负担是加重了还是减轻了?

话再说回来,分时调用FB58,每个周期计算一个回路,也不必这么费力,在定时中断里用JL指令就可以轻松搞定了。
Zane 注册自动化系统工程师 Always save before download
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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