2.27.2021

Mode

(Google譯)Mode

一種非常常見的梯形圖邏輯編程模式是Mode模式。大多數機器都有模式選擇機制,最常見的模式是自動(自動)和手動:

模式:自動/手動
模式:自動/手動

上面的“自動/手動模式”模式具有兩個有用的屬性:

  • 在程序啟動時,由於“自動模式”線圈將默認設置為“關”,因此“手動模式”將打開
  • 系統永遠不能同時處於自動模式和手動模式

第一個屬性很重要,因為我們永遠不希望系統在“自動模式”下啟動。在手動模式下啟動並讓操作員請求自動模式總是更安全。第二個屬性是我們所有模式系統都想要的屬性:一次只能激活一個模式。

有些機器具有兩種以上的模式。這裡最明顯的例子是機械壓力機,它具有英寸,單張和連續等模式,有時還具有其他幾種特殊模式。有時我們會在其中添加一個關閉模式,這意味著未選擇任何活動模式。即使在多模式機器的情況下,我們也希望邏輯具有相同的兩個屬性:安全的默認狀態和模式的排他性。

這是帶有附加關閉模式的三模式機器:
模式:三種模式並關閉
Mode:三種模式及關閉模式

您可能已經註意到,“Mode”模式只是“啟動/停止電路”模式的擴展,只是帶有更多的“啟動”按鈕。沒錯,我們只是強制一次只能“啟動”一個模式。

請注意,關閉模式是打開任何其他模式的先決條件。這樣可以確保在切換模式時至少有一個PLC掃描,其中沒有一個模式處於活動狀態(“關”除外)。一些工程師認為這是可取的(儘管我不認為這是一個非常重要的方面)。也許您可能希望在模式之間執行一些邏輯,並且檢查“關”線圈是實現此目的的一種好方法。請注意,這本身並不能增強排他性。也就是說,如果我們從“關閉”模式開始,並且模式按鈕是物理按鈕,而我同時按下了其中兩個按鈕,則機器可能會一次出現兩種模式。從所有其他按鈕插入常閉觸點在每個模式行中,結合“關閉”模式處於活動狀態的先決條件,是強制執行排他性的原因。如果按住兩個按鈕,則所有梯級都無法觸發,並且機器將保持在“關閉”模式。

儘管大多數現代機器通過HMI使用模式選擇,而有些機器具有物理模式按鈕,但是許多較舊的機器都使用選擇器開關。在那種情況下,一個位置通常不接線(通常為“關”),而其他選擇器開關位置均接線到一個輸入中。在那種情況下,您不需要在每種模式下都用分支電路進行自保持(因為開關本身“記住”了它的選擇),但是您應該執行類似的操作來增強排他性(如果發生線路短路):

模式:三模式加關閉選擇開關
Mode:三模式加關閉選擇開關

請注意,在這種情況下,四個線圈之一將始終處於打開狀態,並且如果發生接線短路(兩個模式輸入處於打開狀態),則機器將默認為關閉模式(不必處於關閉狀態)。關閉模式,但應為“安全”模式,如“手動”)。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Mission

(譯)Mission

Mission Ladder Logic編程模式用於在機器中進行更高級別的決策。儘管許多機器非常簡單,以至於它們在“自動模式”下只有一個步驟序列,但有些機器卻更為複雜。

這種複雜機器的一個很好的例子是自動存儲和檢索系統或AS / RS。這種類型的機器可以執行多種任務,例如將進來的物料箱存儲在存儲架中,或者從存儲庫中拾取物料箱並將其帶到輸出站。通常將這類問題分解為較小的任務,例如:

  • 從入料站取工件
  • 將工件放在儲位X
  • 從儲位X取得工件
  • 將工件放至出料站

在Mission模式中,這些較高級別的Mission中的每一個都稱為“任務”。該邏輯負責選擇適當的任務以執行下一個任務,並監視該任務的完成情況,或者在適當情況下中止該任務。以下是一些典型的任務模式邏輯:

任務
Mission

這是一個只有兩個任務的系統,但是如您所見,它可以擴展到更多任務。一項重要功能是邏輯必須確保互斥,任務永遠不會同時進行。在大多數情況下,這意味著一次僅執行一個任務,但是在某些系統中,如果兩個不同的任務都不需要訪問相同的資源,則它們可以重疊。

Mission模式通常與Step模式一起使用。具體而言,任務1線圈成為任務1序列的序列開始條件。同樣,序列。在上述邏輯中,從“步進”模式完成的線圈變為“任務1完成”條件。

