官术网_书友最值得收藏!

第一節(jié) HMI和PLC系統(tǒng)中的變量及數(shù)據(jù)類型

一、變量和數(shù)據(jù)

在博途自動化工程軟件系統(tǒng)中創(chuàng)建HMI設(shè)備項目或PLC設(shè)備項目時,軟件系統(tǒng)會自動在HMI(PLC)變量編輯器文件夾中生成一個默認變量表用來定義變量。在前兩章的HMI項目的畫面及畫面對象的編輯組態(tài)實例中,可以看到使用變量來作為畫面對象的屬性參數(shù)、使用變量動態(tài)化畫面及畫面對象等。變量用于存放數(shù)據(jù)信息(數(shù)值或文本字符),用于在程序中準確描述反映各種項目工藝過程量和實現(xiàn)項目的工藝控制任務(wù)。

無論是編輯組態(tài)HMI項目,還是PLC項目,當需要使用數(shù)據(jù)(變量)時,通常要先在變量表中創(chuàng)建(定義/聲明/添加)變量(即使直接在程序中創(chuàng)建的變量,系統(tǒng)也會自動將它登錄在變量表中),然后在HMI(PLC)程序中運用變量進行數(shù)據(jù)計算、數(shù)據(jù)交換和數(shù)據(jù)處理等。

一旦在變量表中添加一個變量并為之定義名稱,軟件系統(tǒng)就會在設(shè)備的存儲器區(qū)指定一個存儲單元,用來存放數(shù)值或字符。當工程項目需要定義許許多多的變量時,系統(tǒng)軟件就會在存儲區(qū)域開辟成百上千的存儲單元,變量名稱是識別區(qū)分存儲單元的標志符號,因此變量名稱必須是唯一的,在變量表中,不允許變量重名,否則,軟件系統(tǒng)會在組態(tài)編輯時報錯。對于初學(xué)者要理解,在PLC和HMI控制系統(tǒng)中,變量實質(zhì)上就是被指定的存放數(shù)據(jù)的存儲器單元。存儲單元中的數(shù)據(jù)就是變量的值,之所以叫變量,是因為存儲單元的數(shù)據(jù)是可以隨時變化的。這同數(shù)學(xué)函數(shù)中的變量概念完全一致,工藝控制系統(tǒng)中有許多具有量化關(guān)系的過程控制量,有的數(shù)學(xué)關(guān)系清晰,有的數(shù)學(xué)關(guān)系模糊,為了準確執(zhí)行工藝控制過程,通常要設(shè)計建立一套包含過程控制量及其數(shù)學(xué)關(guān)系的解決方案,也稱為控制任務(wù)的數(shù)學(xué)模型,用編制的PLC(HMI)程序自動執(zhí)行控制任務(wù),這些工作通常是從創(chuàng)建變量開始的。

二、常用數(shù)制及數(shù)制的運算

1.常用數(shù)制及相互轉(zhuǎn)換

在工藝工程計算時,常采用十進制數(shù)進行運算,這也是我們?nèi)粘I盍晳T的用法。十進制數(shù)制有0~9共十個數(shù)字,運算時逢十進一。

在HMI和PLC控制系統(tǒng)的CPU(中央處理運算單元)內(nèi)部存儲和運算采用的是二進制的編碼和算法。這是由數(shù)字電子電路的特性決定的。二進制只有0、1兩個數(shù)字元素,各種數(shù)據(jù)信息用二進制數(shù)進行編碼。用二進制計數(shù)時逢二進一。例如對于十進制的數(shù)0、1、2、6、12、15等六個數(shù),如果用4位二進制數(shù)編碼表示則為0000、0001、0010、0110、1100、1111。可以看到4位二進制數(shù)有16種編碼組合,最大可表示的數(shù)為15。更大的數(shù)可以使用8位、16位、32位或64位二進制數(shù)表示。數(shù)字電路技術(shù)可以完美地保存、表現(xiàn)和處理常用的1位、4位、8位、16位、32位或64位二進制數(shù)。

