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

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

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

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


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

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