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