一個16位二進制數(shù)0101 1110 0011 1010,相當于十進制的多少數(shù)呢?二進制數(shù)從右到左的位號依次編為第0位、第1位、第2位、…、第15位。就像十進制的個位、十位、百位……,每一位的權(quán)重不同,十進制數(shù)從個位向左依次為100、101、102、103……。二進制數(shù)的各位的權(quán)重從最低位0位向左(高位)依次為20、21、22、23……。計算上述的二進制數(shù)轉(zhuǎn)換到十進制數(shù)則為1×214+1×212+1×211+1×210+1×29+1×25+1×24+1×23+1×21=24122。位數(shù)為1的位號用1乘以權(quán)重數(shù),然后相加在一起即可。

依據(jù)不同的二進制數(shù)編碼規(guī)則,在數(shù)字電路(大規(guī)模集成電路或數(shù)字芯片)中可以用二進制數(shù)表達整數(shù)、浮點數(shù)、正負數(shù)、日期、時間、字符、字符串(語句)以及各種特殊數(shù)字或符號等。這是將人的思維、構(gòu)想付諸機器(技術(shù)發(fā)展使其存儲信息容量越來越大,處理速度越來越快)去描述、執(zhí)行、實現(xiàn)的重要基礎(chǔ)。

在PLC、HMI控制技術(shù)學(xué)習和程序編制、調(diào)試時,經(jīng)常會看到使用八進制、十六進制、BCD碼等數(shù)制格式。為了區(qū)分十進制數(shù),通常為其他數(shù)制的數(shù)添加前綴,如2#0101 1110 0011 1010表示二進制數(shù)、8#560表示八進制數(shù)、16#2E7B表示十六進制數(shù)、BCD#289表示BCD編碼格式的數(shù)據(jù)等。

八進制數(shù)只有8個數(shù)字元素,即0、1、2、3、4、5、6、7。計數(shù)時逢8進1(不會出現(xiàn)十進制數(shù)中的8、9數(shù)字)。同樣,一個八進制數(shù)如8#560,等于十進制數(shù)368,計算方法為8#560=5×82+6×81+0×80=368。

十六進制數(shù)有16個數(shù)字元素,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,計數(shù)時逢16進1。用A、B、C、D、E、F表示數(shù)值10、11、12、13、14、15。如16#2E7B等。

PLC、HMI等設(shè)備內(nèi)部最基礎(chǔ)的數(shù)據(jù)存儲和運算都是以0/1表示的二進制數(shù)的存儲和運算,二進制數(shù)位數(shù)多,難以記憶、識讀、書寫(鍵盤輸入),容易出錯。而用八進制數(shù)、十六進制數(shù)表示二進制數(shù)比較方便,一位十六進制數(shù)可以表示四位二進制數(shù),這樣一個16位(或32、64位)的二進制數(shù)用4位(8、16位)十六進制數(shù)表示,記憶和識讀就方便多了,所以在組態(tài)編制、調(diào)試程序時,常用十六進制數(shù)、八進制數(shù)表示二進制數(shù)。例如2#0101 1110 0011 1010=16#5E3A,可以看到用4位十六進制數(shù)5E3A可以表示16位二進制數(shù)。同樣可用一個6位八進制數(shù)表示一個16位二進制數(shù),如2#0 101 111 000 110 010=8#057062。

二進制數(shù)和十六進制數(shù)、八進制數(shù)是如何轉(zhuǎn)換的呢?

表3-1-1為4位二進制數(shù)與十六進制數(shù)的16個數(shù)字元素、BCD編碼數(shù)對應(yīng)代碼表。常被稱為8421碼。將一個二進制數(shù),例如2#0101 1110 0011 1010從右邊最低位0位開始,每四位一組編排,按照表3-1-1的對應(yīng)規(guī)則,將每四位二進制數(shù)轉(zhuǎn)換成8421碼的十六進制數(shù),即完成了二進制數(shù)向十六進制數(shù)的轉(zhuǎn)換。0101(16#5)、1110(16#E)、0011(16#3)、1010(16#A),于是,2#0101 1110 0011 1010=16#5E3A。