在組織Ladder邏輯時,請考慮將任務邏輯放在單個程式或Ladder文件中。然後將每個單獨任務的順序邏輯放在自己的程式中。最後,將處理每個物理設備控制的低階邏輯放在為該設備命名的程式中。例如,一個用於氣缸推出和縮回的程式,另一個用於啟動和停止電動機的程式,以及一個用於加熱器的溫度控制邏輯的第三個程式。這是使邏輯更加“模塊化”的好方法,它將幫助閱讀程序的人找到與他們感興趣的設備相關的邏輯。因此,梯形邏輯程式可能類似於:

  1. 選擇任務
  2. 任務1序列
  3. 任務2序列
  4. 氣缸動作
  5. 液壓泵動作
  6. 油箱溫度控制

梯形圖邏輯程序的更多模式

Written with StackEdit.

Input Map

(譯)輸入映射

輸入映射模式是一種未充分使用且有價值的梯形圖邏輯編程模式。邏輯本身很簡單:
輸入圖
輸入映射

在大多數傳統的PLC中,您通過輸入在I / O結構中的物理位置來引用輸入。例如,在Allen-Bradley SLC500處理器中,I:4/0表示輸入插槽4的位0。建議您為此位創建描述性註釋,以便您可以輕鬆查看與該輸入連接的內容。

引入ControlLogix / CompactLogix控制器系列後,發生了兩件事。首先,實際的輸入名稱更長了:Local:4:I.Data.0的含義與SLC500中的I:4/0相同。其次,輸入現在與程序掃描非同步更新。讓我告訴你那是什麼意思:

非同步輸入
非同步輸入

在這兩行Ladder中,我們使用一個輸入的常開(NO)觸點為線圈A通電,使用同一輸入的一個常閉(NC)觸點為線圈B通電。您可以假設線圈A在同一程序掃描期間,線圈B永遠不會同時打開,但是如果PLC具有非同步輸入,那將是錯誤的。由於輸入掃描是與程序掃描非同步進行的,因此輸入實際上可以在求解第一個梯級和求解第二個梯級之間的時間之間更改狀態。這是一個非常隱蔽的問題,因為它很少會發生,但是有可能發生。這使得它成為除錯時潛在的非常困難的問題。

ControlLogix / CompactLogix PLC的這些功能使“輸入映射”模式相當普遍。許多PLC程序在開始時就有一個範例,稱為“映射輸入”,該例程將原始物理輸入作為觸點,並使用它來驅動內部繼電器線圈。然後,內部繼電器線圈將在程序的其他任何地方使用,而輸入本身在該位置僅使用一次。

除了將輸入同步到程序掃描之外,“輸入映射”模式還具有其他一些優點。例如,PLC輸入有時會且確實會失敗。大多數機器都具有備用輸入,因此技術人員通常只會將電線移到另一個輸入上,而不是更換輸入卡(這很昂貴,如果您需要立即對其進行修復,則不可能)。這意味著他們必須更改邏輯,以便在程序中使用的所有地方都使用新輸入。一些輸入僅使用一次或兩次,但是某些輸入可能使用數十次甚至數百次(例如,想像一個故障復位按鈕)。如果使用“輸入映射”模式,則只需要在一個位置更改程序即可。

同樣,您可以將“輸入映射”模式與“除彈跳”模式結合使用。如果發現輸入上的觸點彈跳或電氣噪聲有問題,那麼已經準備好了輸入映射模式,這意味著您現在可以在一個單獨的位置添加除彈跳邏輯,而不會影響程序的其餘部分。

此外,在支持標籤名稱而不是直接存儲器地址的PLC上,您可以將輸入映射到比連接輸入的物理位置更具描述性的標籤名稱。您還可以將輸入映射到較短的緊湊標籤名稱(例如I04.0),這比在Local:4:I.Data.0上更容易安裝在電線的標籤上。

此模式的使用特定於PLC。例如,Beckoff的TwinCAT PLC軟件已經包含I / O映射功能,因此您可以使用其係統管理器將MyMachine.MotorRunning之類的內部變數映射為物理輸入。他們的I / O掃描也與程序掃描同步,因此與Beckhoff TwinCAT系統一起使用輸入映射模式的優勢較少。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Debounce

我就是文章中所述會在每個輸入點都加上除彈跳的工程師…

(譯)除彈跳

由於越來越多地使用諸如近接開關之類的固態傳感器,因此您不太可能看到這種梯形邏輯編程模式,但是“除彈跳”模式在許多項目中仍然派上用場:
除彈跳
除彈跳

當您處理可能易於“彈跳”的“幹接點”輸入時,“除彈跳”模式很有用。在電路閉合時,觸點可能會彈跳,這可能會導致輸入暫時在導通和關斷狀態之間振盪。當觸點由於電弧而斷開時,輸入也會振盪。附近高電流導體產生的電噪聲實際上會在低壓輸入中感應出電脈衝,這可能使您的邏輯誤以為輸入在很短的時間內處於相反狀態。

