cyh1986
級別: 家園常客
![]() |
我用S7-200編寫了一個單鍵啟動的程序,有幾個輸出,前面的輸出鎖后面的輸出。 但是我調試了一下,只要第一個按一下,后面的立即都有輸出。 對西門子子程序這塊還不是很明白,請大家幫忙看看 謝謝 |
---|---|
|
wwcwwc
級別: VIP會員
![]() ![]() |
你的子程序network1和network2的線圈#中繼A和#中繼B為什么要這樣寫?我感覺邏輯上存在問題。主程序(OB1)是應該可以這樣寫的。 |
---|---|
|
wwcwwc
級別: VIP會員
![]() ![]() |
看了你的程序我說說個人觀點,盡供參考。 因為我這里現在沒有實體進行測試,可能程序還存在一些問題,望見諒! 1) 子程序結構不夠嚴緊,同樣的功能占用字節稍稍偏大(可能是編程習慣問題)。相同的功能用這樣調用子程序做法是可行的。程序盡量采用指令方式編寫。直接能夠使用輸出條件的網絡段程序盡量少用(寄存)跳轉等方法,這樣對于程序的閱讀有幫助。手/自動轉換條件功能最好不要寫到子程序的調用中。 2) 主程序(OB1)中功能的啟動條件既然用上升沿脈沖控制位,則子程序中應該用相應的置/復位指令。我是沿用你的主程序編法進行。特別是一些手動操作時正反轉頻繁的場所,需要解決置位后的復位問題。同時可能會造成調用自動操作時,相關的輸出位不能有效復位。補救措施見第4項內容。啟動信號條件最好用變址方式,把必要的程序邏輯關系做在一起,緊湊程序。 3) 急停按鈕必須使用B接點(常閉接點,這樣可以在平時建立一個檢測急停回路正常與否的功能)。 4) 按我個人觀點在調用自動操作功能時,必須先復位手動操作時的有關輸出點(按工藝要求選擇)。然后再作相關的自動功能操作。反之也然。如在調用自動時首先實現: LD SM0.0 A I3.3 //手/自動的選擇 CALL SBR_1 //自動子程序調用 R Q0.0,7 //意思是復位Q0.0 ~ Q0.7功能。當然也可以根據實際情況選擇復位位數內容。 5) 對于報警信息(故障內容)比較多的最好在專門的子程序或者在主程序(OB1)中進行編寫。統一在一起編寫報警信息,提高效率,減少遺漏。 ![]() |
---|---|
|