登录
首页 PLC论坛 欧姆龙OMRON
回帖 发帖
正文

主题:关于功能块内部变量使用除法求余数的求助

点击:3904 回复:4

附件 1.jpg
各位大佬,如上图片所述,在功能块内用内部变量求余数的值。
商若是D100,余数就是D101,但是在内部变量里面如何定义商与余数的关系?
如若是用At数据,则在程序里面只能调用一次功能块,第二次调用就处乱了。
求各位大佬帮忙看下,谢谢、
17-11-14 09:18

引用 yuanyaozi 在 2017/11/14 9:18:28 发言【内容省略】

我给给你普及一下为什么要用FB!
使用FB的原因有2个:
1、减少重复代码。
2、提高代码的重复利用率。
第一个原因非常好解释,第二个原因就是通过在不同的项目中使用相同的FB功能,从而使得我们只需要为一个功能编写一次FB,从而提高了代码重复利用率。
要实现提高代码的重复利用率,那么就势必需要在编程中不使用外部,即PLC的实际地址,而是通过输入,输入输出引脚给FB中的数值赋值,因此楼主在内部变量中使用外部地址从而使得代码重复利用率受到极大的影响,因此你不需要FB,只需要一个子程序就可以了。
在来普及以下FB的运行机制:
   对于系统来,为FB的存储随机的分配系统内存,当系统中存在带保持的地址时,例如内部静态变量,系统会分配永久存储区供其使用,而对于临时变量,在FB调用结束时,系统会回收资源供其他FB使用,因此这些地址是共用的。
   而系统调用FB,并非等FB全部运行完成,而是只要FB运行返回主程序时,就对其进行资源回收。
所以,你的这个FB的正确做法是:
将被除数与除数作为IN变量引入,结果与余数作为OUT变量输出,你这个程序只要一个FC就结束了。
最后,Omron在FB,FC上与其他主流厂商还有一定的差距,特别是CX-ONE,受早期编程方式的拖累,如果使用SysmacStudio的话,会好很多。
HAVE FUN!
17-11-14 09:49

引用 fujifa 在 2017/11/14 9:49:36 发言【内容省略】

嗯嗯,感谢大佬回复。
从西门子与欧姆龙这CX-ONE区别来说,西门子的FB是有DB的,FC没有;而CX-ONE这所有的功能块,没有At数据的话就应该相当于只是FC而已,At了数据的有点FB的意思,不知是不是?因为我也是小白刚上手欧姆龙PLC的。
回到上边的商与余数的关系,
如果我不用功能块去做,直接用除法指令,余数可在数据存储器中看到。
附件 QQ拼音截图20171114150625.jpg
但是现在我觉得这么做有点直接,我想绕个弯尝试用功能块来实现,那么我现在遇到的问题是,在功能块的变量上,被除数作为输入变量,除数赋值为&2,商我不需要知道多少,我只要余数值做输出变量,这时在这个功能块里面如何定义商与余数关系?(1楼的D100与D101可无视)
如有简单例程讲一下最好,谢谢!
最后修改:2017/11/14 16:18:08
17-11-14 15:23

引用 yuanyaozi 在 2017/11/14 15:23:16 发言【内容省略】

前面有人已经说过了,欧姆龙的FB/FC并不符合IEC规范,而欧姆龙内部不使用寄存器地址不代表不能使用FB,即使在西门子中,你仍然对FB/FC的使用存在很大误解。
首先,你应该定义两个输入变量,用于除数与被除数的输入。
附件 snap1.jpg
然后,定义一个数组用于存放商与余数。
附件 snap2.jpg
最后,定义输出变量用于返回结果。
附件 snap3.jpg
这样,你不需要使用地址即可完成你的要求。
附件 snap4.jpg
当然,完整的可以供使用的程序你还需要做到错误侦测以及错误提示,例如如果用户除数输入了0怎么办,当然,在我的程序中是不会的,因为我给除数定义了初始值,但是你仍然需要做错误侦测并返回执行结果。
附件 snap5.jpg
最后说一下,你的PLC水平弱爆了~~
Good Luck~
17-11-14 20:33

引用 cvlsam 在 2017/11/14 20:33:34 发言【内容省略】

定义一个数组用于存放商与余数。
您的这句话解决了我的问题,多谢了。
您讲出我水平弱爆对我来说这是好事啊,至少,我是不耻下问的,以后遇到其他问题,还得请这边各位大佬多指点指点呢,谢谢。
17-11-15 08:47

工控新闻

更多新闻资讯