同樣原理,二進制數(shù)轉(zhuǎn)換成八進制數(shù)時,將二進制數(shù)從右向左每三位排在一起,將三位二進制數(shù)對應(yīng)的八進制數(shù)值代換三位二進制數(shù),即可完成轉(zhuǎn)換工作。例如16位二進制數(shù)2#0 101 111 000 110 010,因2#0=8#0、2#101=8#5、2#111=8#7、2#000=8#0、2#110=8#6、2#010=8#2,于是2#0 101 111 000 110 010=8#057062=8#57062。

十六進制數(shù)、八進制數(shù)向二進制數(shù)轉(zhuǎn)換也很好理解。十六進制數(shù)的每一位按照8421編碼規(guī)則,可以分解成4位二進制數(shù),排列順序不變,所形成的二進制數(shù)即完成十六進制數(shù)向二進制數(shù)的轉(zhuǎn)換。八進制數(shù)亦然。

BCD型數(shù)據(jù)是用4位二進制數(shù)表示十進制數(shù),如表3-1-1所示。4位二進制數(shù)有16種組合,取其中的10種組合表示十進制數(shù)的0~9共10個數(shù)字,其余6種組合在BCD編碼中棄之不用。這樣8位二進制數(shù)可以表示0~99,16位二進制數(shù)可以表示0~9999等,例如BCD編碼的數(shù)1001 0110表示十進制的96,16位BCD碼的二進制數(shù)0011 0110 0000 0010表示3602。

例如S7-300/400、S7-1500支持的S5TIME類型定時器常采用16位二進制BCD編碼的數(shù)據(jù)格式。

IEC定時器不再使用BCD編碼數(shù)據(jù),直接采用32位二進制整數(shù),獲得廣泛應(yīng)用。

表3-1-1 4位二進制數(shù)與十六進制數(shù)16個元素、BCD編碼數(shù)對應(yīng)代碼表

2.數(shù)制的運算

二進制數(shù)相加以最低位0位為基準,依次向左對位相加,逢二進一。例如8位二進制無符號整數(shù)的加運算:

為了表示數(shù)值的正負號,對于有符號數(shù),規(guī)定最高位為符號位,0表示正(+),1表示負(-)。例如8位有符號整數(shù)1011 1010表示-58,為避免出現(xiàn)運算溢出等錯誤,規(guī)定8位有符號整數(shù)的值域范圍-128~127。8位無符號整數(shù)的值域范圍0~255。

二進制數(shù)的減運算要用到原碼、反碼和補碼的概念。例如0110 1010的反碼是將各位取反,原位為1則改為0,原位為0則改為1,于是原碼0110 1010的反碼為1001 0101。反碼+1就得到原碼的補碼。于是原碼0110 1010的補碼為1001 0110。

參與二進制數(shù)減運算的二進制數(shù)是以其補碼的形式進行加運算完成的。正的二進制數(shù)的補碼是它本身,負的二進制數(shù)的補碼是其正二進制數(shù)的取反+1。例如下面兩個8位二進制數(shù)的減運算。

在HMI、PLC設(shè)備項目程序中經(jīng)常使用二進制數(shù)的邏輯運算。邏輯運算主要有與(AND)、或(OR)、非(NOT)和異或(XOR)等運算。運算規(guī)則如下所述。

3.計算器輔助數(shù)制轉(zhuǎn)換和運算

在實際編程調(diào)試時,也常用PC操作系統(tǒng)的附件計算器運算和處理多種數(shù)制數(shù)據(jù),見圖3-1-1和圖3-1-2。

圖3-1-1 附件計算器的程序員工作模式

圖3-1-2 計算器使用

可選擇數(shù)據(jù)的長度,如8位(字節(jié))、16位(字)、32位(雙字)和64位(四字或長字)。

可以操作各種數(shù)制數(shù)據(jù)的相互轉(zhuǎn)換。例如十進制數(shù)轉(zhuǎn)換成二進制數(shù),首先點選十進制工作模式,然后輸入十進制數(shù),再點選二進制模式,當前顯示為二進制表示的輸入數(shù)。其他數(shù)制間轉(zhuǎn)換操作同理。

想查看一個二進制數(shù)對應(yīng)的十進制值,需輸入二進制數(shù),但位數(shù)較多的二進制數(shù)輸入時易出錯。在十進制模式,鼠標單擊二進制數(shù)顯示區(qū)的二進制數(shù)任意位,可以看到該位數(shù)值在0/1間轉(zhuǎn)換,在此輸入(改變)二進制數(shù),上方顯示區(qū)可看到對應(yīng)的十進制數(shù)值。