除彈跳模式是狀態線圈模式的一種變體。在這種情況下,我們使用計時器上的延遲作為線圈的觸發。在更改內存線圈的狀態之前,此計時器“確保”輸入確實打開。然後,線圈將自身自保持。在允許破壞線圈的電路自保之前,使用延遲關閉計時器來確保輸入確實關閉。

可以修改計時器的設定時間以適應這種情況。如果使用除彈跳模式來抑制電噪聲,則可以將計時器縮短到幾毫秒,但是如果問題是機械接觸的彈唬,則可能需要50或100毫秒(甚至更長)。

除彈跳模式有一些缺點:首先,它會對輸入做出反應時延遲機器的響應時間。我們希望大多數機器盡可能快地運行,並且希望避免不必要的延遲。其次,它消耗了計時器,這對於資源有限的舊式PLC來說更值得關注。第三,它使邏輯複雜化。

一些工程師甚至還為機器上的每個輸入添加了一個除彈跳功能。由於我剛剛列出的缺點,我會認為盲目添加Debounce邏輯是一種反模式。我建議您僅在知道自己需要此模式時,或者根據以往的經驗很可能需要使用此模式時,才使用此模式。

在大多數情況下,可以通過一些簡單的選擇來避免除彈跳邏輯。首先,在可能的地方使用固態和/或高質量的傳感器和開關,這些傳感器和開關彈跳的可能性較小。其次,在機器上佈線大電流導線時,應使其不與小電流控制導線並聯。第三,檢查輸入卡是否具有可以打開或調節的過濾器功能。該濾波器可用於從雜散電噪聲中濾除高頻(短持續時間)脈衝。

“除彈跳”模式通常與“輸入映射”模式結合使用。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Step

(譯)步進

步進模式是梯形圖邏輯編程模式,它是機器自動模式的基本組成部分。每個步驟的邏輯很簡單:

步
步進

您可以組合任意數量的步驟以形成一個序列。這些步驟將順序執行。當“進行中的線圈”打開時,這應該是在程序中其他位置啟動機械裝置的信號。例如,如果步驟是“推出氣缸”,則可以使用來自“進行中”線圈的觸點來打開電磁閥以讓氣缸推出。步驟保持活動狀態(即,“進行中的線圈”保持打開狀態),直到“步驟完成”條件為真。在氣缸推出的範例中,“完成步驟”條件可以是“氣缸推出”輸入。

考慮到您可能需要幾個步驟來推出氣缸。如果您需要在第3步和第8步中都推出氣缸,那麼您的“推出氣缸”邏輯可以同時包含“正在進行的第3步”和“正在進行的第8步”中的觸點。

這是一個兩步序列的示例。步驟1是“推出氣缸”,而步驟2是“縮回氣缸”:

兩步
兩個步進

序列開始條件是啟動序列的條件。這應該類似於“機器處於自動模式,正在運行自動循環,存在部件,並且尚未處理部件”。當序列完成時,則Seq.Complete線圈打開。可以與“設置/重置”模式結合使用,以鎖存一個存儲位,以指示該零件已被處理。大概這會導致另一個序列開始,例如“卸載零件”序列。或者,我們可能只等操作員卸下零件。

步進模式經常與任務模式一起使用。在這種情況下,“Sequence Start”將是“任務”(進行中)線圈和“序列”。完整的線圈將發出任務結束的信號。

請注意,如果在序列過程中退出“Sequence Start”條件,則整個序列將重置(所有“完成”線圈將關閉,“Seq. Complete”線圈也將關閉)。

還要注意,如果序列開始並且氣缸已經打出,那麼“進行中的步驟1”線圈將永遠不會打開。它將直接跳到步驟2。在這種情況下,這可能就是您想要的。如果不是,您可以考慮將條件“汽缸未推出”置於“序列開始”條件中。另一種選擇是在進入下一步之前,強制“進行中”線圈至少打開一次掃描。這是相對簡單的:

步驟:變體
步進:變體

通過在第一個rung中在“Step Complete”條件之前添加“Step In Progress”的觸點,我們確保在完成該步驟之前,“Step In Progress”線圈必須打開至少一個掃描。您甚至可以採用這種形式的模式並刪除“Step Complete”條件:

步驟:一桿
步進:一次觸發

在此模式的變體中,“進行中”線圈將打開一次以進行精確的一次掃描。這使其成為“一次性步驟”。單步操作對於零件跟踪和數據記錄非常有用,因為這些操作通常只需要單次掃描(例如設置位,進行測量或將值記錄到零件歷史記錄中)。

梯形圖邏輯程序的更多模式

Written with StackEdit.

State Coil

(譯)狀態線圈/錯誤線圈

梯形邏輯編程模式的最常見範例之一是狀態線圈(有時稱為記憶線圈)。該模式是“自保迴路”模式的擴展。該模式包括一個觸發條件,一個線圈,線圈中的觸點圍繞觸發條件分支,以“自保持”,然後通過其他條件“破壞自保”:
狀態線圈
狀態線圈

