分析一下FC形参程序

一个FC功能,里面大概有80个IN,35个OUT,几个TEMP, 总数量不超过127, 见附件程序,
图片里的程序只是我整个程序块挑选了3行复制下来的,其中第二行a1,a2后面有个S_ODT计时器, 程序是300的程序,我手头电脑没装STEP7,于是我在200里面编了上传以作示意。
我在现场调试程序时:
1.当我按下start对应的实参按钮,(按下后松开变回0) auto_process形参及对应的实参均导通,正确。  但是当我把auto对应的实参信号变为0, auto_process复位, 正确。  
 但是这个时候auto_process置位的线圈仍然绿色!  导致我auto信号从0变为1后, auto_process又置位了,其对应的实参又

2.   a1,a2导通后, 其后面的定时器S_ODT(示意图里没画) 导通,计时时间到,但是step1始终不导通!!!


以上两个问题,实参交叉查考我都查了,没有重复; 另外这个FC块变写好以后,我就只调用一次, 所以我能直接打开FC块,看里面的形参颜色变化,所以感觉到很奇怪,感觉程序失控了!

这个现象我单独编写一个小块,程序行数少,管教数量少,就不存在上述现象。难道我的块管脚110几个超过了限制?? 我记得最大127个吧


我现场把wash_process, step1 由out变量改为 in_out变量 可以解决第一个现象, 但 我以前类似的程序 用的是out变量,从来没出现过这个现象!
所以我认为用out变量是没问题的!

第二个定时器时间到了也不输出我现场始终没解决,以前用过很多次这样也没出过问题!

问题补充:
绝对不是参数定义为OUT  IN_OUT的问题, 我自己做过实验,如果FC只是这3行,  定义为OUT  IN_OUT都没问题,  但是在我的100多个管脚FC里面就不行,很奇怪

图片说明:

分析一下FC形参程序   

最佳答案

问题1 :在STEP7 常见编程错误31页里面有个例子,楼主的问题和上面的例子类似,如果没有数据被写至FC的OUT参数,FC将会输出一个随机值!当auto信号从0变为1后,第一段程序,和第三段程序都没有明确数据写到auto_process ,这时auto_process会输出一个随机值。
问题2:检查定时器号是否用的是T0,如果用的是T0,检测程序调用的FB块内是否有要输入定时器号的管脚没有输入定时器号,如果没有输入,程序默认定时器是T0,调用的时侯就会和当前T0冲突,交叉索引会检测不到。

提问者对于答案的评价:
问题1您的回答也许正确;
问题二的原因是我定时器设定值太大了,我误以为定时器没计时呢,我将定时器设定值改小了以后,马上就导通了;;;  低级的错误啊,现场我调试很着急,误以为不导通呢

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc236723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午3:58
下一篇 2018年12月1日 下午3:58

相关推荐