plc與C語言有什么關(guān)系
PLC為可編程邏輯控制器(Programmable Logic Controller)的首字母縮寫。是一種面向工業(yè)控制的微型計(jì)算機(jī)系統(tǒng)。
PLC的硬件系統(tǒng)必須有控制器(單片機(jī)、CPU、FPGA等)、執(zhí)行器(繼電器、光耦輸入等)、主板(電路板),三者缺一不可。由于現(xiàn)在的8位單片機(jī)片內(nèi)存儲容量最大可達(dá)64kB的程序存儲器或4kB的數(shù)據(jù)存儲器,32位單片機(jī)也有512kB的程序存儲器和128kB的數(shù)據(jù)存儲器,所以功能簡單的PLC不需要片外存儲器(內(nèi)存芯片、內(nèi)存條)也可以運(yùn)行。而功能較強(qiáng)的PLC則需要片外存儲器、輔助存儲器(硬盤、SD卡)等附加設(shè)備。
PLC的軟件系統(tǒng)分為三個部分:
1、PLC主機(jī)上運(yùn)行的下位機(jī)程序。用于控制輸出、檢測輸入以及與上位機(jī)進(jìn)行通訊。該程序是梯形圖轉(zhuǎn)C語言或匯編語言,再編譯后燒寫到PLC的程序存儲器內(nèi)的。雖然編譯的過程要經(jīng)過C語言或匯編語言,但是PLC廠家一般不允許用戶直接使用C語言或匯編語言編寫PLC主機(jī)的下位機(jī)程序。
2、PLC編程軟件。用于向下位機(jī)寫入用戶的控制方法。它將用戶的梯形圖轉(zhuǎn)換成C語言程序或匯編語言程序,編譯后燒寫到PLC的程序存儲器中。編程軟件本身可以由C語言、C++語言等高級語言開發(fā)。具體使用的開發(fā)語言需要向相應(yīng)的PLC廠家了解。
3、上位機(jī)軟件。用于宏觀上協(xié)調(diào)控制PLC的運(yùn)行狀態(tài),代替PLC進(jìn)行復(fù)雜的計(jì)算,存儲設(shè)備的運(yùn)行記錄,并以可視化方式向管理員反饋系統(tǒng)信息。常見的上位機(jī)軟件為“組態(tài)軟件”,它是由PLC廠家或軟件公司開發(fā)的上位機(jī)控制平臺。用戶可以使用指定的腳本語言進(jìn)行二次開發(fā)。如“組態(tài)王”軟件就指定使用BASIC語言進(jìn)行二次開發(fā)。如果不使用組態(tài)軟件,用戶也可以使用匯編、C語言、C++、JAVA、BASIC等各種編程語言,在它們各自的編譯器上編寫代碼,開發(fā)自己的上位機(jī)軟件。
C語言是一種面向過程的通用計(jì)算機(jī)編程語言,作為編程語言用戶數(shù)量排行榜上穩(wěn)坐前4的編程語言,廣泛應(yīng)用于工業(yè)控制(*PLC驅(qū)動、*嵌入式系統(tǒng)、上位機(jī)軟件)、游戲開發(fā)(▲DirectX、▲PhysicX、大型游戲開發(fā))、操作系統(tǒng)開發(fā)(*Windows核心、*Linux核心、*Android核心)、驅(qū)動程序開發(fā)(*USB驅(qū)動、*串口驅(qū)動、*網(wǎng)卡驅(qū)動、*硬盤驅(qū)動)、軟件平臺搭建(JAVA虛擬機(jī)、Oracle數(shù)據(jù)庫)、大型應(yīng)用軟件開發(fā)(OFFICE、VM WorkStation、CAD、PhotoShop、SolidWorks、Matlab)之中。
上述例子中,凡左邊帶“*”的例子,如果不使用C語言,就只能選擇匯編語言,沒有其它選擇的余地,凡左邊帶“▲”的例子,必須經(jīng)過C語言進(jìn)行過渡才能使用其它語言,左邊不帶標(biāo)志的,可以使用C語言以外的語言,但使用C語言將大大簡化軟件的開發(fā)(主要是軟件性能很容易提升)。另外,C語言之所以叫“C”語言,是因?yàn)樗抢^“B語言”之后出現(xiàn)的編程語言,這個C代表的只是一個順序。
對比之后可知,PLC是一個工業(yè)控制系統(tǒng),包含軟硬件的概念。C語言是構(gòu)建工業(yè)控制系統(tǒng)及其它軟件的工具之一。它們之間是房屋與符號的關(guān)系。PLC是房屋,C語言是符號。符號連同其它圖素在紙上繪成藍(lán)圖、再將各種材料按藍(lán)圖進(jìn)行組裝就成了房屋。可是建成的房屋上卻看不到符號的存在,而符號不止可以用來設(shè)計(jì)房屋,還可以做更多更偉大的事情。
plc可以用c語言編程嗎
PLC有自己的編程語言,不能用c語言編程的。每個廠家有各自的編程軟件,幾個大公司的視窗版編程軟件如 三菱公司的GPP For Windows編程軟件,HMI人機(jī)界面畫面設(shè)計(jì)軟件,MELSEC-MEDOC編程軟件。
世界出名的PLC生產(chǎn)廠家還有,美國通用電氣公司,美國艾倫-布拉德利公司,日本三菱公司,日本富士電機(jī)公司,日本歐姆龍公司,德國西門子公司,的過通用電氣公司,法國TE公司,不同廠家的產(chǎn)品在使用上相差甚遠(yuǎn),甚至同一廠家不同系列產(chǎn)品在編程語言和編程方法上也有較大差異的!
plc的C語言編程詳解
本章重點(diǎn)介紹C語言編輯功能塊的特點(diǎn)、、編輯、指令調(diào)用、函數(shù)的存儲、應(yīng)用要點(diǎn)等,并附有常用函數(shù)列表。
1、功能概述
XCP新增功能,支持用戶在XCP Pro編程軟件中利用C語言編寫功能塊,在需要的地方進(jìn)行調(diào)用,其最大的優(yōu)點(diǎn)是支持幾乎所有的C語言函數(shù),增強(qiáng)了程序的保密性,同時由于可進(jìn)行多處調(diào)用和不同文件的調(diào)用,大大提高了編程人員的效率。
2、指令形式
適用于XC系列PLC V3.0C及以上版本,XC1、XC3、XC5都支持。
名稱由數(shù)字,英文,下劃線組成,首字符不能為數(shù)字,名稱長度需《=9個字符。 ?
名稱不能與PLC內(nèi)置指令名稱沖突,如LD,ADD,SUB,PLSR等。 ?
名稱不能與當(dāng)前PLC已經(jīng)存在的函數(shù)功能塊同名。
3、操作步驟
1、打開PLC編輯軟件,在左側(cè)的“工程”工具欄內(nèi)選擇“函數(shù)功能塊”,右擊選擇“添加新函數(shù)功能塊”。
2、出現(xiàn)如下對話框,填寫所要編輯函數(shù)的信息。
3、在新建完成后,會出現(xiàn)下面的編輯畫面。
參數(shù)傳遞方式: 在梯形圖調(diào)用時,傳入的D和M,即為W和B的起始地址。如上圖 D0,M0開始,則W[0]為D0,W[10]為D10,B[0]為M0, B[10]為M10。如梯形圖中使用的參數(shù)為D100,M100,則W[0]為D100,B[0]為M100。因此,字與位元件的首地址由用戶在PLC程序中設(shè)定。
參數(shù)W: 表示字軟元件,使用時按數(shù)組使用,如W[0]=1;W[1]=W[2]+W[3];在程序中可按照標(biāo)準(zhǔn)C規(guī)范使用。
參數(shù)B: 表示位軟元件,使用時也按數(shù)組使用,支持位置1和位清零,如B[0]=1;B[1]=0; 以及賦值,如B[0]=B[1]。
雙字運(yùn)算: 在W前加個D,如DW[10]=100000,表示給W[10]W[11]合成的雙字賦值。
浮點(diǎn)運(yùn)算: 支持在函數(shù)中定義浮點(diǎn)變量,以及進(jìn)行浮點(diǎn)運(yùn)算。
函數(shù)庫:用戶功能塊可以直接使用函數(shù)庫中定義的函數(shù)和常量,函數(shù)庫中包含的函數(shù)和常量見后附部分。 ?
支持的其他數(shù)據(jù)類型:
預(yù)定義的宏:
四、函數(shù)的導(dǎo)入、導(dǎo)出
1、導(dǎo)出
(1)功能:將函數(shù)導(dǎo)出為文件,供其他PLC程序?qū)胗谩?/p>
(2)導(dǎo)出方式
a)可編輯:將源代碼也導(dǎo)出,并保存為文件.再次導(dǎo)入后,可再次編輯
b)不可編輯:源代碼不導(dǎo)出.再次導(dǎo)入后只可使用,無法編輯
2、導(dǎo)入
功能:導(dǎo)入已存在的函數(shù)功能塊文件,供該P(yáng)LC程序使用。
選中函數(shù)功能塊,右鍵點(diǎn)擊菜單“從硬盤導(dǎo)入函數(shù)功能塊文件”,選擇相應(yīng)文件,按確定即可。
五、功能塊的編輯
例:將PLC中寄存器D0,D1相加,然后將值賦給D2;
(1)首先在“工程”工具欄里,新建一個函數(shù)功能塊,在這里我們把它命名為ADD_2,并且
編輯C語言程序。
(2)編輯完之后,點(diǎn)擊編譯;
根據(jù)編譯信息列表內(nèi)所顯示的信息,我們可以查找修改C語言程序里的語法漏洞。在這里比較容易的發(fā)現(xiàn)程序中W[2]=W[0]+W[1]的后面缺少符號“;”。
當(dāng)我們將程序修改后,再次進(jìn)行編譯。從列表信息里可以確認(rèn),在程序里面并沒有語法錯誤。
(3)然后再編寫PLC程序,分別賦值十進(jìn)制數(shù)10,20到寄存器D0,D1中,并調(diào)用函數(shù)功能塊ADD_2。如下所示:
(4)然后將程序下載到PLC當(dāng)中,運(yùn)行PLC,并置位M0。
(5)我們可以通過工具欄上的自由監(jiān)控觀察到D2的值變成了30,說明賦值成功了。
六、程序舉例
功能:利用函數(shù)功能塊計(jì)算出CRC校驗(yàn)值。 ?
CRC校驗(yàn)運(yùn)算規(guī)則如下:
(1)令16-bit寄存器(CRC寄存器)=FFFFH。
(2)將第一個8-bit byte 的訊息與低位元16-bit CRC寄存器異或(Exclusive OR)內(nèi)。
(3)右移一位CRC寄存器,將0填入高位元處。
(4)檢查右移的值,如果是0,就將第三步的新值存入CRC寄存器內(nèi),如果為非0,那么
將CRC寄存器的值與A001H異或,將結(jié)果存入CRC寄存器內(nèi)。 (5)重復(fù)(3)到(4),將8-bit全部運(yùn)算完成。 (6)重復(fù)(2)到(5),取下一個8-bit的訊息指令,直到所有訊息指令運(yùn)算完成。最后,
得到的CRC寄存器的值,即是CRC的校驗(yàn)碼。值得注意的是CRC的校驗(yàn)碼必須交換放
置與訊息指令的檢查碼中。
編輯C語言功能塊程序,如下:
編寫PLC梯形圖程序,D0:校驗(yàn)數(shù)據(jù)的字節(jié)個數(shù),D1~D5:校驗(yàn)數(shù)據(jù)的內(nèi)容。如下:
下載到PLC里,然后運(yùn)行,使M0置 ON,通過自由監(jiān)控就會發(fā)現(xiàn)寄存器D6 ,D7內(nèi)分別存入了CRC校驗(yàn)值的高位與底位。
七、應(yīng)用要點(diǎn)
使用函數(shù)功能塊的PLC程序,上傳后.該函數(shù)功能塊無法上傳,將出現(xiàn)一個未知指令錯誤。
一個函數(shù)功能塊文件內(nèi)部,可以寫多個子函數(shù),進(jìn)行相互調(diào)用。
多個函數(shù)功能塊文件彼此獨(dú)立,不能相互調(diào)用各自擁有的函數(shù)。 ?
函數(shù)功能塊文件可以調(diào)用浮點(diǎn),算術(shù)等C語言庫函數(shù),如sin,cos,tan
八、附函數(shù)表
-
plc
+關(guān)注
關(guān)注
5011文章
13297瀏覽量
463306 -
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136813
發(fā)布評論請先 登錄
相關(guān)推薦
評論