可以操作任意數(shù)制數(shù)的算術(shù)和邏輯運算。例如1011 AND 0110。也可進行移位操作。

三、PLC項目程序中的符號訪問和絕對訪問

當程序在運行過程中讀寫某個變量時,軟件運行系統(tǒng)(或操作系統(tǒng))會根據(jù)變量名稱在變量存儲區(qū)域找到那個變量單元并使用(讀/寫)其值,這種根據(jù)變量名稱在變量存儲區(qū)尋找并讀/寫變量的方法叫符號尋址或符號訪問。

在設(shè)計組態(tài)HMI和PLC集成控制系統(tǒng)時,作為通信伙伴的HMI設(shè)備和PLC設(shè)備也是通過相互一一對應(yīng)的變量實現(xiàn)兩個設(shè)備之間的數(shù)據(jù)傳送和交換的。要在HMI設(shè)備變量表中清晰指明HMI變量與PLC變量一一對應(yīng)(映射)的關(guān)系。因此,對于HMI和PLC集成控制系統(tǒng),既要掌握了解HMI設(shè)備的變量表和用法,又要熟悉掌握PLC設(shè)備的變量表和數(shù)據(jù)塊的用法。不同于HMI項目,PLC項目程序中既有變量的符號尋址或符號訪問,也有變量的絕對尋址、絕對訪問的概念。

PLC變量存儲區(qū)的最基本工作單元是位(Bit),8個二進制的位組成一個字節(jié)(Byte),2個字節(jié)組成一個字(Word),2個字組成一個雙字(Double Word)。這里的位、字節(jié)、字和雙字等是描述存儲單元大小(長短)的單位。PLC中的存儲單元是按照字節(jié)(Byte)依次編排的,如圖3-1-3所示。以M存儲區(qū)為例:MB0表示存儲單元的第一個字節(jié),后面單元排列依次標記為MB1、MB2…,M是存儲區(qū)域的標志符號,一般用于存儲中間計算數(shù)據(jù)(很像傳統(tǒng)邏輯控制電路中的中間繼電器的作用,只是中間繼電器只能表示1位的變量數(shù)據(jù),通常通電表示1,斷電表示0,繼而其觸點閉合表示1,斷開表示0),B表示字節(jié)(Byte)。用MB0、MB1…標記存儲單元的具體地址稱為絕對地址,當程序用MB0、MB1…的標記讀寫存儲單元時,也稱為絕對訪問。

圖3-1-3 數(shù)據(jù)存儲區(qū)位、字節(jié)、字與雙字之間的關(guān)系(圖中以I存儲區(qū)為例)

可以訪問存儲區(qū)的位單元,如用M0.0表示第1單元的第0位,M12.6則表示第12字節(jié)單元的第6位。

同樣可以訪問字單元和雙字單元,如用MW12表示M存儲區(qū)的第12字單元,也就是指向第12和第13字節(jié)單元,用字符W(Word)表示字。用MD12表示M存儲區(qū)的第12雙字單元,它包含第12~第15四個字節(jié)單元,也可以說包含第12和第14兩個字單元,用字符D(Double Word)表示雙字。

依據(jù)這樣的存儲單元命名規(guī)則,存儲區(qū)的任何一個存儲單元,無論是位單元、字節(jié)單元、字單元還是雙字單元都有一個確切的地址,即絕對地址。當我們在PLC變量中添加一個新變量時,既要給該變量編制一個名稱(變量符號),又要給該變量安排一個具體的絕對地址。當PLC程序運行時,需要訪問變量,既可以根據(jù)變量名稱在眾多變量中找到所需變量(符號尋址、符號訪問),也可以根據(jù)變量的絕對地址找到變量(絕對尋址、絕對訪問)。

