- PLC編程實用指南(第2版)
- 宋伯生
- 9872字
- 2020-11-27 16:01:41
1.6 PLC典型程序
關鍵詞:控制輸出程序、起停程序、狀態轉換程序、定時控制程序、動作控制程序、步進程序、轉換程序、數據存儲程序、聯鎖互鎖程序、求公因數程序
本節將介紹一些典型程序實例。為以后學習PLC編程積累一些實例知識。
1.6.1 控制輸出程序
可以利用基本邏輯處理指令,用于控制輸出。這樣的輸出主要有:
1.等效控制輸出
輸出僅取決于控制輸入現狀態。這是用開關控制電器工作的特點,也是組合邏輯的特征。圖1-137所示的就是這類輸出。它把開關接輸入點X000,負載用燈接輸出點Y000,然后運行圖示程序。
圖1-137 等效控制輸出實例
從圖記載的各周期I/O狀態知,在周期0時,由于開關已合上,輸入點X000的值為1。經運行程序,輸出點Y000也變為1。進而輸出點合上,輸出電路通,燈亮。在周期n時,開關斷開,則輸入點X000的值為0,輸出點Y000也變為0,輸出點斷開,輸出電路斷,燈滅。可知,這里燈的工作唯一取決于開關的現狀態。
2.長效控制輸出
控制輸出不完全取決于輸入的現狀態,還與輸入的歷史有關。輸入對輸出有長效作用。這是繼電器控制電器工作的特點,也是時序邏輯的特征。如圖1-138所示,這里用2個按鈕控制接觸器,再用接觸器控制一盞燈。
從圖知,SB1合,X000變為1,運行程序后Y000也變為1,進而使繼電器KM得電,其常開觸點合,使燈亮。之后,即使SB1斷開,X000變為0,但由于Y000的觸點與X00是并聯的,故仍可保持為1,仍可使繼電器KM得電。所以,燈保持亮。可知,這里的開始時SB1合是可產生長效輸出。
類似SB2合,X001變為1,運行程序后使Y000也變為0,進而使繼電器KM失電,其常開觸點斷,使燈滅。之后,這個作用也是長效的。
在繼電器電路中,稱這種電路為起、保、停電路。
3.短效控制輸出
它的控制輸出也不完全取決于輸入的現狀態。其輸入對輸出僅有短暫的作用,故稱短效輸出。如圖1-139梯形圖程序,用開關控制一盞燈。但中間插入輔助繼電器M0。
圖1-138 長效控制輸出實例
圖1-139 短效控制輸出實例
在穩定狀態,Y000永遠為0。但在過渡狀態下,它可為1個周期。像這樣僅為1個周期的信號也稱脈沖信號,或微分輸出。用其去控制燈的工作當然沒有意義。但這在內部邏輯處理時,它是很有用的。
1.6.2 起停程序
任何設備,總有使其工作(起動),或使其停止工作(停止)的問題。常見的除了上述雙按鈕起、保、停電路外,還有以下一些程序:
1.單按鈕即時起、停程序
圖1-140為“單按鈕起、停”梯形圖程序,操作數為符號地址。
圖1-140 單按鈕起、停電路
從圖1-140a知,當“按鈕按”OFF時,“按鈕按脈沖”及“控制脈沖生成”均OFF。而“按鈕按”ON時,則“按鈕按脈沖”、“控制脈沖生成”ON。但在下一個掃描周期時,因“控制脈沖生成”的常閉觸點,將使“按鈕按脈沖”OFF。即當“按鈕按”ON時,“按鈕按脈沖”僅ON一個掃描周期。脈沖信號也因此得名。
當無脈沖信號,其“工作”的狀態不會改變。因為這里的“工作”狀態是“雙穩”的,其為ON或OFF均成立。不妨看一下它的邏輯關系就清楚了。但一旦有脈沖信號作用,則其狀態將改變。若開始為OFF將改變為ON。反之,將改變為OFF。也正因此,即可用這里的“起停”對這里的“工作”作“單按鈕起停”控制。
如所用的PLC有生成脈沖的指令,則可直接用它生成脈沖。圖1-140b中的上升箭頭及圖1-140c、d中的P,就是相關的直接產生脈沖的操作。當然也可如圖1-140a,先由“按鈕按”生成“按鈕按脈沖”,然后如圖1-140a那樣處理有關指令。
圖1-140b的短斜線及圖1-140c的NOT指令為“取反”邏輯運算。因為這里脈沖是直接生成的,故必須這么處理。而圖1-140d用了SR指令。三菱PLC也可用ALTP指令實現單按鈕起停。
圖1-140e、f分別為和利時與ABPLC程序。它不好用中文命名。其符號含義可對照其他圖理解。
除了圖1-140所示程序,圖1-141所示程序也具有同樣功能。只是這里用的是觸點先并后串。脈沖信號用微分指令生成。這里圖1-141a示的是“工作”未啟動的情況。這時,如加入一次作用信號,將使“工作”從OFF變為ON、進入圖1-141b狀態。在圖1-141b狀態下,再加入一次作用信號,將使“工作”從ON變為OFF、又回到圖1-141a狀態。
圖1-141 單按鈕起、停工作過程
圖1-142所示也是用一次作用信號去起、停“工作”的梯形圖程序。它用的是KEEP指令。圖1-142a是未工作的情況。這時,如加入一次作用信號,將使原OFF的工作位變為ON、進入圖1-142b狀態。在圖1-142b,再加入一次作用信號,將使已ON的工作位變為OFF、又回到圖1-142a狀態。而一次作用信號則是也是由“起、保、停”位通過微分(DI-FU)指令產生的。
圖1-142 單按鈕起、保、停邏輯又一例
圖1-143所示也是用一次作用信號去起、停“工作”的梯形圖。它的起、停分別用SET與RSET指令。圖1-143a是SET指令在前執行的邏輯。圖1-143b是RESET指令在前執行的邏輯。效果是相同的。
圖1-143 單按鈕起、保、停邏輯再例
讀者也許注意到,在圖1-143所示中。分別加有操作數為“10.09”位的上微分(DIFU,對圖1-143a)、下微分(DIFD),對圖1-143b指令,且還用10.09位的常閉觸點串入RSET(對圖1-143a)、SET(對圖1-143b)的輸入端。這么做是必不可少的。如無此,或指令的順序做不適當的調整,都將無法實現這個功能。
圖1-144所示是圖1-143所示程序的續編。它的起、停也是分別用SET與RSET指令。但添加中間變量“工作1”。它在最后一個梯級時由“工作”賦值。未到執行這梯級指令時,即時“工作”狀態變化,但“工作1”不變化。這樣,盡管圖1-144a、b指令順序不同,但效果是相同的。
類似還有很多實現方法,如也可用計數器指令處理等。同一問題多有很多解決方案。這不僅將有助于拓寬編程思路,還可進一步熟悉與利用好PLC資源。
圖1-144 單按鈕起、保、停邏輯再例續
2.單按鈕短按起、長按(超過1s)停程序
上述單按鈕起、保、停梯形圖程序,是起、是停,容易“糊涂”。其實,完全可使用按鈕按下不同的時間,去區分是起、還是停。很多小儀器甚至手機也多是這么處理的。圖1-145所示為單按鈕短按起、長按(超過1s)停程序。
圖1-145 單按鈕短按起、長按(超過1s)停程序
這里用了定時器TIM 5,只有按鈕按下超過1s,它將起動工作。
圖1-145c、d為和利時PLC類似程序。讀者可對照圖1-145a、b理解。
其他PLC也很容易編寫類似程序。它與兩按鈕起停程序所差的只是這里使用了定時指令或功能塊。
3.單按鈕長按(超過1s)起、短按停程序
圖1-146所示為單按鈕長按(超過1s)起、短按停程序。
圖1-146 單按鈕長按(超過1s)起、短按停程序
該圖為長按(超過1s)起動、短按停車程序。這里用了定時器TIM 6,只有按鈕按下超過1s,它的常開觸點才接通,才能把未工作的輸出10.08起動工作。如果按下時間少于1s,10.08將停止工作。
用單按鈕起、停設備,可節省PLC的輸入點與按鈕,還可簡化操作面板的布置,而實現它的PLC程序也不復雜(如單純用繼電器實現這個控制,則較復雜),故這是目前較常用。
提示:別小看這個長短信號。歷史上有線電報用的莫爾斯碼就是這樣長短信號的組合。習慣上把短信號稱為“嘀”,把長信號稱為“嗒”。由若干個“嘀-嗒”組成“電碼”,若干電碼組成“電文”。用此,即可完成電報的發送及接收,進而實現通信雙方的信息傳遞。
4.多點起、停程序
圖1-147所示為“多點起停”梯形圖程序,操作數也是用符號地址。
從圖知,初始狀態(所有輸入、輸出均未工作,下同)時,從梯形圖邏輯知,“工作”為OFF。這時,當“起動1“或“起動2“ON,而“停止1”與“停止2”又同為OFF時,則“工作“將ON。一旦“工作“ON后,即使“起動1“或“起動2“OFF,由于“工作“觸點的“自保持“(它與“起動1“、“起動2“并聯)作用,“工作”仍將保持ON。
而“工作”ON后,如“起動1”與“起動2”同為OFF,而“停止1”或“停止2”ON,則“工作”將OFF。
由于“起動1”、“停止1”及“起動2”、“停止2”可布置在不同的位置,因而可用它在不同的地點對“工作“作起停控制。
其實,上述單按鈕起停程序也可改編成多點起、停的程序。這時,只要給各個點都提供“按鈕按”信號,并能使各個“按鈕按”信號ON成能生成脈沖信號即可。
5.星-三角法起動電動機的程序
圖1-148所示為用于用“星三角法”起動電動機的程序,操作數也是用符號地址。
圖1-147 多點起、停程序
圖1-148 星-三角法起動電動機的程序
從圖知,用它實現,在電動機起動時,先使電動機按星形聯結工作,后(經延時)改為按三角形聯結工作。停止電動機,則正常進行。
如圖所示,“起動”ON,“工作X”將ON,按星形接線起動。同時,定時器TIM 001(圖1-148a,而圖1-148b為T101、圖1-148c為T1”)開始計時(也可用速度繼電器檢測電動機轉速,轉速大到一定值,其觸點ON,代替這里的延時繼電器觸點ON)。計時到,它的常閉觸點使“工作X”OFF,切斷星形聯結;它的常開觸點使“工作Y”ON,接通三角形聯結。這樣,即實現了“星-三角法”起動電動機。這樣起動,可減少電動機起動電流,是很簡便的電動機起動方法。
1.6.3 狀態轉換程序
工業控制對象往往處于多種狀態下工作。為了適應各個工況的要求,在各狀態間,常要進行轉換。常見的有兩種轉換方法:
1.直接轉換
圖1-149所示為“直接轉換”梯形圖程序,操作數也是用符號地址。
圖1-149 直接轉換梯形圖程序
從圖知,任一控制信號(“控制1、2、3、4”)ON,都將使原狀態(“狀態1、2、3、4”)OFF,而進入新狀態(ON)。可實現直接轉換。
要退出所有狀態,可使“控制0”ON。
2.先退出原狀態,后轉換
圖1-150所示為“先退出原狀態,后轉換”梯形圖程序,操作數也是用符號地址。
圖1-150 先退出后轉換程序
從圖1-150可知,如原來處于某一狀態,任一控制信號(“控制1、2、3、4”)都無法退出所處狀態。只有先使“控制0”ON,用它的常閉觸點把原狀態OFF。才可能用新的控制信號,去使新的狀態ON。
為了確保狀態轉換安全,有的系統必須這么做。
1.6.4 定時控制程序
1.定時器控制
圖1-151所示為“定時器控制的定時控制”梯形圖程序,操作數也是用符號地址。
圖1-151 定時控制程序1
從圖知,電路起動后,“控制開始”ON。先是定時器TIM 000(圖1-151a,而圖1-151b為T101、圖1-151c為T0)開始計時。計時到,其常開觸點ON,進而定時器TIM 001(圖1-151a,而圖1-151b為T102、圖1-151c為T1)開始計時。此計時到,其常開觸點ON,進而定時器TIM 002(圖1-151a,而圖1-151b為T103、圖1-151c為T2)開始計時。此計時也到,其常開觸點ON,進而定時器TIM 003(圖1-151a,而圖1-151b為T104、圖1-151c為T4)開始計時等。
隨著這一系列定時器相繼工作,將分出很多時間段。即可按需要產生相應的動作。如本例:“動作0”出現時間段1(從“控制開始”ON,直至TIM000、T101或T0定時到)。“動作1”出現時間段1(從TIM 001、T101或T1定時開始,直至TIM 001定時到)等。
這里“動作”也可不這樣對應,有的動作還可在多個時間段出現,這些完全可依實際需要決定。這里的實質是各個動作都是按時間的推進,逐步出現的。是由時間信號控制的。
2.計數器控制
時間控制還可用計數器加時間脈沖信號實現。圖1-152所示為
圖1-152 定時控制程序2
“計數器控制的定時控制”梯形圖程序,操作數也是用符號地址。
從圖知,“開始”ON后,“工作”被置位(執行SET指令)。可逆計數器CNTR 020每隔0.1s加1。“工作”ON,將執行計數器CTR的內容與設定值(此處為即時數599,BCD碼)比較。當CTR的內容小于設定值,則比較標志位“P_LT”常開觸點ON,進而使“時間段1”ON。這將產生與“時間段1”ON對應的動作。當CTR的內容不小于設定值,則比較標志位“P_LT”常開觸點OFF,進而使“時間段1”OFF。而“P_LT”常閉觸點ON,則使“時間段2”ON。這將產生與“時間段2”ON對應的動作。
這里只有兩個“時間段”。其實,可增加使用比較指令次數,作多個比較,以得到多個時間段。這樣,就完全可依實際的時間段的不同,產生不同的動作。這里的實質也是,各個動作都是按時間的推進,逐步出現的。也是由時間信號控制的。
1.6.5 動作控制程序
動作控制是很常見的控制邏輯。只要用這里的“動作”去控制對應輸出點,再用對應的輸入點去控制這里的“動作完成”,就可實現如機床刀架運動那樣部件的自動控制。
還要指出的是,動作控制也可插入定時控制。如用某“動作”去控制某輸出點的同時,還去起動一個定時器,令其計時,再用該定時器計時到信號作為該動作完成信號,則這一動作就是定時控制。這種邏輯也是用得很多的。
1.半自動工作
圖1-153所示為半自動工作的“動作完成控制”梯形圖程序,操作數也是用符號地址。
圖1-153 動作半自動控制程序
從圖知,“起動”ON后,“動作0”ON,并自保持。這里把“動作1”、“動作2”、“動作3”的常閉觸點串入,目的是一旦進入工作,而又未完成所有動作,則不允許“動作0”再被起動。
“動作0”ON后,則執行與“動作0”信號對應的動作,直到這個動作完成。當PLC檢測到“動作0完成”信號,即“動作0完成”ON,則“動作1”ON,并自保持。這將起動與其相應的動作。另外,“動作1”ON,還使“動作0”OFF,則與“動作0”有關的動作將停止。
動作1完成,也將起動動作2……直到動作3完成,則程序回到原狀態。
由以上分析可知,此程序實現的動作轉換,是半自動控制。
2.自動工作
圖1-154所示為自動工作的“動作完成控制”梯形圖程序,操作數也是用符號地址。
圖1-154 動作完成控制程序
從圖知,這里多了“自動起動”、“自動停止”及有關信號。“自動起動”ON,將使“自動工作”ON,并自保持。如“自動工作”ON,且“自動停止”ON,將使“自動停止”ON,并自保持。
當未起動“自動工作“時,此程序與”半自動“程序是完成相同的。只是這里用了“AB-CD”,而圖1-153程序用的是“0123”。
當起動了“自動工作”時,“動作D完成”ON,將起動“動作A”,再由“動作A”的常閉觸點去使“動作D”OFF。起動“動作A”,意味著新的循環開始。
這時,若要停止繼續工作,可使“自動停止”ON。“自動停止”ON,將使“自動停止”ON,并自保持。若如此,則在“動作D完成”ON時,將使“自動工作”OFF。這意味著,這時“動作A”不能再起動。而“自動工作”OFF也使“自動停止”失去自保持,程序將回到原狀態。
可知,此程序進入“自動工作”后,動作是周而復始地自動執行著。而要退出“自動工作”,則應使“自動停止”ON。而且,要到所有動作完成后,即動作D完成后,才能完全退出“自動工作”,并停止所有動作。
這種動作控制程序使用步進指令實現也是很方便的。這將在本書第2章分散控制時再作進一步介紹。
1.6.6 步進程序
定時控制簡單,而又能完成較復雜的控制。但它沒有反饋,是開環控制。前一時間段動作完成與否,次一時間段的控制命令照樣發出。工作可靠要求很高的場合不好用它。
動作控制是反饋控制,前一個動作未完成,次一個動作不會開始。較安全、可靠。但用它去實現較復雜的控制比較難。
這里引入的步進程序,靠步的推進實現控制,而步的推進則用“步動作完成”信號激發。這種控制可用步控制輸出,能實現復雜動作。同時,它又有“步動作完成”信號反饋,是閉環控制,較為可靠。
實現步進控制的方法很多,這里僅介紹兩種較簡單的方法。
1.脈沖步進
圖1-155所示為“脈沖步進”梯形圖程序,操作數也是用符號地址。它是靠基本邏輯指令實現步進控制。
圖1-155 脈沖步進程序
從圖1-155可知,此程序主要由脈沖生成及步進兩個部分組成。由于使用的都是基本邏輯處理指令,并使用符號地址。所以三種PLC的程序基本相同。
在脈沖生成部分可知,當“步進開始”或“步”及相應“步動作完成”信號出現,都將產生“步進脈沖”信號。只是圖1-155b用了脈沖處理指令(P)。
在步進部分可知,這里暫設了四個步:“步11”、“步22”、“步33”、“步44”。如需要可增加。“步11”為初始步。當所有步都未激活(均為OFF),則“退出步控制”為ON。
此時,如“步進開始”ON,則將有“步進脈沖”ON一個掃描周期。這將使“步11”激活,處于ON狀態,進入工作。而其他步仍為OFF。
當步11動作完成后,“步11動作完成”(圖1-155c為“動1完成”,三菱FX PLC的變量名只能是4個字符,下類似)ON,將再有“步進脈沖”ON一個掃描周期。這將使“步22”激活,處于ON狀態,進入工作。而使“步11”OFF,退出工作。其他步仍為OFF。
這里每一步的控制邏輯與“單按鈕起停”邏輯形式不同,但本質是相同的。“各個步”也是“雙穩”,無“步進脈沖”信號,它ON成立,OFF也成立。一旦有脈沖信號,則轉換成相反的狀態。
隨著步動作完成而產生的脈沖信號,步將逐一推進,直到最后一步。最后一步完成時,如“自動控制”ON,則又起動第一步;如“自動控制”OFF,則推出步進控制,程序回到原狀態。
提示:這里的步進程序是按倒序排列的,控制“步44”,反而排在“步11”之前。可檢查,如不是這么安排,按步推進的目的是達不到的。這也說明PLC指令的安排順序是有講究的。
2.移位步進
圖1-156所示為“移位步進”梯形圖程序,操作數也是用符號地址。三種PLC都是用左移位指令實現。圖1-156a用SFT,圖1-156b用SHL-W,圖1-156c用SFTL。
圖1-156 移位步進程序
從圖1-156可知,此程序由四個梯級組成。
對圖1-156a,有4個梯級。
第一梯級,用以產生“移位脈沖”信號。
第二梯級,在程序初始化及步進完成時(這里設了4步,如需要,可增多),把0傳給“移位通道”。P-First-Cycle為特殊繼電器,在PLC運行時ON一個掃描周期。
第三梯級,用以產生“移位通道等零”信號。在“移位通道”字的內容為零時,“移位通道等零”為1。
第四梯級,用以實現移位步進。這里的復位信號為“p_off”(常OFF),故只要“移位脈沖”從0轉到1,則把“移位通道等零”的狀態(0或1)移入“移位通道”的第0位,而原“移位通道”的第0位狀態,移給“移位通道”的第1位……依次移位,直到“移位通道”的第15位溢出。
它與第三梯級配合將是,當“移位通道”為0時,“移位脈沖”從0轉到1,向“移位通道”移入1;而當“移位通道”移入1后,移入0;直到復位。
這里,只要把“移位通道”0位對應于“步1”,1位對應于“步2”……則這個移位過程,也就是步進過程。
對圖1-156b,也有4個梯級。
第一梯級,也用以產生“移位脈沖”信號。但它由指令P產生。
第二梯級,在程序初始化及步進完成時(這里設了4步,如需要,可增多),把0傳給VW0,即“移位通道”。這里,SM0.1為特殊繼電器,在PLC運行時ON一個掃描周期。
第三梯級,用以實現移位步進。每有一個“移位脈沖”,則把0移入“移位通道”,即VW0中的VB1的第0位,而原VB1的第0位狀態,移給VB1的第1位……,而原VB1的第7位狀態,移給VW0中的VB0的第0位,原VB0的第0位狀態,移給VB0的第1位……依次移位,直到VB0的第7位溢出。
第四梯級,用以產生第一步工作信號。在“移位通道”字的內容為零時,使VW0,即“移位通道”為1,產生第一步輸出。
這里,只要把VB1的0位對應于“步1”,1位對應于“步2”……,VB0的0位對應于“步8”,1位對應于“步9”……則這個移位過程,也就是步進過程。
對圖1-156c,有5個梯級。
第一梯級,也用以產生“移位脈沖”信號。方法同圖a。
第二梯級,在程序初始化及步進完成時(這里設了4步,如需要,可增多),把0傳給K1M11,即移位用的M11、M12、M13及M14組成的各個位。這里,M8002為PLC運行時ON一個掃描周期。
第三、四梯級,用以產生第一步工作信號。當M11~M14間的內容為0時,將使“移位值”置1。為使“開始”產生的“移位脈沖”時,把為1的“移位值”,移入M11,以產生第一步輸出。
第五梯級,用以實現移位步進。每有一個“移位脈沖”,則把“移位值”移入M11,而M11位狀態,移給M12……而原M14狀態溢出。
這里,只要把M11對應于“步1”,M12位對應于“步2”……則這個移位過程,也就是步進過程。
圖中還有“自動工作”控制。它ON時,將實現自動工作,即完成最后一步時,會產生“移位脈沖”,起動第一步。
提示:西門子PLC數據存儲器V,可按位使用。故圖1-156b用VW0作“移位通道”。只是,它的最低位是V1.0,而不是V0.0,最高位是V0.7,而不是V1.7。
1.6.7 轉換程序
1.輸出轉換程序
用以上介紹的“狀態”、“時間段”、“動作”或“步”去控制輸出點,以產生控制的實際物理輸出。有一對一轉換(見圖1-157),一對多、多對一(見圖1-158)等轉換。
圖1-157 一對一轉換程序
圖1-158 一對多、多對一轉換程序
這里,為了安全,圖1-158a用“IL”及“ILC”互鎖指令,圖1-158b用MCRA、MCRD等主控指令,圖1-158c用MC、MCR主控指令,增加急停控制。一旦緊急須停止輸出,可使“急停”ON,則它的常閉觸點OFF,這將使由這些配對指令之間的輸出全部OFF。
2.輸入轉換程序
用輸入點去控制以上介紹的“控制”、“動作完成”,以發揮輸入點對系統的實際控制作用。也有一對一轉換,一對多、多對一等轉換。與輸出轉換不同的只是把圖1-157及圖1-158的“狀態”改為“輸入”,“動作”改為“控制”或“動作完成”。
一經以上轉換,即可按要求,用實際輸入進行控制。
3.轉換參數選擇程序
如以上介紹的“狀態”、“時間段”、“動作”或“步”,若要選用工作參數,如溫度、壓力、時間等物理量的對應值,即可用此電路把它們與對應的量關聯。這種選擇電路也叫“配方”選擇,以使控制系統能適合不同工藝參數的要求。
4.轉換選擇程序的程序
用此程序,把上述選擇程序根據相應的條件再作選擇,以實現多品種、多工藝、多參數的控制。
實現這種選擇的選擇有兩個辦法:
用子程序(見圖1-159),不同的子程序調用作不同的選擇。
用程序跳轉,靠不同的程序跳轉作不同的選擇。
圖1-159 不同子程序調用
1.6.8 數據存儲程序
數據存儲程序類型也較多,以下介紹為定時定地址存儲程序。圖1-160所示為它的梯形圖程序,操作數也是用符號地址。
圖1-160a,總是將“分”特殊繼電器(如CPM2A為AR18的高字節的內容)與0比較。如相等,即整點,則相等標志(L-EQ)ON。經微分處理,產生“時間到脈沖”信號。這時,把當時的“小時值”(如CPM2A為AR19的低字節的內容),如13,則把13賦值給“指針”,進而再把“采集數據”賦值給“指針”指向的DM013中。
圖1-160b,也總是將“分”特殊繼電器(如FX2N為D8014的內容)與0比較。如相等,即整點,則相等標志(這里為M1)ON。經微分處理,產生脈沖信號,把當時的“小時值”(如FX2N為D8015的內容),如13,則把13賦值給變址器V0,進而再把“采集數據”賦值給D(0+變址器的內容),即D13中。
圖1-160 定時定地址存儲程序
圖1-160c,S7-200的程序。它沒有用于反映實時時鐘的特殊繼電器。它的實時時間得用相應指令讀取。該程序用READ-RTC指令讀(寫是用SET-RTC)實時時鐘。執行該指令,把實時的年、月、日、時、分、秒及星期幾存于從數表T開始到T+7的相應字節(星期幾存于T+7,T+6恒0)中。對該程序,則存于VB100~VB107中。接著,還要提取存儲區開始的字節(VB1000)地址指針。它也總是將“分”(VB104的內容)與0比較。如相等,即整點,經微分處理(執行指令P),把當時的“小時值”,即VB103內容轉換為字,再轉換為十六進制(它的實時時鐘是BCD碼),再乘2(存儲以字為單位、占2個字節),再轉換為雙字。,如VB 103的值為13,則VD4為26。然后把VD4與VB1000的地址的指針相加,并賦值給VD8。最后把“采集數據”賦值給“指針”指向的VD8指針指向的VW,即VW1026中。顯然,圖1-160c的程序稍麻煩些。
可知,這個程序的功能是,每天整點時,把采集數據存入DM0000~DM0023中,或VW1000~VW1023,或D0~D23中,即定時、定地址存儲。
1.6.9 聯鎖、互鎖程序
聯鎖、互鎖也是一種輸出控制,是生產現場常見邏輯關系,用得很多。
1.聯鎖
以甲“工作”作為乙“工作”的前提條件,稱甲對乙的聯鎖。實現的辦法是用甲處工作狀態作為乙“工作”的起動或工作條件。如圖1-161所示,其邏輯關系可保證,只有甲工作(該圖為動作3)后,才可能產生動作4(乙工作)。即乙被甲所聯鎖。
圖1-161 聯鎖程序
2.互鎖
互以對方的不工作作為自身工作的前提條件。實現的辦法是,以對方的不工作作為自身的起動條件。如圖1-162所示,動作3與動作4不能同時出現,只有一個動作停止后,另一個動作才能產生。
圖1-162 互鎖程序
1.6.10 求公因數程序
圖1-163所示為本書緒論中提到求實現歐幾里德算法的子程序。
它是實現歐幾里德算法中,在花括弧內的算法。對圖1-163a到了余數ZZ(DM7、VW8、D7或remainder)為0時,即EQ或pEQ ON時,則輸出公因數。否則,一直進行相應運算。這里XX,YY為形式參數。調子程序前用X,Y對其賦值。
提示:DIV指令為整除運算指令。如圖1-163a,其商存于DM6中,而余數存于DM7中。圖1-163b,其商存于VW6中,而余數存于VW8中。圖1-163c,其商存于D6中,而余數存于D7中。故判斷DM7或VW8或D7是否為0,即可知道YY能否XX整除。圖1-163d節1為求“模”運算。目的是得到余數。節2是判斷得到的余數是否為0。節3、4是如果余數為0,輸出結果(Common Factor),并返回主程序。節5如果余數(remainder)不為0,變換求“模”運算數據,為下一次被調用的新計算作準備。
圖1-164為實現歐幾里德算法的主程序。
它是實現歐幾里德算法中,花括弧外的算法。AA為求解起動信號,一旦它ON,將使pAAON一個掃描周期,并用它去起動bAA或call_calculate,進而調上述子程序。直到EQ或圖1-164d的pEQ ON(即zz=0),并通過pEQ使bAA或call_calculate OFF,則退出子程序調用。圖1-164d的pEQ不是微分輸出,所以,圖1-164d第1節增加了它的復位操作,即call_calculate
圖1-163 求兩個整數的公因數子程序
圖1-164 求兩個整數的公因數主程序
OFF后,如pEQ ON,自身將復位。這也為新的計算作準備。
提示:圖1-164程序用了微分指令及bAA或call_calculate的自保持功能,目的是確保在pEQ OFF,即yy未能被xx整除時,子程序一直在調用。而到了EQ ON,即yy能被xx整除時,又可使bAA OFF,子程序停止調用。在多周期完成運算的情況下,這么處理是很方便的。
顯然,在實現上述算法時,就有指令的選用及資源的利用兩個問題。