自保迴路一樣,如果PLC斷電或程序重置,則狀態線圈將始終恢復為斷電狀態。但是,與“自保持迴路”不同,狀態線圈在程序正常運行期間會打開和關閉。該模式的目的是記住一個代表機器內部狀態的真/假條件。這是一個範例時序圖:

狀態線圈時序圖

您通常會看到State Coil模式代表“錯誤”狀態。假設您的機器出現“錯誤”(即必須讓機器停止運行且向操作員報告情況,並且他們須要予以確認)。在此範例中,“錯誤條件”是上面邏輯中的“觸發器”觸點。例如,它可能是馬達上的過熱傳感器。當過熱傳感器指示錯誤時,它將為錯誤(狀態線圈)通電,並且錯誤將繼續通電。錯誤線圈的觸點通常用於使機器(或至少是馬達)停止運轉,以防止損壞機器。該線圈的另一個觸點可能用於驅動警報燈,或在屏幕上顯示一條消息以通知操作員該問題。

狀態線圈-過熱錯誤

過熱錯誤

最後請注意,如果錯誤狀況仍然“處於活動狀態”(即,過熱開關仍指示過熱狀況),則錯誤將維持自保持狀態。這就是當有人說“必須清除錯誤才能將其重置”的意思。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Start Stop Circuit

(譯)啟動/停止電路

啟動/停止電路是一個非常有用的梯形邏輯編程模式。此模式是“自保迴路”模式的擴展,類似於“狀態線圈”。但是,在狀態線圈為“觸發主導”(即觸發條件優先於“中斷條件”)的情況下,啟動/停止電路為“停止主導”:

啟動/停止電路

啟動/停止電路

與自保迴路一樣,如果PLC處於關閉狀態或梯形邏輯程序被重置,則運行線圈將始終恢復為斷電(關閉)狀態。這是一個有用的屬性,因為在啟動機器時,我們可能希望馬達等處於關閉狀態,直到邏輯決定啟動它們為止。

該電路的輸入為“啟動”和“停止”條件。您可以想像這兩個按鈕都是操作員屏幕上的瞬時按鈕,而操作員實際按下按鈕時這些按鈕都處於打開狀態。如果操作員按“啟動”按鈕,則運行線圈將打開,並自保持,直到操作員按“停止”按鈕。該模式是“停止主導”模式的原因是,我們希望在兩個信號都處於活動狀態的情況下,“停止”條件比“開始”條件具有更高的優先級別。想像一下由於某種原因啟動條件被卡住的情況。至少操作員可以通過按住“停止”按鈕來停止馬達等,直到他們可以通過主開關關閉機器。這是一個示例時序圖:

啟動停止電路時序圖
如果您想像“開始”和“停止”是連接到PLC輸入的物理按鈕,則這更有意義。在這種情況下,我們通常會使用“常開”觸點連接“開始”按鈕(因此,按下“開始”按鈕可打開輸入),而我們將使用“常閉”觸點為“停止”按鈕連接(因此,按下“停止”按鈕可將輸入關閉)。常開觸點可以在“ON”位置連接,並且使“停止”按鈕優先於“開始”按鈕更有意義。在這種情況下,邏輯看起來略有不同:

帶NC停止按鈕的啟動/停止電路

帶NC停止按鈕的啟動/停止電路

按鈕以這種方式進行接線的原因是,如果斷開了與“停止”按鈕的連接,或者失去了“停止”按鈕的電源,則機器將像按下了“停止”按鈕一樣,馬達等的動作會停止。與允許馬達繼續運行而無法使其停止運行相比,這可能是一種更安全的條件。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Set Reset

雖然這篇文章中不建議對同一個位元多次使用設置/重置模式,但不幸的是,個人的ST程式較徧好這種寫法…

(譯)設置/重置

您將永遠不會看到那麼重要卻更經常被濫用的梯形圖邏輯編程模式了。設置/重置模式,也稱為鎖存/解鎖模式,或簡稱為“鎖存位”,用於記住必須在斷電後保持的機器的某些開/關狀態:

設置/重置

設置/重置

請注意,在Allen-Bradley PLC中,您將看到使用的“鎖存(L)”和“解鎖(U)”一詞,而不是“設置和重置”。

在上面顯示的邏輯中,這是此模式“重置優先”狀態。這是因為如果同時激活“設置”和“重置”條件,則記憶位元將被重置。當然,您可以通過簡單地逆轉邏輯來使此轉為“設置優先”:

設置/重置-設置主導

設置/重置-設置主導

