cyh1986
級別: 家園?
![]() |
我用S7-200編寫(xiě)了一個(gè)單鍵啟動(dòng)的程序,有幾個(gè)輸出,前面的輸出鎖后面的輸出。 但是我調試了一下,只要第一個(gè)按一下,后面的立即都有輸出。 對西門(mén)子子程序這塊還不是很明白,請大家幫忙看看 謝謝 |
---|---|
|
beiye1234
級別: 略有小成
![]() |
圖片:
![]() 子程序的變量,怪怪的! [ 此帖被beiye1234在2010-05-12 08:37重新編輯 ] |
---|---|
|
wwcwwc
級別: VIP會(huì )員
![]() ![]() |
你的子程序network1和network2的線(xiàn)圈#中繼A和#中繼B為什么要這樣寫(xiě)?我感覺(jué)邏輯上存在問(wèn)題。主程序(OB1)是應該可以這樣寫(xiě)的。 |
---|---|
|
zsb
級別: *
![]() |
我簡(jiǎn)單的看了下,你的子程序局部變量表里面沒(méi)有OUT變量,我想問(wèn)題也許出在這里 |
---|---|
|
zz680217
級別: 略有小成
![]() |
一樓的朋友,我把你的程序改了一下并下載到PLC中已成功,你在調用子程序的變量參數上存在一定的問(wèn)題,特別是用BOOL時(shí),盡量用IN/OUT而不要用OUT,同時(shí)在設計子程序時(shí)盡量做到精短,少用中繼線(xiàn)圈。因為200在參數返回容易出錯,出現你所發(fā)現的情況。最后向你說(shuō)明的沒(méi)有按照你原有程序全部更改,如有需要你自己完成吧。 |
---|---|
本帖最近評分記錄: |
cyh1986
級別: 家園?
![]() |
zz680217這位朋友,謝謝你的熱心支持 我也試了一下,把子程序給修改了一下,還是出現以前這樣的情況。 原因很有可能就是你說(shuō)的原因。 我開(kāi)始縱一位是我子程序調用的問(wèn)題 |
---|---|
|
wwcwwc
級別: VIP會(huì )員
![]() ![]() |
看了你的程序我說(shuō)說(shuō)個(gè)人觀(guān)點(diǎn),盡供參考。 因為我這里現在沒(méi)有實(shí)體進(jìn)行測試,可能程序還存在一些問(wèn)題,望見(jiàn)諒! 1) 子程序結構不夠嚴緊,同樣的功能占用字節稍稍偏大(可能是編程習慣問(wèn)題)。相同的功能用這樣調用子程序做法是可行的。程序盡量采用指令方式編寫(xiě)。直接能夠使用輸出條件的網(wǎng)絡(luò )段程序盡量少用(寄存)跳轉等方法,這樣對于程序的閱讀有幫助。手/自動(dòng)轉換條件功能最好不要寫(xiě)到子程序的調用中。 2) 主程序(OB1)中功能的啟動(dòng)條件既然用上升沿脈沖控制位,則子程序中應該用相應的置/復位指令。我是沿用你的主程序編法進(jìn)行。特別是一些手動(dòng)操作時(shí)正反轉頻繁的場(chǎng)所,需要解決置位后的復位問(wèn)題。同時(shí)可能會(huì )造成調用自動(dòng)操作時(shí),相關(guān)的輸出位不能有效復位。補救措施見(jiàn)第4項內容。啟動(dòng)信號條件最好用變址方式,把必要的程序邏輯關(guān)系做在一起,緊湊程序。 3) 急停按鈕必須使用B接點(diǎn)(常閉接點(diǎn),這樣可以在平時(shí)建立一個(gè)檢測急;芈氛Ec否的功能)。 4) 按我個(gè)人觀(guān)點(diǎn)在調用自動(dòng)操作功能時(shí),必須先復位手動(dòng)操作時(shí)的有關(guān)輸出點(diǎn)(按工藝要求選擇)。然后再作相關(guān)的自動(dòng)功能操作。反之也然。如在調用自動(dòng)時(shí)首先實(shí)現: LD SM0.0 A I3.3 //手/自動(dòng)的選擇 CALL SBR_1 //自動(dòng)子程序調用 R Q0.0,7 //意思是復位Q0.0 ~ Q0.7功能。當然也可以根據實(shí)際情況選擇復位位數內容。 5) 對于報警信息(故障內容)比較多的最好在專(zhuān)門(mén)的子程序或者在主程序(OB1)中進(jìn)行編寫(xiě)。統一在一起編寫(xiě)報警信息,提高效率,減少遺漏。 ![]() |
---|---|
|
cyh1986
級別: 家園?
![]() |
謝謝wwcwwc的回復 我設計這個(gè)子程序的初衷就是為了方便一鍵啟停的操作,像C語(yǔ)言似的,只要把一些相關(guān)的輸入輸出信號都列出來(lái),因為這些設備基本類(lèi)似,所以不要再多考慮,直接調用子程序。 但現在遇到這樣一個(gè)問(wèn)題,(原來(lái)我發(fā)的那個(gè)是有連鎖條件的),只要第一個(gè)啟停按鈕一按下,后滿(mǎn)所有的設備就立即啟動(dòng)了,按照我的理解,應該不會(huì )出現這樣的情況,我的子程序調用的條件里面有個(gè)啟停的上升沿的,沒(méi)有按那個(gè)上升沿后面的設備應該是啟動(dòng)不了的,后來(lái)我推斷應該是子程序的問(wèn)題,我猜想因為每個(gè)都調用的一個(gè)子程序,第一個(gè)調用只有,輸出局部變量變化了,第二調用的時(shí)候,直接把這個(gè)輸出局部變量給輸出呢?按照S7-200的說(shuō)法,對這個(gè)局部變量還不是很吃得透。 我的急停按鈕在電路上是,常閉接的二次回路,常開(kāi)接的PLC,選用的是1NO1NC的按鈕。 還請WWCWWC網(wǎng)友幫忙考慮考慮我以上描述的問(wèn)題! 前面有一位網(wǎng)友修改的程序我也實(shí)際測試了一下,確實(shí)符合我的要求,但是我移植到我的項目中就不行了。也不明白是什么原因。 |
---|---|
|