其實(shí)際,PLC就是一個(gè)完整bai的單片機系統du,你可以把它形像化為一zhi個(gè)功能專(zhuān)一的單片機開(kāi)發(fā)板dao.
這個(gè)單片機開(kāi)發(fā)板由電源+單片機+繼電器或MOS管+端子等等組成.
現在的PLC,多用32位單片機,也有16位,早很多年前的PLC,還有用8位的,比如西門(mén)子曾經(jīng)用的是51單片機.
而梯形圖燒錄到PLC后內正常運行,是因為PLC的開(kāi)發(fā)軟件,把梯形圖通過(guò)電腦運算,轉換成了二進(jìn)制的機器語(yǔ)言,然后燒錄的PLC內部的單片機或者PLC內部的Flash里去了,這點(diǎn),和你用單片機編程沒(méi)有什么特別區別.
而你在編寫(xiě)單片機的時(shí)候,一般來(lái)說(shuō)是需要硬件圖的,我說(shuō)的是一般,有一種情況不用,那就是,有人把單片機的底層給編寫(xiě)好的,你不需要關(guān)心底層驅動(dòng)是怎么實(shí)現的,只需要知道怎么用就行了.在這種情況下,你不需要知道硬件如何實(shí)現,就不需要看硬件電路.
舉例:
unsigned char Output_Y00 = 0,Output_Y01 = 0;
//-----這是底層函數-------------------------------------
void Output_Process(void)
{
if(Output_Y00) P1_0 = 0;//---打開(kāi)第一路輸出
else P1_0 = 1;//---關(guān)閉第一路輸出
if(Output_Y01) P1_4 = 0;//---打開(kāi)第二路輸出
else P1_4 = 1;//---關(guān)閉第二路輸出
}
上面的例子,在編程的時(shí)候,如果是分層編程,即一個(gè)人寫(xiě)邏輯,一個(gè)人寫(xiě)底層,你是看不到那個(gè)
Output_Process()的存在的,因為編寫(xiě)底層的人給封裝起來(lái)了,你可能只看到一個(gè)庫.
但是他同時(shí)也給你留下了接口,就是 Output_Y00,Output_Y01,你通過(guò)這兩個(gè)變量,就能操作
輸出口的驅動(dòng),同樣的道理,什么AD,DA,串口,都是一個(gè)樣,把底層封裝起來(lái),然后由另一個(gè)人操作接口變量就行了
這就是單片機分層編程的概念.
而PLC也是基于這種概念,PLC廠(chǎng)商已經(jīng)把底層做好,并且封裝起來(lái)了,你在電腦上的梯形圖,只是做邏輯控制,等你做好了,翻譯成特定的代碼,再聯(lián)合廠(chǎng)商做好的底層,一直編譯成二進(jìn)制機器碼,下載到PLC的單片機里.
?
編程bai語(yǔ)言是思想不一樣。梯形圖是拷貝繼電器系du統而來(lái)的,它用的最多的是常開(kāi)zhi、常閉等dao通斷概念。C語(yǔ)言可是沒(méi)有導通,關(guān)閉,常開(kāi)、常閉的東西。梯形圖里有步進(jìn)指令,并行處理等,C語(yǔ)言里沒(méi)有。為什么單片機不那樣做?那你得問(wèn)問(wèn)什么PLC要那么做了。因為它最初設計出來(lái)是給電工看的,就是那些懂繼電器系統的工程師,但是它們不懂什么計算機語(yǔ)言啊,而單片機就不同了,懂得單片機的幾乎都懂計算機,沒(méi)有人再去學(xué)繼電器系統。如果你要問(wèn)為什么PLC不用C語(yǔ)言編寫(xiě)程序,我覺(jué)得這確實(shí)是一個(gè)值得討論的問(wèn)題。