在您真正理解此模式之前,您需要了解一些梯形邏輯的來源。PLC的發明之前(和許多年_之後_)的機器邏輯與實際的物理編程繼電器。當PLC掉電時,PLC中的正常“線圈”(例如,在“啟動/停止電路”模式中可見)將恢復為斷電狀態(“關”)的原因是其目的是模仿繼電器的行為。如果關閉機器的主電源開關,則所有繼電器線圈都會斷電,因此它們都將恢復為斷電狀態。

當然,即使在那些日子裡,即使機器斷電,有時您還是希望機器“記住”某些情況。為此,您可以購買一種特殊的設備,稱為兩線圈閉鎖繼電器。該繼電器中有兩個線圈:置位線圈和復位線圈。當給Set線圈通電時,它會將內部機構移至“ on”位置,但該位置在彈簧力的作用下得以機械保持。給復位線圈通電會使內部機構移至“關閉”位置。如果兩個線圈均未通電,則繼電器將保持在其最後位置,因此為什麼將其稱為“閉鎖繼電器”。

當發明PLC時,他們想模仿這種兩線圈繼電器邏輯,這就是為什麼他們將“設置/重置”功能分成兩個線圈:“ S”和“ R”(或“ L”和“ U”)的原因。Ladder工程師必須負責任地使用它們,但不幸的是,許多工程師沒有這樣做。不幸的是,沒有什麼可以阻止您在程式中散佈相同 bit 的多個重置線圈。這使得邏輯變得更加難以理解和排除故障。在同一存儲位上多次使用置位或複位線圈被認為是反模式。我強烈敦促您構造梯形邏輯,以使用上面顯示的形式之一,以便每個存儲位都具有一個置位線圈和一個復位線圈。不僅如此,還請把它們放在相鄰的Ladder上。

當我編寫自己的梯形圖編輯器時,我堅信該語言應防止新手犯此錯誤,因此它僅具有組合的Set / Reset指令:

設置/重置-SoapBox捕捉

設置/重置– SoapBox(譯注:這是原作者自己實作的Plc軟體)

該語言根本不允許您為同一存儲位使用兩個置位或兩個復位線圈。

設置/重置模式通常用於機器中的零件跟踪。假設您有一台機器,其中機器人將零件放置到夾具中,然後對該零件執行一些製造操作(例如磨削或銑削操作),然後另一個機器人將零件從夾具中移除,然後將其移至下一個零件車站。理想情況下,固定裝置中將有一個傳感器,以指示是否存在零件。您將需要某種方式來“記住”在該零件上執行的製造操作的狀態。首先,您將需要進行“設置/重置”以記住製造操作已經開始,其次,您將需要另一次“設置/重置”以記住製造操作已經完成。萬一停電,機器也可以恢復:如果兩個內存均未打開,那麼您仍然需要在零件上執行製造操作,如果兩者都啟用,則只需要從固定裝置上卸下零件即可。如果“啟動”內存已打開,但“完成”內存已關閉,則您可能需要報廢零件,或者您可以繼續操作。

額外的功勞:PLC旨在模仿繼電器邏輯。但是,數字邏輯(以微芯片和晶體管的形式)具有數字鎖存器的概念,也稱為“觸發器”或“設置/重置鎖存器”。重要的是要注意,這樣的數字電路不會在停電時保持其狀態。有趣的是,PLC的Allen-Bradley系列使用電池支持的SRAM(實際上只是大量的觸發器陣列)來存儲程序狀態。當PLC斷電時,內部電池將閂鎖保持在閂鎖狀態。請注意,此電池不會永遠持續使用,如果您讓Allen-Bradley PLC長時間不通電,則會丟失其內存。其他PLC依靠將其內部狀態寫入“永久性存儲”介質(例如內置Flash或硬碟)中,並且它們被設計為在電容中儲存足夠的電力以在斷電後仍可記憶。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Ladder的設計模式

PLC的設計模式

寫了一陣子的plc程式,雖然我都是用ST來寫,但主要的寫法觀念還是來自於Ladder的順序邏輯,之前也好奇除了基本的互鎖之類的方式,有沒有其它的寫法,那時候就有看過這一系列的文章,現在有一點時間,就簡單的做了一下翻譯(當然9成以上是 google翻的,僅讓句子變得更通順),推薦給大家。

(譯)階梯圖邏輯程式的模式

如果您熟悉Java或C#等語言的PC編程,那麼您可能會了解《Design Patterns: Elements of Reusable Object-Oriented SoftwarePatterns of Enterprise Application Architecture。這些書是關於軟體設計模式的。

