- 艾寶物聯IOBOV? ─ 工業無線測控專家
我們在設計小型的PLC控制系統時,常常會需要在外部改變PLC內部的數據,譬如Counter, Timer或者Data的值,以適應生產過程的需要。而且要求系統關機以后,這些數據還能夠保存在PLC內部,當下次開機后,這些數據可以被調出繼續使用。
現在許多小型的PLC都或多或少地提供了掉電保持寄存器,以便在PLC斷電的時候,保存用戶想要保存的數據。但大多數時候,PLC制造廠商為了節約成本,不可能提供足夠數的掉電保持寄存器供系統設計人員使用,所以當被調整的數據項目超過PLC內部的掉電保持寄存器的數目的時候,我們不得不減少被調整的數據項目(固定或不用)或者購買具有更多掉電保持寄存器數目的PLC,這樣的話,就使得生產機械缺乏靈活性和適應性,從而降低產品檔次或增加成本。
下面就介紹解決這種問題的一種方法,以便大家設計時參考。
所用PLC:松下FP0-C16T,被調整數據有16個,PLC內部掉電保持寄存器數目為10個,其中8個數據寄存器(DT1652-DT1659:8個各16Bit)和2個字的內部繼電器(WR61、WR62:2個各16Bit)。如果按常規的一個被調整數據占用一個數據寄存器的方法,這顯然不能調整16個被調整數據,而只能調整10個被調整數據。為此,本人專門分析了16個被調整數據的數據調整范圍,發現多數數據的調整范圍只需要從0~255,即0~28-1;而掉電保持數據寄存器DT1652等內部的數據大小為216-1,即256×256-1;所以我們可以將一個被調整的數據只用到數據寄存器的低8位,那么該數據寄存器的高8位就可以來存儲另一個被調整數據。
下面就列出該部分的程序:
(1)開機時,分開掉電保持寄存器中高8位和低8位至另外兩個數據寄存器:
其中,R9013是松下FP0系列PLC內部所規定的、在PLC從program狀態到run狀態時只動作一個PLC掃描周期的脈沖繼電器。指令F65是一個字與指令,它的作用就是將掉電保持數據寄存器DT1655內的數據與十六進制數FF進行字與,然后將結果送到一般數據寄存器DT0,這樣就可以分離出掉電保持數據寄存器DT1655內數據的低8位;同樣第二行的字與指令可以分離出掉電保持數據寄存器DT1655內數據的高8位。
指令F120是一個不帶進位右移指令,即:對數據字進行右移時,對高位進行補零。K8表示右移8位。指令F0是一個字傳送指令,就是將一般數據寄存器DT10內的數據傳送到一般數據寄存器DT1。上述程序段的目的就是在開機時將掉電保持數據寄存器DT1655內的數據分成兩個被調整數據。
(2)開機之后,將另外兩個數據寄存器的數據合并至掉電保持寄存器的高8位和低8位:
R9014是松下FP0系列PLC內部所規定的、在PLC從program狀態到run狀態時、第二個PLC掃描周期開始動作的脈沖繼電器。指令F121是一個不帶進位左移指令,K8即左移8位。指令F66是一個字或指令,將一般數據寄存器DT20內的數據與一般數據寄存器DT0內的數據進行字或,結果送掉電保持寄存器DT1655。由上可以看出,在PLC運行的時候,可以任意改變一般數據寄存器DT0和DT1中的數據,而這些改變也同時送到了掉電保持寄存器DT1655,這樣,當PLC掉電時,所被調整的數據也就被保存了。
通過同樣的方法,我們可以視被調整數據的大小,靈活的使用掉電保持寄存器的每一個Bit位,從而使我們在不增加成本的情況下,提高小型PLC控制系統的性能。