登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:编写S7-300的功能容易出错的一个问题

点击:399 回复:1


网友秀全说:“我编写的功能FC1里边有一个SR置位复位块,在OB1调用4次FC1,怎么搞也不行,后来我把它改为分开的置位、复位指令就好了。我怎么也想不明白怎么回事。”
下图是他的FC的局部程序。
http://blog.gkong.com/uploadfile5/2013108201258138.jpg
首先要注意SR触发器用来对图中的M0.0置位和复位,同时也对Q输出端可选的BOOL变量置位和复位。程序中的M0.0和局部变量#zuudianyuan(主电源)的作用是重复的,可以只用其中之一。
SR触发器有记忆和保持的功能。调用一次FC1,M0.0用来记忆一台设备的启动、停止命令。调用两次FC1,能用M0.0同时记忆两台设备的启动、停止命令吗?当然不行。
要想多次调用FC,其中有记忆功能的变量不能使用绝对地址,也不能使用局部变量中的临时变量。
最简单的解决方法是删除图中的线圈,将M0.0改为要控制的#zuudianyuan。
对于S7-300来说,SR方框上的地址可以使用输出参数。但是对于S7-200的子程序(相当于S7-300的FC),如果使用输出参数,多次调用该子程序时就会出错。应改为IN_OUT参数。
13-10-08 20:13
这种情况下不应该使用Fc,而应该使用Fb。
当Fc中使用了In_OUT变量后,其无法向其他支持IEC61131-3标准的厂家进行程序移植,因为在标准中,Fc并不支持In_OUT变量,只要看看西门子的工程师写的那些Fc,都会按照61131标准进行写程序,而不会去使用西门子的Fc支持IN_OUT这个怪诞的特性。
当程序员习惯使用西门子怪诞的特性后,其后续使用其他厂牌编程时往往困难重重。
Good Luck~
13-10-08 21:23

工控新闻

更多新闻资讯