作為一個寫了很久的Ladder的工程師,我認為與較新進的工程師分享經驗的一種方法是組織一系列用於Ladder編程的常用模式。Ladder編程模式列表有兩個目的:首先,每個模式都是使用Ladder解決常見問題的工具,並且在您的工具箱中包含這些模式將使您能夠更快地編程,可花費更多時間專注於您程式中更高層次的結構;其次,由於這些是常見的模式,因此您將開始發現更容易閱讀別人的Ladder,而其他有經驗的工程師也會發現更容易遵循您的邏輯。

  1. Sealed in Coil (自保持)模式
  2. State Coil/Fault Coil 模式
  3. Start/Stop Circuit 模式
  4. Set/Reset 模式
  5. Flasher 模式
  6. Debounce 模式
  7. Input Map 模式
  8. Step 模式
  9. Mission 模式
  10. Five Rung 模式
  11. Mode 模式

Written with StackEdit.

FiveRung

寫PLC程式時,我用Function Block建了很多常用元件,後來發現我在元件中採用的思考方式接近這個 Five Rung 模式,只是它更嚴謹了些。

(譯)五階

最具爭議的梯形邏輯編程模式可能是Five Rung邏輯塊。模式的目的是封裝單個機器“作動”所需的所有元素。構成作動的概念有點模糊,但通常如下:

  • PLC做一些動作來啟動作業(例如打開閥門或告訴機器人運動)
  • 有某種信號指示運動已完成(例如傳感器)
  • 我們要監視完成時間,如果花費的時間太長,則會產生故障

可以想像,很多機器控制都可以利用這種模式。每當您的氣缸帶有反饋傳感器(伸出/縮回)時,您都可以在其中扔出兩個五階邏輯塊。當您必須命令運動控制器或機器人將一個或多個軸移動到給定位置時,也可以使用它。

之所以稱為五階模式,是因為通常使用5個線圈:

  • 前提條件(又名觸發器)
  • 安全
  • 命令
  • 完成(也稱為“就位”)
  • 錯誤

五階
五階

這種模式的某些變體會將“安全”梯級置於“觸發”梯級之前,但我想反過來,因為“觸發”梯級確實指示運動何時開始。在典型程序中,如果您使用“步進”模式,則觸發器將由“步進進行中”觸點驅動。請注意,在更複雜的程序中,此動作可能是由序列中的許多不同步驟啟動的,因此您只需在此處並行放置一堆“正在進行中”的聯繫人即可。在不使用步進模式的程序中,觸發線圈可以直接由邏輯驅動,例如推出一些其他氣缸,然後輸入零件。重要的是要認識到,Step模式具有更大的可擴充性,並且對於較大的程序而言更好,但這不是唯一的方法。

觸發線圈只需要打開就可以啟動作動,並且僅在機器處於自動模式時才起作用。觸發線圈不必一直保持開啟狀態。在某些情況下,通常將作動完成傳感器作為常閉觸點放在此Rung中,這樣,如果軸已經在該位置,運動就不會啟動。在我們的案例中,這是多餘的,因為我們稍後會處理,如您所見。

安全梯級是在整個運動過程中必須滿足的一組條件。典型範例是“所有E-Stops OK”,但您在此處看到的其他情況是來自乾擾軸的信號。例如,假設您有兩個氣缸A和B,並且一次只能推出其中一個。通常將“氣缸A縮回”傳感器(以及“氣缸A推出”輸出)放在“氣缸B推出五階”安全梯級中,反之亦然。這是對您的邏輯的很好的雙重檢查,因此,即使您在序列邏輯中犯了一個錯誤,至少也可以防止兩個氣缸相互碰撞。

在此模式下,命令梯級充當記憶。它記得我們正在嘗試執行此作動。它可以通過觸發信號在自動模式下啟動,也可以通過按鈕或其他手動控制在手動模式下啟動。請注意,即使在手動模式下也必須滿足安全條件,因此我們不冒險讓操作員無意中撞到機器。一旦命令線圈接通,它就會自保持,通常直到動作完成為止,但是如果安全梯級off(基本上是中止),則電路也會斷開。

請注意,上面的範例顯示了“自動模式”信號,但是通常會看到該信號已被“自動循環運行”信號替換,因為大多數機器都要求您將機器置於“自動模式”,然後使用另一個按鈕啟動循環。有時,這是在“命令”梯級中捕獲的,而有時是在“觸發”梯級中捕獲的。

In Position rung負責弄清楚您如何知道運動已完成。如果您有傳感器,則可以使用它。如果您從運動控制器或機器人返回了“運動完成”信號,則也可以輕鬆地對該信號使用上升沿檢測(在這種情況下,我將其稱為“完整”梯級,而不是“In Position”梯級)。在執行下一步之前,在此梯級中放置一個計時器以“確保”運動確實已經完成也很常見。我寧願不使用計時器,除非我的機器出現某種麻煩的問題,但是我已經看到了一些邏輯,在每個位置梯級中都有一個計時器。計時器的問題在於,它們會減慢您的周期時間,而沒人願意這樣做。請注意,最好使用“就位”線圈作為該軸處於此位置的規範指示。意思是說,如果程序的其他部分需要知道氣缸處於“推出”位置,則最好使用“In Position”線圈,而不要使用輸入本身。例如,由於干涉而不得不將傳感器移至另一個輸入,或者由於“彈跳”而要添加計時器,則您可以在同一個地方更改邏輯。或者由於“彈跳”而要添加計時器。如果您使用的是步進模式,通常在“步進完成”梯級中使用“就位”信號。

