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