愛笑的眼睛
級別: 實習會員
|
圖片:
FOR #a[1] :=1 TO 4 DO #a[5] := #a[1] + #a[1]; #c := 1 + #c; #a[2] := 1+ #a[2]; #a[4] := 4; IF #start_1 = 1 THEN ; END_IF; #a[5] := 5; ; END_FOR; 在編寫的一個for循環中,用數組a{2}定義了一個int整數進行自加1(其初始值為0),即:a{2}:=1+a{2};當for循環第一次,執行到自加語句的時候,其a{2}的結果應當是1啊,怎么這么多啊,就跟梯形圖里的add指令一樣,一接通使能,每個掃描周期加一次。而java語言里,for循環執行一次就加一次。求教如何使for循環,每循環一次,自加的時候,語句只加一次呢 |
---|---|
|
cvlsam
富士低壓,POD(觸摸屏),PLC專賣
級別: VIP會員
|
因為start=1,那么每個掃描周期都在執行for循環……………… 這不是SCL的坑,是程序員自己挖的坑啊,你這個程序,在JAVA中也是這個狀態,你這個程序,在JAVA中不就是 while(start){ for(int a[1]=1;a[1]<5;a[1]++){}; } 當start=1的時候……………… Good Luck~ |
---|---|
|
愛笑的眼睛
級別: 實習會員
|
scl 用的是單步調試,點一下鼠標走一條語句。才走了半個循環呢,只走到加1的語句,后面的還沒執行, 下面的是用Java寫的單步調試,不這樣啊 thanks |
---|---|
|
愛笑的眼睛
級別: 實習會員
|
圖片:
今晚寫了個實驗程序: 用for 里面寫 a【6】++, 執行完for后, 把a【6】的值送到輸出端(沒寫a[6]的初始化), 執行完輸出語句 下一行 用if語句把fff的值置1,進行輸出(目的是把調用他的塊en端關掉,結束掃描) 、、、、、、、、、、、、、、、、、、 最后實際輸出的值就根理論相同了。。。。 也就是1:scl的單步調試,不是按照cpu掃描周期走的,也就是你每走一步,cpu也許掃描了上萬次。(根Java不太一樣,java單步調試只輸出一次) 2:plc的scl進入掃描,由于沒有高級語言中的“return”進行返回,所以他執行完語句的最后一條后,還會從頭再掃描。。。。也就造成了cpu每掃一次,for語句的就重復執行一次,這cpu如此掃描,就使for如此進入重復執行的死循環,,,,,, thanks各位愛心大哥 |
---|---|
|