mall9002
級別: 略有小成
|
怎么感覺FOR循環下,到達表達式成立后后面的,加,轉移指令還會執行? 邏輯指令能夠停止?這是怎么回事? FOR shuzhi1:=0 TO 10 BY 1 DO Z1:=Z1+1; DMOV(TRUE,k1234,shuzhi2); Y21:=M8002; IF shuzhi1=10 THEN EXIT; END_IF; END_FOR; shuzhi2 為全局變量 軟元件 D1354Z1 shizhi1 全局變量 D1350 shuzhi1到達10后,Z1:=Z1+1; DMOV(TRUE,k1234,shuzhi2); 還會執行; Y21:=M8002; 不執行 。 而且編譯結果看起來也是跳過這些語句的,實在不明白了。使用REPEAT的不存在這樣的問題。 129 LDD> D1350 K10 138 CJ P1074 141 LD M8000 142 ADD Z1 K1 Z1 149 LD M8000 150 DMOV K1234 D1354Z1 159 LD M8002 160 OUT Y021 161 LDD<> D1350 K10 170 CJ P1075 173 LD M8000 174 CJ P1074 177 P1075 179 LD M8000 180 DADD K1 D1350 D1350 193 LD M8000 194 CJ P1073 197 P1074 199 LD M8012 200 OUT Y020 |
---|---|
|
mall9002
級別: 略有小成
|
FOR shuzhi3:=0 TO 10 BY 1 DO shuzhi4:=shuzhi4 +1 ; END_FOR; shuzhi3 = 11 shuzhi4 = 13420; shuzhi4 = 13420 手冊上的例子照抄都是不停止執行。 201 LD M8000 202 MOV K0 D536 207 P1076 209 LD> D536 K10 214 CJ P1077 217 LD M8000 218 ADD D535 K1 D535 225 ADD K1 D536 D536 232 LD M8000 233 CJ P1076 236 P1077 238 P1072 |
---|---|
|
楓落云端
施主,腳抬一下
級別: 略有小成
|
FOR 是一直會執行循環;建議FOR外面加條件IF,等到需要執行FOR的時候執行一次。 至于 “Y21:=M8002; 不執行 ” ,應該是你分析的問題,實際上肯定是一直會執行Y21:=m8002; M8002只是第一次開機掃描周期會ON,之后都為OFF |
---|---|
|
mall9002
級別: 略有小成
|
本來要寫 Y21:=M8012 ,手殘了。改了以后是都執行。 if加在for外面是可行的,剛又去翻了一下書,FOR的變量初始值在一次執行中是加到到達數,然后停止循環,再次執行到for時再從初始值開始加進入循環,所以看到執行語句是不停執行的。 感謝! IF shuzhi1<10 THEN FOR shuzhi1:=0 TO 10 BY 1 DO bianzhi:=bianzhi+1; DMOV(TRUE,k1234,shuzhi2); Y21:=M8012; END_FOR; END_IF; 這個是可行的 [ 此帖被mall9002在2019-05-08 15:39重新編輯 ] |
---|---|
|