接下來的兩個梯級一起構成了Fault梯級,有時您可能會看到它們組合成一個梯級,具體取決於工程師的偏好。Fault梯級為作動實現了一個簡單的逾時錯誤。如果您要推出氣缸,並且花費一秒鐘以上的時間,則可能有問題。這是狀態線圈模式的示例,並且要求操作員重置故障才能繼續。重要的是要將此故障報告給操作人員,以指出是哪個作動引起了問題。請注意,它還會退出安全梯級以中止運動。這是可選的,但通常是一個好主意,因為軸或氣缸可能會被卡住,並且您想停止嘗試移動它以防止進一步損壞機器。但其它狀況下,您並不總是想停止作動,這時就要自己判斷寫法了。

在我的程序中,通常將使用梯形圖邏輯模式的三級系統:

  • 最高級別:任務模式
  • 中級:Step模式
  • 最低級別:Five Rung模式

例如,任務可能是“撿起零件”。然後將有一個程序,其中包含執行拾起零件序列所需的所有步驟,例如“推出氣缸並打開真空”,“推出夾爪”,“驗證真空吸力”,“縮回夾爪”,“縮回氣缸”。然後,我將有幾個低階程序,例如“ Arm”,“ Gripper”和“ Vacuum”。Arm和Gripper程序中每個都有兩個“五個梯級”邏輯塊,一個用於“推出”,一個用於“縮回”。真空並不是真正的運動,因此它具有更簡單的開/關型邏輯,並且其中包含某種真空傳感器反饋邏輯。

我應該警告您,當某人第一次看到Five Rung邏輯塊時,他們通常會問:“為什麼只想要打開一個閥就需要這麼多的邏輯?” 好吧,這就是經驗豐富的梯形邏輯程序員和經驗不足的程序員之間的區別。最終,經驗不足的程序員將編寫一些非常簡單明了的邏輯來打開和關閉閥門,然後當氣缸運動未完成(或傳感器停止工作)時,他們將不得不添加某種故障判斷。他們將不得不區分它是在手動模式下而不是在自動模式下運行的,並且在他們知道之前,他們已經創建了自己的Five Rung邏輯塊的自定義版本。在他們的下一個程式中,他們可能仍會這樣做。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Flasher

Google 把rung翻譯為「梯級」,讀起來怪怪的,直接改回原文,基本上就是指Ladder中的一行的意思。
話說google翻譯技術性文件太強了,譯完後幾乎不太需要修改。

(譯)閃爍電路

這種Ladder編程模式會使大多數新手感到沮喪,尤其是如果他們並沒有真正“領會”Ladder的話。 您如何每秒使閃光燈閃爍一次? 這是Flasher模式的兩次計時器變體:

閃爍電路-兩個計時器變體

閃爍電路-兩個計時器變體

它是這樣工作的:最初兩個計時器都關閉,並且它們的經過時間值設置為零。定時器1立即開始計時。500毫秒後,計時器1完成計時,其輸出觸點(有時稱為“完成位”)打開。發生這種情況時,計時器2開始計時,並且“閃光燈”線圈也打開。再過500 ms,定時器2完成計時,其輸出觸點打開。在下一次掃描時,這將導致定時器1的Rung輸入條件關閉,這將立即重置定時器1,這意味著定時器1的輸出觸點也將關閉,在同一次掃描中重置定時器2並關閉“閃光燈”線圈。現在兩個定時器均已關閉,因此在下一次程序掃描時,定時器1將再次開始計時,並重複該循環。這是一個示例時序圖:

閃光時序圖

注意事項:閃光燈在周期的後半段點亮(即,它熄滅500毫秒,然後再點亮500毫秒)。如果希望閃光燈線圈最初處於打開狀態,請將第三Rung中的計時器1觸點從常開(NO)更改為常閉(NC)。

定時器2的輸出觸點僅在進行一次程序掃描時保持打開狀態。這意味著它的作用就像單發或脈衝。程序掃描時間在PLC中可能相差很大。具有較慢處理器和較長梯形圖邏輯程序的較舊PLC的掃描時間可能在數百毫秒內。較新的PLC的典型掃描時間為幾十毫秒,而基於PC的PLC(如Beckhoff的TwinCAT)的掃描時間可能在毫秒以下。這很重要,因為它會影響計時器的可重複性和準確性。如果您的PLC的掃描時間為250毫秒,則上面示例中的“閃光線圈”的周期將在1000毫秒至1500毫秒之間變化。這是因為每個計時器的變化時間為500到750毫秒。如果程序掃描時間為10毫秒,

