5UFOR循环变址 点击:195 | 回复:4



水寒风似刀

    
  • 精华:0帖
  • 求助:11帖
  • 帖子:11帖 | 12回
  • 年度积分:4662
  • 历史总积分:4662
  • 注册:2020年3月08日
发表于:2020-08-26 15:14:38
楼主
求助帖100分-已结帖

  
/*这样老是读不到数据,或者读不到3个数据,只能读到1或2个 ICOUNT类型为 字有符号 */


FOR ICOUNT:=1 TO 3  BY 1 DO   
     Z1:=ICOUNT;
         ADPRW(TRUE,ICOUNT,04,00,01,D100Z1,M205);
     END_FOR;

/* 换成 这样完全没问题*/
Z1:=1;
ICOUNT:=1;
ADPRW(TRUE,ICOUNT,04,00,01,D100Z1,M205);

Z1:=2;
ICOUNT:=2;
ADPRW(TRUE,ICOUNT,04,00,01,D100Z1,M205);

Z1:=3;
ICOUNT:=3;
ADPRW(TRUE,ICOUNT,04,00,01,D100Z1,M205);




yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 9816回
  • 年度积分:2055
  • 历史总积分:39012
  • 注册:2005年4月22日
发表于:2020-08-26 20:30:46
1楼

因为for循环将在一个扫描周期内结束,而ADPRW的执行时间大概在23个微秒,且ADPRW无法同时执行2条指令,因此无法保证在for循环中得到正确的执行。


For循环被用来进行变量的计算,而不是读写外部变量甚至于通讯的用途,这一点和PC上的编程是截然不同的。


HAVE FUN!

水寒风似刀

  • 精华:0帖
  • 求助:11帖
  • 帖子:11帖 | 12回
  • 年度积分:4662
  • 历史总积分:4662
  • 注册:2020年3月08日
发表于:2020-08-26 15:18:33
2楼

折腾了一天,都找不出原因,请哪位大侠帮忙指点下。。。

hinet64

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 304回
  • 年度积分:131
  • 历史总积分:148
  • 注册:2014年8月03日
发表于:2020-08-27 18:41:04
3楼

2F说得很好~正解

落叶归根87

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 203回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2013年8月05日
发表于:2020-08-28 11:23:27
4楼

都有解了,把执行语句放for外面


相关主题

官方公众号

智造工程师