PLC設(shè)備還有I、Q、D、T、C等數(shù)據(jù)存儲區(qū),雖然都可作為數(shù)據(jù)存儲區(qū),但是作用不同。I存儲區(qū)稱為輸入映像存儲區(qū),用來接收從DI、AI硬件模塊傳送過來的信息數(shù)據(jù),針對不同類型的接收數(shù)據(jù),可以表示為I0.1、IB10、IW20、ID20等代表位、字節(jié)、字和雙字數(shù)據(jù)變量;Q存儲區(qū)稱為輸出映像存儲區(qū),用來存放需要輸出到DQ、AQ硬件模塊的信息數(shù)據(jù),同樣可以表示為Q0.1、QB10、QW20、QD20等。在I、Q、M存儲區(qū)保存的變量是在PLC變量表中創(chuàng)建的。

D存儲區(qū)稱為數(shù)據(jù)塊存儲單元,由于現(xiàn)場工藝數(shù)據(jù)比較復(fù)雜,為提高處理數(shù)據(jù)的效率,PLC專門建立了被稱為數(shù)據(jù)塊的存儲區(qū)域,每個數(shù)據(jù)塊都有唯一的名稱和編號,作為地址便于尋址和訪問。數(shù)據(jù)塊存儲單元也是以字節(jié)順序編排的,當讀寫數(shù)據(jù)塊中的變量數(shù)據(jù)時,用絕對地址DB1.DBX2.0表示編號為1的數(shù)據(jù)塊的第2字節(jié)的第0位,用DB2.DBB20表示2號數(shù)據(jù)塊的第20字節(jié),同理用DB3.DBW12、DB2.DBD20表示數(shù)據(jù)塊的字和雙字存儲單元的地址。數(shù)據(jù)塊用DB(Data Block)符號+編號數(shù)字表示。數(shù)據(jù)塊在PLC設(shè)備的程序塊編輯器中創(chuàng)建。

四、變量的數(shù)據(jù)類型

1.HMI變量的數(shù)據(jù)類型

HMI變量的數(shù)據(jù)類型本質(zhì)上同PLC變量的數(shù)據(jù)類型是一回事。HMI變量數(shù)據(jù)類型的應(yīng)用相對PLC變量的使用要簡單一些。

在編輯組態(tài)HMI項目時使用的變量分為內(nèi)部變量和外部變量兩種。內(nèi)部變量是指在HMI設(shè)備項目內(nèi)部使用的變量,不參與HMI設(shè)備與其他設(shè)備組網(wǎng)連接所發(fā)生的變量通信(數(shù)據(jù)交換等)等操作。反之,在HMI設(shè)備和PLC設(shè)備的集成控制系統(tǒng)中,HMI變量通過網(wǎng)絡(luò)一一對應(yīng)(映射)連接PLC變量,參與數(shù)據(jù)傳送和交換,這類HMI變量稱為外部變量。

無論HMI變量,還是PLC變量,其存儲區(qū)中的變量數(shù)據(jù)長短大小不一,但以位為最基本單元,最小的數(shù)據(jù)只有一位,數(shù)據(jù)值只能表示二進制的0或1,數(shù)據(jù)位長的可以是4位、8位、16位、32位或64位,甚至更長,所能表示的數(shù)據(jù)值范圍(值域)就很寬。這些是由變量的數(shù)據(jù)類型不同決定的。

由于現(xiàn)場工藝控制系統(tǒng)的數(shù)據(jù)應(yīng)用種類繁多,例如生產(chǎn)線產(chǎn)量計件,可用整數(shù);溫度控制時,如果控制精度為±1℃(如256℃),則可用帶符號的整數(shù),如果控制精度為±0.1℃(如68.6℃),則必須用實數(shù)(浮點數(shù)),同樣是溫度控制,有些場合溫度的變化范圍較小(如0~120℃),而有些則較大(如0~1200℃),在變量表中定義變量數(shù)據(jù)類型時,沒有必要將一個值變化范圍較小的變量安排給一個較大(位數(shù)較多)的存儲單元,系統(tǒng)操作變量時,既浪費存儲單元容量,又影響運算速度。當定義添加的變量非常多時,這種浪費所帶來的影響就非常大了。