如果您需要計時器比這更準確,那麼您就必須深入了解PLC的文件。您也許可以創建一個“高速任務”,該任務比主程序運行的頻率更高。通常,這種較高速度的任務將由定時器中斷驅動,該定時器中斷會搶占主邏輯。

上面顯示的Flasher模式的兩次計時器變體不是執行此操作的唯一方法。有一個單計時器變種,它很容易理解,並且優點是更短一些:
閃爍電路-一個計時器變體
閃爍電路-一個計時器變體

請注意,閃光燈線圈最初將打開,並且當計時器1的經過時間超過500 ms時將關閉。您可以通過將“小於”或“等於”指令更改為“大於”指令來扭轉這種情況。這是一次性計時器變體的時序圖:

閃光一定時器變化時序圖
這種單計時器變型將計時器的不准確性從兩個掃描時間減少到一個。例如,如果您的PLC的掃描時間為250毫秒,則一定時器變體的“閃光線圈”的周期為1000毫秒至1250毫秒。這比兩計時器變體要好得多。

還要注意,自復位計時器模式(計時器1自行復位,然後立即開始計時)實際上每秒鐘創建一次掃描脈衝。這本身就是一種模式,您可能會看到將其用於其他目的。

梯形圖邏輯程序的更多模式

Written with StackEdit.

Sealed In Coil

(譯)Sealed In Coil 模式(自保迴路)

最基本的梯形邏輯編程模式是自保迴路。該模式是記住PLC中狀態的基礎。該模式由觸發條件和線圈組成,線圈通電後,線圈的觸點圍繞觸發條件分支,以“自保”:

自保迴路

“觸發”觸點可以替換為所需的任何邏輯。僅僅是導致線圈通電的條件。自保部分始終是線圈本身的常開(NO)觸點。這是一個示例時序圖:

自保線圈時序圖
您可能會質疑這種模式的實用性,因為在線圈通電後,它永遠不會關閉!這有什麼用?好吧,實際上這個線圈永遠不會關閉是不對的。如果PLC斷電,或者您在PLC上進行了Hard Reset,則線圈將恢復為斷電(關閉)狀態。這意味著“自保迴路”模式對於記住自程序運行以來至少已發生過某件事非常有用。

您通常會在邏輯中使用該模式來“引用”或“復歸”機器。假設您有一個連接到滾珠螺桿的馬達。馬達旋轉時,滾珠螺桿上的滑台沿軸移動。通常,我們在馬達軸上安裝增量編碼器,以便PLC(或伺服驅動器)可以跟踪位置。但是,由於在前進或後退時只能得到一連串的脈衝,因此控制系統在將軸參考(也稱為原點)到已知位置之前,不知道絕對位置。為此,我們在軸上添加了“cam sensor”。如果我們在主cam的左側,則傳感器將關閉,如果我們在其右側,則傳感器將打開。機器啟動時,必須知道它處於“未復歸狀態”。當我們處於這種狀態時,通常會等待操作員按下主螢幕按鈕以啟動復歸程序。復歸程序開始後,如果主cam關閉,然後馬達將開始轉動,以將滑台向右移動,直到原點cam sensor觸發;如果原點cam sensor 觸發,則它將開始反方向旋轉,直到關閉。這樣,機器就可以找到其原點或參考位置。

一旦機器復歸了,就需要記住該狀態。由於每次打開機器時僅需要復歸一次,因此,通常採用自保迴路的方法。

Written with StackEdit.

2.16.2021

.Net Desktop Skeleton

.Net Desktop UI Skeleton Project

Recently I created two skeleton project for c# desktop environment,

Prism is WPF only, but ReactiveUI can use with WPF and WinForm.

The prism skeleton is based on prism template pack, but I upgrade the prism version to v8.0.

Prism Shell

ReactiveUI Shell

How To Start

Cloning the repository, either Prism or ReactiveUI

  1. Clone this repository:
    1. Prism: git clone https://github.com/liaochihung/PrismBlankApp.git your-project-name
    2. ReactiveUI git clone https://github.com/liaochihung/ReactiveUIBlankApp.git your-project-name
  2. Move to the project directory: cd your-project-name
  3. Create your own repository and cleaning the bootstrap project history:
    1. Remove previous Git history in order to do not add the bootstrap repo noise in your project: rm -rf .git
    2. Initialize your own Git repository: git init
    3. Add the bootstrap files: git add .
    4. Commit
    5. Add your remote repository: git remote add origin git@github.com:your-name/your-project-name
    6. Upload your local commits to the new remote repo: git push -u origin master
  4. Start coding!

Written with StackEdit.