愛家愛china
愛家愛china
級別: 家園?
精華主題: 0
發(fā)帖數量: 507 個
工控威望: 882 點
下載積分: 1374 分
在線時間: 245(小時)
注冊時間: 2009-09-07
最后登錄: 2024-06-17
查看愛家愛china的 主題 / 回貼
樓主  發(fā)表于: 2011-11-29 19:33
本人對200里帶參數子程序了解不多,今天隨便編了個程序,卻發(fā)現個令人困惑的問題,程序見附件。
當我按下I0.0或i0.2時,Q0.0和Q1.1都是同時輸出,隨便按下I0.1或I0.3, Q0.0和Q1.1也都是同時熄滅。
想請問這是什么緣故?如果像這樣的話,那么在實際程序中,要調用多個相同的帶參數子程序時怎么來用才能避免這種問題?

不要說分開調用  這個設備就是很多重復的地方  而且需要同時調用



  
朋友多了路好走!!!
sjm213
有小知識,無大學問。
級別: 論壇版主

精華主題: 7 篇
發(fā)帖數量: 5196 個
工控威望: 7419 點
下載積分: 158680 分
在線時間: 3155(小時)
注冊時間: 2007-11-21
最后登錄: 2024-11-15
查看sjm213的 主題 / 回貼
1樓  發(fā)表于: 2011-11-29 21:58
http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&siteid=cseus&objid=7116338

在S7-200的子程序中使用局部變量類型 OUT 和 TEMP 時需要注意什么?

說明:

S7-200有一類用作臨時存儲或傳遞形參的局部存儲器。

局部存儲器:

給主程序分配64字節(jié)局部存儲器
給共8級的每一級子程序嵌套分配64字節(jié)局部存儲器
給中斷服務程序分配64字節(jié)局部存儲器
注意:

如果使用 LAD 或 FBD 編程,局部存儲器的最后四個字節(jié)為 STEP 7 Micro/WIN 保留。

如果在 STEP 7 Micro/WIN 中的同一級嵌套里調用多個子程序,那么這些子程序使用相同的局部存儲器。

當使用變量類型 OUT 和 TEMP 時,這些局部地址從相同嵌套級別的前一子程序取值。

預先定義的局部變量會生成正確的結果。如果不預先定義,相同嵌套級別的上一次被調用的子程序中的值會被保持。這樣會導致問題,特別是在邊沿信號檢測時。

原因:

當子程序被調用時,局部數據類型 IN 和 TEMP 不被初始化和刪除。

但是,局部數據類型 IN 和 IN_OUT 在子程序開始調用時被定義為分配的值或全局變量。

措施:

將局部輸出變量定義為 "IN/OUT" ,而不是 "OUT" 或 "TEMP" 可以增加可靠性。在下一個循環(huán)選擇全局變量做進一步測試。

為了評估這種行為,可以在開發(fā)程序時在每一嵌套級別的網絡1中調用子程序。

通過檢查程序功能,可以快速發(fā)現選錯的變量類型。