| 
				 
					
					
					 f1652577 
					
				 
				滄海一聲笑! 
				
				
					級別: 探索解密 
			 
					
					
				 | 
			
				
				
				
				 
						圖片:  
				 
					MOV (SM402 ,K0,D20); MOV (SM402 ,K0,D21); FOR D20 :=K0 TO K99 BY K1 DO D20:= D20+K1; D21:= D21+D20; END_FOR; 模擬時為什么D21中的數值一直在變?  | 
		
|---|---|
| 
				 | 
		
| 
				 
					
					
					 潔白的月光 
					
				 
				
				
					級別: 探索解密 
			 
					
					
				 | 
			
				
				
				
				 把前兩句搞成 d20:=0; d21:=0; 試試。或者換成M8000。沒用過Q,應該是SM400把。。  | 
		
|---|---|
| 
				 | 
		
| 
				 
					
					
					 潔白的月光 
					
				 
				
				
					級別: 探索解密 
			 
					
					
				 | 
			
				
				
				
				 不好意思,弄錯了。感覺三菱的循環程序有問題。我用C語言寫了同樣的程序。C語言就可以。如果你要解決那個問題。,你不防可以寫個IF M0 THEN,當M0啟動開始循環。然后你D20增加到101.在循環語句里嵌套一個,IF d20=100 then,m0:=false; exit;end_if;end_for;end_if;  | 
		
|---|---|
| 
				 | 
		
| 
				 
					
					
					 楓落云端 
					
				 
				施主,腳抬一下 
				
				
					級別: 略有小成 
			 
					   | 
			
				
				
				
				 前兩句只是PLC運行第一個掃描周期起作用,每一個FOR循環,D20都會從0自加到99。D21=(1+2+...+99)*N個掃描周期,由于直接使用D21寄存器,默認為16位的有符號整數,最大只能到+32767,再加就會溢出到符號位,所以變成負數,之后自加又變成正數,繼續加又溢出變負數,一直不斷地循環  | 
		
|---|---|
| 
				 本帖最近評分記錄:  | 
		
| 
				 
					
					
					 楓落云端 
					
				 
				施主,腳抬一下 
				
				
					級別: 略有小成 
			 
					   | 
			
				
				
				
				 我只是具體分析他的程序運行過程,產生這個現象是正常的。如果想只是要循環一次,那就得加條件限制。 MOV (SM402 ,K0,D20); MOV (SM402 ,K0,D21); IF LDP(TRUE,M0) THEN FOR D20 :=K0 TO K99 BY K1 DO D20:= D20+K1; D21:= D21+D20; END_FOR; END_IF;  | 
		
|---|---|
| 
				 | 
		
| 
				 
					
					
					 楓落云端 
					
				 
				施主,腳抬一下 
				
				
					級別: 略有小成 
			 
					   | 
			
				
				
				
				 以上是M0 為ON時執行一次循環,如果只是想PLC開機自動算一次,那就變成 MOV (SM402 ,K0,D20); MOV (SM402 ,K0,D21); IF SM402 THEN FOR D20 :=K0 TO K99 BY K1 DO D20:= D20+K1; D21:= D21+D20; END_FOR; END_IF;  | 
		
|---|---|
| 
				 | 
		
| 
				 
					
					
					 conchnit 
					
				 
				
				
					級別: 略有小成 
			 
					
					
				 | 
			
				
				
				
				
 三菱ST里,32位數據傳送 你是如何寫的?  | 
		|
|---|---|---|
				
  |