技术论坛

有个小程序运行有问题,大家帮看看

作者 主题
侠客

经验值: 871
发帖数: 336
精华帖: 1
主题:有个小程序运行有问题,大家帮看看


只看楼主 楼主 2013-11-10 20:51:39
技术能力有限找不到问题,可说又描述不清问题,借这个平台贴出来,大家给我找找问题。
是这样的,在FC块中编了一个小程序



然后呢,在OB1里调用了2次,单独调用了一次,模拟没有问题,但要是调用2次就运行不正常了,问题出在哪呢?这是一个单按钮启停电机的小程序,实际中有很多电机需要控制,就是有可能同时运行的



大家帮找找毛病吧?谢谢
 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1109081&b_id=4&s_id=0&num=14

至圣

经验值: 12044
发帖数: 4948
精华帖: 81
回复:有个小程序运行有问题,大家帮看看


只看楼主 3楼 2013-11-11 00:33:42
FC里使用了上升沿,边沿存储位不能用临时变量,这里可以用IN_OUT传入全局变量作为边沿存储位(比如M区的位)。
 
以下网友喜欢您的帖子:

  
游民

经验值: 64
发帖数: 15
精华帖: 0
回复:有个小程序运行有问题,大家帮看看


只看楼主 4楼 2013-11-11 16:46:49
是不是调用2次的时候,I0.0为1,Q0.0和Q0.1同时闪啊闪?就是上升沿的问题。
事情是这样的,无论你的上升沿地址是临时变量1S还是全局变量M0.0,你2次调用使用了同一个上升沿。在你I0.0置位的这个扫描周期,#1S1临时变量存储的是上个扫描周期I0.0的值0,这样上升沿检测到,输出一个1的脉冲,同时#1S1临时变量的值为1。因为第二次调用同样用了这个上升沿,所以此时Q0.0和Q0.1同时亮。还是这个扫描周期,扫描到第二段的时候I0.2输入为0,将#1S1临时变量值变为0。至此第一个扫描周期结束。
第二个扫描周期,I0.0还是1,而#1s1临时变量值为0,虽然I0.0没变化,但是因为上个扫描周期将#1S1复位为0了,所以再次感应到上升沿,此时Q0.0和Q0.1又是1,所以将输出复位。如此循环。
以上纯属个人YY,因为我实在太菜鸟了。。。换个别的思路吧
 
以下网友喜欢您的帖子:

  
游民

经验值: 64
发帖数: 15
精华帖: 0
回复:有个小程序运行有问题,大家帮看看


只看楼主 5楼 2013-11-11 17:03:23
话说你解决了没有啊?我用IN-OUT加了全局变量做参数,出现了I0.2不好用的情况,为啥啊。。。教教俺啊
 
以下网友喜欢您的帖子:

  
侠客

经验值: 871
发帖数: 336
精华帖: 1
回复:有个小程序运行有问题,大家帮看看


只看楼主 楼主 6楼 2013-11-11 19:16:00
谢谢分析,还没解决。正在请大家找毛病。上升沿不是命名2个名字吗?#ls1,#ls2这样也算重了,问题出在这吗?
另外youhm奇侠说的,“IN_OUT传入全局变量”这点还不太明白。我白天在现场,晚上一回来就跟大家讨论啊
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7431
发帖数: 2233
精华帖: 0
回复:有个小程序运行有问题,大家帮看看


只看楼主 7楼 2013-11-11 19:36:10
正如youhm奇侠所说,楼主你定义的 “shuru” 等是IN变量,“shuchu”是OUT变量,类似的,在FC中边沿存储变量需要定义为IN-OUT,并附上不重复使用的全局变量,如M155.0等
以上仅供参考,如有差错,敬请原谅!
以下网友喜欢您的帖子:

  
H.L
侠圣

经验值: 2884
发帖数: 1776
精华帖: 9
回复:有个小程序运行有问题,大家帮看看


只看楼主 8楼 2013-11-11 19:42:36
你可以理解为你在调用块时给管教分配的地址就叫全局变量。
你一定理解临时变量的意思,就是临时保存数据,所以它不能保存多次调用时的数据,你看你的引脚哪里给上升沿分配地址了,就用了两个临时变量,这怎么能对呢?
 
以下网友喜欢您的帖子:

  
侠客

经验值: 871
发帖数: 336
精华帖: 1
回复:有个小程序运行有问题,大家帮看看


只看楼主 楼主 9楼 2013-11-12 20:23:09
“H.L侠圣”我把2个上升沿分别用MO.0,MO.1代替也不行,我的目的是做一个公式一下的小程序,然后N个电机启停都这样用,就直接带入输入输出点就行了。这样的话还是有重复用上升沿的问题啊
另外in_out变量在哪定义?
不好意思,我还是没明白怎么改动。或是这样就不行?
 
以下网友喜欢您的帖子:

  
至圣

经验值: 12044
发帖数: 4948
精华帖: 81
回复:有个小程序运行有问题,大家帮看看


只看楼主 10楼 2013-11-12 21:50:34
FC块添加两个IN_OUT变量1s1、1s2(替换原来的Temp变量1s1、1s2)
第一次调用FC把M0.0、M0.1赋值给1s1、1s2
第二次调用FC把M0.2、M0.3赋值给1s1、1s2
每次调用都要给1s1、1s2赋值不同的全局变量
 
以下网友喜欢您的帖子:

  
侠客

经验值: 871
发帖数: 336
精华帖: 1
回复:有个小程序运行有问题,大家帮看看


只看楼主 楼主 11楼 2013-11-12 22:16:02
youhm奇侠:IN_OUT变量从哪里建?另外我每调用一次程序,都要用一次MOVE指令赋值吗?
 
以下网友喜欢您的帖子:

  
侠客

经验值: 871
发帖数: 336
精华帖: 1
回复:有个小程序运行有问题,大家帮看看


只看楼主 楼主 12楼 2013-11-12 22:24:45
建IN_OUT变量需要建UDT?
 
以下网友喜欢您的帖子:

  
至圣

经验值: 12044
发帖数: 4948
精华帖: 81
回复:有个小程序运行有问题,大家帮看看


只看楼主 13楼 2013-11-12 22:42:48
在FC块的输入输出参数里啊,不是用MOVE是FC形参引脚赋值实参
和UDT没有关系,UDT是自定义数据类型
 
以下网友喜欢您的帖子:

  
侠客

经验值: 871
发帖数: 336
精华帖: 1
回复:有个小程序运行有问题,大家帮看看


只看楼主 楼主 14楼 2013-11-12 22:59:33
谢谢,youhm奇侠这么晚了没睡还解答问题,可是我入门太浅了,没明白形参引脚赋值实参,我再查查资料
 
以下网友喜欢您的帖子:

  
至圣

经验值: 12044
发帖数: 4948
精华帖: 81
回复:有个小程序运行有问题,大家帮看看


只看楼主 15楼 2013-11-12 23:33:00
和你IN变量shuru赋值I0.0一样,都是在接口参数里定义的
 
以下网友喜欢您的帖子:

  
侠客

经验值: 871
发帖数: 336
精华帖: 1
回复:有个小程序运行有问题,大家帮看看


只看楼主 楼主 16楼 2013-11-12 23:40:53
您说的是定义IN_OUT变量吧?
 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
有个小程序运行有问题,大家帮看看
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。