微電子技術(shù)的發(fā)展使得集成芯片產(chǎn)生了一定程度的“智能”,微處理器(CPU)能夠按照我們開(kāi)發(fā)者預(yù)先設(shè)定好的“程序”來(lái)運(yùn)行,我們通過(guò)編寫(xiě)“程序”代碼,達(dá)到與計(jì)算機(jī)(PC)去工作的目的。
在計(jì)算機(jī)技術(shù)發(fā)展的早期,“程序”代碼的編寫(xiě)并不是一件簡(jiǎn)單的事情。由于計(jì)算機(jī)本身只能理解“0”和“1”組成的代碼,于是編程人員只能把“0”和“1”的數(shù)字編成的程序代碼打在紙帶(“1”打孔,“0”不打孔)上,然后將紙帶放入計(jì)算機(jī)的輸入系統(tǒng)中,這樣計(jì)算機(jī)才能明白程序員讓它完成什么任務(wù)。
程序員編程時(shí)要充分定義好每一個(gè)“位”的含義,然后按照規(guī)定好的邏輯將它們組合成代碼。這種由“0”和“1”組成的代碼十分地復(fù)雜,人類(lèi)很難理解,給程序的編寫(xiě)、修改和維護(hù)都帶來(lái)了很大的困難。
為了提高程序編寫(xiě)的效率,提高代碼的可讀性及可維護(hù)性,計(jì)算機(jī)科學(xué)家們發(fā)明了“匯編語(yǔ)言”。匯編語(yǔ)言使用特定的英文符號(hào)代替機(jī)器指令,大大增強(qiáng)了程序的可讀性,提高了編程的效率。
匯編語(yǔ)言的英文指令雖然便于人類(lèi)理解,但微處理器(CPU)卻無(wú)法理解。于是科學(xué)家們?cè)O(shè)計(jì)出一個(gè)專(zhuān)門(mén)的程序,用來(lái)把匯編語(yǔ)言的英文指令,“翻譯”成微處理器(CPU)能夠執(zhí)行的機(jī)器代碼,這個(gè)翻譯程序,被稱(chēng)為“編譯器”(編譯器也有個(gè)發(fā)展的過(guò)程,不深究)。那些用匯編語(yǔ)言寫(xiě)成的代碼,被稱(chēng)為“源代碼”。
匯編語(yǔ)言編程與早期的紙帶打孔編程相比,程序的可讀性大大增強(qiáng)。但隨著微處理器技術(shù)的迅猛發(fā)展,用匯編語(yǔ)言來(lái)寫(xiě)程序也逐漸不能滿(mǎn)足需求了,主要表現(xiàn)在兩個(gè)方面:
第一:隨著程序復(fù)雜性的提高,匯編語(yǔ)言編寫(xiě)的代碼量顯著增加,編寫(xiě)和維護(hù)的難度變大;
第二:匯編語(yǔ)言依賴(lài)于特定的微處理器,程序的跨平臺(tái)移植性很差,很多時(shí)候需要重新編寫(xiě);
于是,一種不需要記憶繁雜指令的、與硬件平臺(tái)無(wú)關(guān)的編程語(yǔ)言就成了程序員們夢(mèng)寐以求的東西就是C語(yǔ)言。C語(yǔ)言用結(jié)構(gòu)化的語(yǔ)句代替了匯編語(yǔ)言中的指令,提供了豐富的數(shù)據(jù)類(lèi)型和運(yùn)算符,支持指針功能,編寫(xiě)的代碼簡(jiǎn)潔緊湊,自其誕生之初就受到了眾多程序員的喜愛(ài),被視為編程語(yǔ)言的經(jīng)典。時(shí)至今日C語(yǔ)言仍保持著強(qiáng)大的生命力,在單片機(jī)和嵌入式程序設(shè)計(jì)中有著廣泛的使用。
隨著微電子技術(shù)在工業(yè)控制領(lǐng)域的使用,PLC(可編程邏輯控制器)取代了傳統(tǒng)的繼電器控制系統(tǒng)。作為“可編程”邏輯控制器,編程語(yǔ)言必不可少。但是由于各大廠家的PLC產(chǎn)品自成一派,相互不兼容,編程語(yǔ)言的語(yǔ)法也各有所好,形形色色,PLC應(yīng)用和推廣帶來(lái)了不便。
為了規(guī)范PLC的編程語(yǔ)言,國(guó)際電工委員會(huì)(International Electrotechnical Commission)起草并頒布了工業(yè)自動(dòng)化領(lǐng)域編程語(yǔ)言的標(biāo)準(zhǔn)(IEC 61131-3),制定了五種在工控領(lǐng)域使用的語(yǔ)言,包括圖形式語(yǔ)言和文本式語(yǔ)言。圖形式語(yǔ)言包括:梯形圖(LD-Ladder Diagram)、功能塊圖(FBD- Function Block Diagram)和順序功能圖(SFC- Sequential Function Chart)。文本式語(yǔ)言包括:指令表(IL-Instruction List)和結(jié)構(gòu)化文本(ST-Strutured Text)。
下面我們來(lái)聊聊這五種編程語(yǔ)言:
在各種PLC的編程語(yǔ)言中,使用最多的梯形圖(LD-Ladder Diagram)語(yǔ)言。梯形圖是從早期繼電器控制系統(tǒng)原理圖演變而來(lái),與繼電器電路圖相似,直觀易懂,保留了繼電器電路圖的風(fēng)格和習(xí)慣,是熟悉繼電器控制系統(tǒng)人員最容易接受和使用的語(yǔ)言。
梯形圖雖然容易上手,但是在編寫(xiě)大型系統(tǒng)程序的時(shí)候會(huì)很吃力。很多書(shū)都建議初學(xué)者學(xué)習(xí)梯形圖,我不敢茍同,除非你接觸的都是些簡(jiǎn)單邏輯控制。當(dāng)你感到需要控制的邏輯系統(tǒng)變得復(fù)雜,想換一種語(yǔ)言的時(shí)候,基本還是要從頭學(xué)起。所以我建議初學(xué)者學(xué)習(xí)功能塊圖(FBD- Function Block Diagram)。
功能塊圖(FBD)使用數(shù)字電路的邏輯符號(hào)(“與”、“或”、“非”)來(lái)表達(dá)控制邏輯,在編寫(xiě)大型復(fù)雜系統(tǒng)的時(shí)候也能保證邏輯清晰
結(jié)構(gòu)化文本(ST-Strutured Text)編程語(yǔ)言,在西門(mén)子PLC編程中被稱(chēng)為SCL(Structure Language),先給你看看我在某項(xiàng)目中使用SCL編寫(xiě)的程序代碼的截圖:
是不是和計(jì)算機(jī)編程很相似?SCL的語(yǔ)法類(lèi)似VB(PASCAL)等高級(jí)語(yǔ)言,接近人類(lèi)的思維方式,程序的可讀性很強(qiáng)。在西門(mén)子Step7 5.x平臺(tái)下可以使用插入源文件的方式進(jìn)行編程,在博途平臺(tái)下可以直接編寫(xiě)。SCL可以說(shuō)是工控領(lǐng)域里“高大上”的編程語(yǔ)言,它的源代碼編譯后的效率也很高,如果你之前接觸過(guò)計(jì)算機(jī)高級(jí)語(yǔ)言編程,強(qiáng)烈建議深入學(xué)習(xí)下SCL語(yǔ)言。
指令表(IL),在西門(mén)子PLC中稱(chēng)為語(yǔ)句表(STL)。它類(lèi)似于匯編語(yǔ)言,對(duì)編程人員要求較高,需要熟悉PLC內(nèi)部的各種寄存器、狀態(tài)字等等,需要熟悉各種指令,并清楚某指令執(zhí)行后會(huì)對(duì)哪些寄存器產(chǎn)生影響。語(yǔ)言表(STL)編寫(xiě)的程序可讀性相對(duì)較低,但其執(zhí)行效率在所有的語(yǔ)言中是最高的。有些特殊的功能使用其它語(yǔ)言(比如梯形圖)表達(dá)很困難,或者根本無(wú)法表達(dá),語(yǔ)言表(STL)可能幾行代碼就完成了。
順序功能圖(SFC- Sequential Function Chart)語(yǔ)言,在西門(mén)子PLC中稱(chēng)為S7-GRAPH。該語(yǔ)言非常適合生產(chǎn)過(guò)程的順利控制,它把整個(gè)生產(chǎn)過(guò)程分成若干“步”,每一“步”都有某些動(dòng)作要完成,當(dāng)某個(gè)條件滿(mǎn)足后,可以跳到下一“步”,也就是所謂的“順序控制”。
IEC61131-3推薦的五種語(yǔ)言,在不同的工控場(chǎng)合下均有使用,作為初學(xué)者,建議學(xué)習(xí)功能塊圖(FBD)語(yǔ)言。如果你有計(jì)算機(jī)高級(jí)語(yǔ)言編程的基礎(chǔ),建議學(xué)習(xí)下SCL語(yǔ)言。當(dāng)然,無(wú)論學(xué)哪種語(yǔ)言,都首先要理解PLC本身,要知道PLC內(nèi)部資源是如何存儲(chǔ)?程序是如何調(diào)用?知道了這些后,你才清楚程序應(yīng)該怎樣寫(xiě),以及為什么這樣寫(xiě)。