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