工藝控制工程中的數(shù)據(jù)應(yīng)用場合、應(yīng)用要求千差萬別,為了滿足要求,同時還必須適應(yīng)半導(dǎo)體存儲器的特點和要求,適應(yīng)PLC和HMI設(shè)備數(shù)據(jù)計算和處理效率的要求,PLC和HMI系統(tǒng)為變量規(guī)定了一系列的數(shù)據(jù)類型。當用戶使用變量時,要評估所用變量的取值范圍,對照HMI和PLC系統(tǒng)定義的數(shù)據(jù)類型,為所添加的變量選擇合適的數(shù)據(jù)類型。

在HMI變量表中添加變量時,如果定義的是內(nèi)部變量,則必須為其選擇數(shù)據(jù)類型。HMI設(shè)備內(nèi)部變量的常用數(shù)據(jù)類型如表3-1-2所示。可以看到位數(shù)越多的數(shù)據(jù)類型所表示的數(shù)據(jù)取值范圍越大,例如Int型數(shù)據(jù)表示帶正負號的16位整數(shù),值域為-32768~32767,程序中所用變量值如剛好在此范圍內(nèi),就可以為該變量選用Int數(shù)據(jù)類型,若使用DInt類型也是可以的,但顯然浪費存儲資源,更重要的是CPU運算速度也大受影響,是不可取的。這也是進行數(shù)據(jù)類型劃分的意義。

表3-1-2 HMI設(shè)備內(nèi)部變量常用數(shù)據(jù)類型

HMI的外部變量的數(shù)據(jù)類型取決于與之連接的PLC變量的數(shù)據(jù)類型,不需要在變量表中定義,當在為HMI外部變量連接到具體的PLC變量時,軟件系統(tǒng)會根據(jù)所連的PLC變量的數(shù)據(jù)類型確定當前HMI變量的數(shù)據(jù)類型。

2.PLC變量的常用數(shù)據(jù)類型

PLC變量數(shù)據(jù)類型比HMI劃分得更多更細,新型S7-1200/1500 PLC比S7-300/400 PLC的數(shù)據(jù)類型又增加了一些,以S7-1500 PLC支持的數(shù)據(jù)類型最多。這樣做的目的是提升PLC程序的運算速度和執(zhí)行效率。許多知名PLC廠商也都采取這樣的做法。

PLC變量通常在變量表和數(shù)據(jù)塊中創(chuàng)建,如圖3-1-4所示。在組態(tài)HMI設(shè)備的外部變量連接屬性時,通常在PLC設(shè)備的變量表和數(shù)據(jù)塊中找到對應(yīng)連接(映射)的變量數(shù)據(jù)。

圖3-1-4 PLC變量數(shù)據(jù)的創(chuàng)建和保存

在組態(tài)HMI、PLC集成控制系統(tǒng)時,連接通信PLC變量是一個重要的組態(tài)工作。這里對PLC變量及常用數(shù)據(jù)類型介紹如下。

PLC常用的數(shù)據(jù)類型如表3-1-3、表3-1-4所示。

表3-1-3 S7-300/400 PLC設(shè)備變量常用數(shù)據(jù)類型

表3-1-4 S7-1200/1500 PLC設(shè)備變量的常用數(shù)據(jù)類型

LWord、LInt、ULInt、LReal、LTIME、LTOD和LDT數(shù)據(jù)類型只能通過符號名尋址。

二進制數(shù)、整數(shù)、浮點數(shù)等數(shù)據(jù)類型也稱為基本數(shù)據(jù)類型,含義比較好理解。日期時間數(shù)據(jù)類型的應(yīng)用詳見后續(xù)章節(jié),自定義數(shù)據(jù)類型等將在后面章節(jié)結(jié)合實例進行介紹。

主站蜘蛛池模板: 清河县| 榆树市| 黔东| 永福县| 邵东县| 武乡县| 湖北省| 岳普湖县| 开阳县| 盱眙县| 绵竹市| 汉沽区| 上饶市| 水富县| 南涧| 泗洪县| 合山市| 安多县| 科技| 盘锦市| 江西省| 隆安县| 玛沁县| 腾冲县| 遵义县| 永修县| 霸州市| 普兰县| 临泉县| 绥江县| 郑州市| 滁州市| 乌鲁木齐县| 枣庄市| 闽侯县| 收藏| 凌云县| 朝阳县| 彝良县| 嘉善县| 大渡口区|