cyh1986
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 367 個
工控威望: 738 點
下載積分: 722 分
在線時間: 298(小時)
注冊時間: 2009-04-28
最后登錄: 2024-10-30
查看cyh1986的 主題 / 回貼
樓主  發(fā)表于: 2010-05-11 17:47
我用S7-200編寫了一個單鍵啟動的程序,有幾個輸出,前面的輸出鎖后面的輸出。
但是我調(diào)試了一下,只要第一個按一下,后面的立即都有輸出。
對西門子子程序這塊還不是很明白,請大家?guī)兔纯?br />謝謝
描述:西門子子程序調(diào)用
附件: 科行.rar (10 K) 下載次數(shù):579
網(wǎng)站提示: 請不要用迅雷下載附件,容易出錯
beiye1234
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 255 個
工控威望: 282 點
下載積分: 914 分
在線時間: 250(小時)
注冊時間: 2010-02-05
最后登錄: 2017-07-31
查看beiye1234的 主題 / 回貼
1樓  發(fā)表于: 2010-05-12 08:25
圖片:
子程序的變量,怪怪的!
[ 此帖被beiye1234在2010-05-12 08:37重新編輯 ]
wwcwwc
級別: VIP會員

精華主題: 0
發(fā)帖數(shù)量: 3393 個
工控威望: 3189 點
下載積分: 70387 分
在線時間: 1603(小時)
注冊時間: 2008-04-20
最后登錄: 2024-10-31
查看wwcwwc的 主題 / 回貼
2樓  發(fā)表于: 2010-05-12 14:06
你的子程序network1和network2的線圈#中繼A和#中繼B為什么要這樣寫?我感覺邏輯上存在問題。主程序(OB1)是應(yīng)該可以這樣寫的。
zsb
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看zsb的 主題 / 回貼
3樓  發(fā)表于: 2010-05-12 18:13
我簡單的看了下,你的子程序局部變量表里面沒有OUT變量,我想問題也許出在這里
zz680217
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 252 個
工控威望: 343 點
下載積分: 1822 分
在線時間: 525(小時)
注冊時間: 2008-12-03
最后登錄: 2024-11-05
查看zz680217的 主題 / 回貼
4樓  發(fā)表于: 2010-05-12 19:08
一樓的朋友,我把你的程序改了一下并下載到PLC中已成功,你在調(diào)用子程序的變量參數(shù)上存在一定的問題,特別是用BOOL時,盡量用IN/OUT而不要用OUT,同時在設(shè)計子程序時盡量做到精短,少用中繼線圈。因為200在參數(shù)返回容易出錯,出現(xiàn)你所發(fā)現(xiàn)的情況。最后向你說明的沒有按照你原有程序全部更改,如有需要你自己完成吧。
附件: 科行.rar (10 K) 下載次數(shù):349
網(wǎng)站提示: 請不要用迅雷下載附件,容易出錯
本帖最近評分記錄:
  • 下載積分:+1(wuhenke0000)
    cyh1986
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 367 個
    工控威望: 738 點
    下載積分: 722 分
    在線時間: 298(小時)
    注冊時間: 2009-04-28
    最后登錄: 2024-10-30
    查看cyh1986的 主題 / 回貼
    5樓  發(fā)表于: 2010-05-13 08:35
    zz680217這位朋友,謝謝你的熱心支持
    我也試了一下,把子程序給修改了一下,還是出現(xiàn)以前這樣的情況。
    原因很有可能就是你說的原因。
    我開始縱一位是我子程序調(diào)用的問題
    cyh1986
    級別: 家園?
    精華主題: 0
    發(fā)帖數(shù)量: 367 個
    工控威望: 738 點
    下載積分: 722 分
    在線時間: 298(小時)
    注冊時間: 2009-04-28
    最后登錄: 2024-10-30
    查看cyh1986的 主題 / 回貼
    6樓  發(fā)表于: 2010-05-13 10:11
    奇怪了,為什么你修改后的子程序移植到我現(xiàn)在的項目里面就不行了呢???
    wwcwwc
    級別: VIP會員

    精華主題: 0
    發(fā)帖數(shù)量: 3393 個
    工控威望: 3189 點
    下載積分: 70387 分
    在線時間: 1603(小時)
    注冊時間: 2008-04-20
    最后登錄: 2024-10-31
    查看wwcwwc的 主題 / 回貼
    7樓  發(fā)表于: 2010-05-15 08:00
    看了你的程序我說說個人觀點,盡供參考。
    因為我這里現(xiàn)在沒有實體進行測試,可能程序還存在一些問題,望見諒!
    1)    子程序結(jié)構(gòu)不夠嚴(yán)緊,同樣的功能占用字節(jié)稍稍偏大(可能是編程習(xí)慣問題)。相同的功能用這樣調(diào)用子程序做法是可行的。程序盡量采用指令方式編寫。直接能夠使用輸出條件的網(wǎng)絡(luò)段程序盡量少用(寄存)跳轉(zhuǎn)等方法,這樣對于程序的閱讀有幫助。手/自動轉(zhuǎn)換條件功能最好不要寫到子程序的調(diào)用中。
    2)    主程序(OB1)中功能的啟動條件既然用上升沿脈沖控制位,則子程序中應(yīng)該用相應(yīng)的置/復(fù)位指令。我是沿用你的主程序編法進行。特別是一些手動操作時正反轉(zhuǎn)頻繁的場所,需要解決置位后的復(fù)位問題。同時可能會造成調(diào)用自動操作時,相關(guān)的輸出位不能有效復(fù)位。補救措施見第4項內(nèi)容。啟動信號條件最好用變址方式,把必要的程序邏輯關(guān)系做在一起,緊湊程序。
    3)    急停按鈕必須使用B接點(常閉接點,這樣可以在平時建立一個檢測急;芈氛Ec否的功能)。
    4)    按我個人觀點在調(diào)用自動操作功能時,必須先復(fù)位手動操作時的有關(guān)輸出點(按工藝要求選擇)。然后再作相關(guān)的自動功能操作。反之也然。如在調(diào)用自動時首先實現(xiàn):
    LD    SM0.0
    A      I3.3                 //手/自動的選擇
    CALL  SBR_1              //自動子程序調(diào)用
    R      Q0.0,7             //意思是復(fù)位Q0.0 ~ Q0.7功能。當(dāng)然也可以根據(jù)實際情況選擇復(fù)位位數(shù)內(nèi)容。
    5)    對于報警信息(故障內(nèi)容)比較多的最好在專門的子程序或者在主程序(OB1)中進行編寫。統(tǒng)一在一起編寫報警信息,提高效率,減少遺漏。
    科行改進程序.zip (10 K) 下载次数:343
    cyh1986
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 367 個
    工控威望: 738 點
    下載積分: 722 分
    在線時間: 298(小時)
    注冊時間: 2009-04-28
    最后登錄: 2024-10-30
    查看cyh1986的 主題 / 回貼
    8樓  發(fā)表于: 2010-05-17 08:34
    引用
    引用第7樓wwcwwc于2010-05-15 08:00發(fā)表的  :
    看了你的程序我說說個人觀點,盡供參考。
    因為我這里現(xiàn)在沒有實體進行測試,可能程序還存在一些問題,望見諒!
    1)    子程序結(jié)構(gòu)不夠嚴(yán)緊,同樣的功能占用字節(jié)稍稍偏大(可能是編程習(xí)慣問題)。相同的功能用這樣調(diào)用子程序做法是可行的。程序盡量采用指令方式編寫。直接能夠使用輸出條件的網(wǎng)絡(luò)段程序盡量少用(寄存)跳轉(zhuǎn)等方法,這樣對于程序的閱讀有幫助。手/自動轉(zhuǎn)換條件功能最好不要寫到子程序的調(diào)用中。
    2)    主程序(OB1)中功能的啟動條件既然用上升沿脈沖控制位,則子程序中應(yīng)該用相應(yīng)的置/復(fù)位指令。我是沿用你的主程序編法進行。特別是一些手動操作時正反轉(zhuǎn)頻繁的場所,需要解決置位后的復(fù)位問題。同時可能會造成調(diào)用自動操作時,相關(guān)的輸出位不能有效復(fù)位。補救措施見第4項內(nèi)容。啟動信號條件最好用變址方式,把必要的程序邏輯關(guān)系做在一起,緊湊程序。
    3)    急停按鈕必須使用B接點(常閉接點,這樣可以在平時建立一個檢測急;芈氛Ec否的功能)。
    .......

    謝謝wwcwwc的回復(fù)
    我設(shè)計這個子程序的初衷就是為了方便一鍵啟停的操作,像C語言似的,只要把一些相關(guān)的輸入輸出信號都列出來,因為這些設(shè)備基本類似,所以不要再多考慮,直接調(diào)用子程序。
    但現(xiàn)在遇到這樣一個問題,(原來我發(fā)的那個是有連鎖條件的),只要第一個啟停按鈕一按下,后滿所有的設(shè)備就立即啟動了,按照我的理解,應(yīng)該不會出現(xiàn)這樣的情況,我的子程序調(diào)用的條件里面有個啟停的上升沿的,沒有按那個上升沿后面的設(shè)備應(yīng)該是啟動不了的,后來我推斷應(yīng)該是子程序的問題,我猜想因為每個都調(diào)用的一個子程序,第一個調(diào)用只有,輸出局部變量變化了,第二調(diào)用的時候,直接把這個輸出局部變量給輸出呢?按照S7-200的說法,對這個局部變量還不是很吃得透。
    我的急停按鈕在電路上是,常閉接的二次回路,常開接的PLC,選用的是1NO1NC的按鈕。
    還請WWCWWC網(wǎng)友幫忙考慮考慮我以上描述的問題!


    前面有一位網(wǎng)友修改的程序我也實際測試了一下,確實符合我的要求,但是我移植到我的項目中就不行了。也不明白是什么原因。
    wwcwwc
    級別: VIP會員

    精華主題: 0
    發(fā)帖數(shù)量: 3393 個
    工控威望: 3189 點
    下載積分: 70387 分
    在線時間: 1603(小時)
    注冊時間: 2008-04-20
    最后登錄: 2024-10-31
    查看wwcwwc的 主題 / 回貼
    9樓  發(fā)表于: 2010-05-18 09:50
    為什么說不行?原因?如果直接移植過來?峙掠兄貜(fù)調(diào)用地址的可能。請按思路重新編寫子程序試試。