调用方式一:FB100是一个多重实例功能块,对应一个背景实例数据块DB100,在FB100中调用二次同一多重实例功能块FB1,每个FB1实例数据存储在共同的背景实例数据块DB100。
调用方式二:FC100调用二次同一多重实例功能块FB1,每调用一次生成对应的背景实例数据块DB101、DB102。
哪位大神能提供一些这两种调用方式资料和文档,便于理解一下两者区别,将不胜感激!
问题补充:
首先在这里先谢谢上面几位大侠的相助,可能是问题还没有表述情况,具体情况如下。
这个多重背景功能块处理电机数据的,其中有些中间处理的数据都存放在了结构类型的临时变量“PRB”中,数据长度的位数超过了DINT的长度,想将这些数据放在一个共享数据块DB99中。
因为每个电机数据长度一样,处理的内容也一样。所以想通过指针寻址批量处理这些数据。下图是编写的批处理程序,在测试过程中最开始是使用第一种调用方式,调用第一个FB1产生的数据储存到了DB99,但调用第二个FB1产生的数据却在DB99中没有显示。
以此又使用第二种调用方式进行测试,而可以有两次调用FB1产生的PRB数据显示在DB99中。
对于这两种调用方式,对于FB1中的临时变量在多重背景数据块中是怎么处理的?每次调用FB1都会开辟本地数据区才对?还是第一种调用方式共有一个本地数据区?或者是这个处理程序还是有一定问题?
图片说明:
最佳答案
首先两种调用是没有区别的,但是我想楼主确认一点是,你在多背景调用FB10(motor_control)的时候是否是新建了FB10数据类型的STAT 然后再如你附图三在比如FB1中多背景调用后 再这个FB1的背景数据块DB1中会有你FB10每次调用的所有输入输出管脚,就和你在FC中循环调用手动填写管脚 对应DB效果一样
那么你说的通过指针循环是可以,我做过类似的实验,比方说每次指针 +p#4.0 操作,但是我大概看了下楼主的程序,我觉得有一点点问题,你在FB中操作AR2 你前面暂存了吗? 因为在FB中默认AR2暂存了其背景数据块的地址,所以我这里建议你在FC中通过指针循环累加调用你这个FB电机控制的子程序,LOOP计数就是你需要调用的FB10总数,可以在接口新建一个ANY,当然POINTER也可以,只要至少把 存放这些管脚的DB首地址能送到FC中就可以。
希望帮到你,谢谢。
提问者对于答案的评价:
进过各位的提点,有重新仔细的看了一下写的程序,最后将AR2地址寄存器进行了暂存。在测试了一下就好了。
最佳答案作者回复:
能帮到你就好,现在STL慢慢淡化了,博图的间接寻址概念和STEP7有很大区别,我们一起努力
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc200740.html