zs8823
級(jí)別: 家園?
![]() |
圖片:
![]()
圖片:
![]() 遇到一個(gè)問題,寫了一個(gè)如圖所示的子程序,在主程序中兩次調(diào)用,但只有第一個(gè)調(diào)用有輸入輸出,第二個(gè)調(diào)用的輸入好象未傳入子程序,但輸出完全與第一個(gè)輸出同值且同步變化.不知道錯(cuò)在哪里,請(qǐng)高手指點(diǎn),CPU226. |
---|---|
|
醉湮邃虞
醉湮邃虞話老黑
級(jí)別: 略有小成
![]() |
個(gè)人感覺,是對(duì)局部變量的理解問題,子程序每個(gè)網(wǎng)絡(luò)都有錯(cuò)誤。 程序中大量使用了局部變量,你把所有的局部變量變?yōu)槿肿兞烤蛻?yīng)該會(huì)好。 網(wǎng)絡(luò)1:L20.0 開始執(zhí)行時(shí),狀態(tài)并不確定 網(wǎng)絡(luò)2:大量的局部變量,除DQSL外,均未賦值就使用,幸虧你沒除法,否則會(huì)嚴(yán)重錯(cuò)誤。 網(wǎng)絡(luò)3:輸出DQLS,在C100斷開時(shí)是無效輸出 而此時(shí)對(duì)L20.0 賦值及LD16的清零,(截圖無后面)如果該子程序中沒有后續(xù)使用,則毫無意義。 [ 此帖被醉湮邃虞在2010-11-12 12:25重新編輯 ] |
|
---|---|---|
|
醉湮邃虞
醉湮邃虞話老黑
級(jí)別: 略有小成
![]() |
PLC中為子程序開辟了60個(gè)字節(jié)的可用存貯區(qū)域,但這60個(gè)字節(jié)是所有子程序共享的空間,并不是每個(gè)子程序獨(dú)享。 也就是說,局部變量只保持一個(gè)掃描周期賦值的數(shù)據(jù),要保證局部變量有效,必須保證每個(gè)掃描周期都有賦值,特別 是OUT類型變量,OUT類型變量如果前面有條件,則當(dāng)條件為假時(shí),輸出的是無效值。而賦值之前對(duì)OUT類型變量的 讀取也是無效的。 故此若這樣寫程序,只有一個(gè)子程序,有可能能工作,若存在其他子程序,也用到了局部變量,則程序就會(huì) 不正常。 類似的變量還有 AC0 AC1 AC2 AC3 AC4 ..... 這類變量使用前一定要賦值,一段程序結(jié)束后該變量應(yīng)該沒用才對(duì)。 你也可以把輸出變量和中間變量,用IN-OUT類型來定義,效果會(huì)大大改變。 給你個(gè)試驗(yàn)程序: 子程序一:定義AA OUT WORD 1+AA > AA 子程序二: MOVW 100 > LW0 在主程序中分別 調(diào)用這兩個(gè)子程序,你會(huì)發(fā)現(xiàn),程序一的輸出值,恒為101,而不是需要的每個(gè)掃描周期+1值(快速變化值)。 [ 此帖被醉湮邃虞在2010-11-15 11:19重新編輯 ] |
|
---|---|---|
|