- 深度學習觸摸屏應用技術
- 章祥煒 岳媛 浩天編著
- 6096字
- 2021-12-31 20:46:43
第一節 HMI和PLC系統中的變量及數據類型
一、變量和數據
在博途自動化工程軟件系統中創建HMI設備項目或PLC設備項目時,軟件系統會自動在HMI(PLC)變量編輯器文件夾中生成一個默認變量表用來定義變量。在前兩章的HMI項目的畫面及畫面對象的編輯組態實例中,可以看到使用變量來作為畫面對象的屬性參數、使用變量動態化畫面及畫面對象等。變量用于存放數據信息(數值或文本字符),用于在程序中準確描述反映各種項目工藝過程量和實現項目的工藝控制任務。
無論是編輯組態HMI項目,還是PLC項目,當需要使用數據(變量)時,通常要先在變量表中創建(定義/聲明/添加)變量(即使直接在程序中創建的變量,系統也會自動將它登錄在變量表中),然后在HMI(PLC)程序中運用變量進行數據計算、數據交換和數據處理等。
一旦在變量表中添加一個變量并為之定義名稱,軟件系統就會在設備的存儲器區指定一個存儲單元,用來存放數值或字符。當工程項目需要定義許許多多的變量時,系統軟件就會在存儲區域開辟成百上千的存儲單元,變量名稱是識別區分存儲單元的標志符號,因此變量名稱必須是唯一的,在變量表中,不允許變量重名,否則,軟件系統會在組態編輯時報錯。對于初學者要理解,在PLC和HMI控制系統中,變量實質上就是被指定的存放數據的存儲器單元。存儲單元中的數據就是變量的值,之所以叫變量,是因為存儲單元的數據是可以隨時變化的。這同數學函數中的變量概念完全一致,工藝控制系統中有許多具有量化關系的過程控制量,有的數學關系清晰,有的數學關系模糊,為了準確執行工藝控制過程,通常要設計建立一套包含過程控制量及其數學關系的解決方案,也稱為控制任務的數學模型,用編制的PLC(HMI)程序自動執行控制任務,這些工作通常是從創建變量開始的。
二、常用數制及數制的運算
1.常用數制及相互轉換
在工藝工程計算時,常采用十進制數進行運算,這也是我們日常生活習慣的用法。十進制數制有0~9共十個數字,運算時逢十進一。
在HMI和PLC控制系統的CPU(中央處理運算單元)內部存儲和運算采用的是二進制的編碼和算法。這是由數字電子電路的特性決定的。二進制只有0、1兩個數字元素,各種數據信息用二進制數進行編碼。用二進制計數時逢二進一。例如對于十進制的數0、1、2、6、12、15等六個數,如果用4位二進制數編碼表示則為0000、0001、0010、0110、1100、1111。可以看到4位二進制數有16種編碼組合,最大可表示的數為15。更大的數可以使用8位、16位、32位或64位二進制數表示。數字電路技術可以完美地保存、表現和處理常用的1位、4位、8位、16位、32位或64位二進制數。
一個16位二進制數0101 1110 0011 1010,相當于十進制的多少數呢?二進制數從右到左的位號依次編為第0位、第1位、第2位、…、第15位。就像十進制的個位、十位、百位……,每一位的權重不同,十進制數從個位向左依次為100、101、102、103……。二進制數的各位的權重從最低位0位向左(高位)依次為20、21、22、23……。計算上述的二進制數轉換到十進制數則為1×214+1×212+1×211+1×210+1×29+1×25+1×24+1×23+1×21=24122。位數為1的位號用1乘以權重數,然后相加在一起即可。
依據不同的二進制數編碼規則,在數字電路(大規模集成電路或數字芯片)中可以用二進制數表達整數、浮點數、正負數、日期、時間、字符、字符串(語句)以及各種特殊數字或符號等。這是將人的思維、構想付諸機器(技術發展使其存儲信息容量越來越大,處理速度越來越快)去描述、執行、實現的重要基礎。
在PLC、HMI控制技術學習和程序編制、調試時,經常會看到使用八進制、十六進制、BCD碼等數制格式。為了區分十進制數,通常為其他數制的數添加前綴,如2#0101 1110 0011 1010表示二進制數、8#560表示八進制數、16#2E7B表示十六進制數、BCD#289表示BCD編碼格式的數據等。
八進制數只有8個數字元素,即0、1、2、3、4、5、6、7。計數時逢8進1(不會出現十進制數中的8、9數字)。同樣,一個八進制數如8#560,等于十進制數368,計算方法為8#560=5×82+6×81+0×80=368。
十六進制數有16個數字元素,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,計數時逢16進1。用A、B、C、D、E、F表示數值10、11、12、13、14、15。如16#2E7B等。
PLC、HMI等設備內部最基礎的數據存儲和運算都是以0/1表示的二進制數的存儲和運算,二進制數位數多,難以記憶、識讀、書寫(鍵盤輸入),容易出錯。而用八進制數、十六進制數表示二進制數比較方便,一位十六進制數可以表示四位二進制數,這樣一個16位(或32、64位)的二進制數用4位(8、16位)十六進制數表示,記憶和識讀就方便多了,所以在組態編制、調試程序時,常用十六進制數、八進制數表示二進制數。例如2#0101 1110 0011 1010=16#5E3A,可以看到用4位十六進制數5E3A可以表示16位二進制數。同樣可用一個6位八進制數表示一個16位二進制數,如2#0 101 111 000 110 010=8#057062。
二進制數和十六進制數、八進制數是如何轉換的呢?
表3-1-1為4位二進制數與十六進制數的16個數字元素、BCD編碼數對應代碼表。常被稱為8421碼。將一個二進制數,例如2#0101 1110 0011 1010從右邊最低位0位開始,每四位一組編排,按照表3-1-1的對應規則,將每四位二進制數轉換成8421碼的十六進制數,即完成了二進制數向十六進制數的轉換。0101(16#5)、1110(16#E)、0011(16#3)、1010(16#A),于是,2#0101 1110 0011 1010=16#5E3A。
同樣原理,二進制數轉換成八進制數時,將二進制數從右向左每三位排在一起,將三位二進制數對應的八進制數值代換三位二進制數,即可完成轉換工作。例如16位二進制數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。
十六進制數、八進制數向二進制數轉換也很好理解。十六進制數的每一位按照8421編碼規則,可以分解成4位二進制數,排列順序不變,所形成的二進制數即完成十六進制數向二進制數的轉換。八進制數亦然。
BCD型數據是用4位二進制數表示十進制數,如表3-1-1所示。4位二進制數有16種組合,取其中的10種組合表示十進制數的0~9共10個數字,其余6種組合在BCD編碼中棄之不用。這樣8位二進制數可以表示0~99,16位二進制數可以表示0~9999等,例如BCD編碼的數1001 0110表示十進制的96,16位BCD碼的二進制數0011 0110 0000 0010表示3602。
例如S7-300/400、S7-1500支持的S5TIME類型定時器常采用16位二進制BCD編碼的數據格式。
IEC定時器不再使用BCD編碼數據,直接采用32位二進制整數,獲得廣泛應用。
表3-1-1 4位二進制數與十六進制數16個元素、BCD編碼數對應代碼表

2.數制的運算
二進制數相加以最低位0位為基準,依次向左對位相加,逢二進一。例如8位二進制無符號整數的加運算:
為了表示數值的正負號,對于有符號數,規定最高位為符號位,0表示正(+),1表示負(-)。例如8位有符號整數1011 1010表示-58,為避免出現運算溢出等錯誤,規定8位有符號整數的值域范圍-128~127。8位無符號整數的值域范圍0~255。
二進制數的減運算要用到原碼、反碼和補碼的概念。例如0110 1010的反碼是將各位取反,原位為1則改為0,原位為0則改為1,于是原碼0110 1010的反碼為1001 0101。反碼+1就得到原碼的補碼。于是原碼0110 1010的補碼為1001 0110。
參與二進制數減運算的二進制數是以其補碼的形式進行加運算完成的。正的二進制數的補碼是它本身,負的二進制數的補碼是其正二進制數的取反+1。例如下面兩個8位二進制數的減運算。
在HMI、PLC設備項目程序中經常使用二進制數的邏輯運算。邏輯運算主要有與(AND)、或(OR)、非(NOT)和異或(XOR)等運算。運算規則如下所述。

3.計算器輔助數制轉換和運算
在實際編程調試時,也常用PC操作系統的附件計算器運算和處理多種數制數據,見圖3-1-1和圖3-1-2。

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

圖3-1-2 計算器使用
可選擇數據的長度,如8位(字節)、16位(字)、32位(雙字)和64位(四字或長字)。
可以操作各種數制數據的相互轉換。例如十進制數轉換成二進制數,首先點選十進制工作模式,然后輸入十進制數,再點選二進制模式,當前顯示為二進制表示的輸入數。其他數制間轉換操作同理。
想查看一個二進制數對應的十進制值,需輸入二進制數,但位數較多的二進制數輸入時易出錯。在十進制模式,鼠標單擊二進制數顯示區的二進制數任意位,可以看到該位數值在0/1間轉換,在此輸入(改變)二進制數,上方顯示區可看到對應的十進制數值。
可以操作任意數制數的算術和邏輯運算。例如1011 AND 0110。也可進行移位操作。
三、PLC項目程序中的符號訪問和絕對訪問
當程序在運行過程中讀寫某個變量時,軟件運行系統(或操作系統)會根據變量名稱在變量存儲區域找到那個變量單元并使用(讀/寫)其值,這種根據變量名稱在變量存儲區尋找并讀/寫變量的方法叫符號尋址或符號訪問。
在設計組態HMI和PLC集成控制系統時,作為通信伙伴的HMI設備和PLC設備也是通過相互一一對應的變量實現兩個設備之間的數據傳送和交換的。要在HMI設備變量表中清晰指明HMI變量與PLC變量一一對應(映射)的關系。因此,對于HMI和PLC集成控制系統,既要掌握了解HMI設備的變量表和用法,又要熟悉掌握PLC設備的變量表和數據塊的用法。不同于HMI項目,PLC項目程序中既有變量的符號尋址或符號訪問,也有變量的絕對尋址、絕對訪問的概念。
PLC變量存儲區的最基本工作單元是位(Bit),8個二進制的位組成一個字節(Byte),2個字節組成一個字(Word),2個字組成一個雙字(Double Word)。這里的位、字節、字和雙字等是描述存儲單元大小(長短)的單位。PLC中的存儲單元是按照字節(Byte)依次編排的,如圖3-1-3所示。以M存儲區為例:MB0表示存儲單元的第一個字節,后面單元排列依次標記為MB1、MB2…,M是存儲區域的標志符號,一般用于存儲中間計算數據(很像傳統邏輯控制電路中的中間繼電器的作用,只是中間繼電器只能表示1位的變量數據,通常通電表示1,斷電表示0,繼而其觸點閉合表示1,斷開表示0),B表示字節(Byte)。用MB0、MB1…標記存儲單元的具體地址稱為絕對地址,當程序用MB0、MB1…的標記讀寫存儲單元時,也稱為絕對訪問。

圖3-1-3 數據存儲區位、字節、字與雙字之間的關系(圖中以I存儲區為例)
可以訪問存儲區的位單元,如用M0.0表示第1單元的第0位,M12.6則表示第12字節單元的第6位。
同樣可以訪問字單元和雙字單元,如用MW12表示M存儲區的第12字單元,也就是指向第12和第13字節單元,用字符W(Word)表示字。用MD12表示M存儲區的第12雙字單元,它包含第12~第15四個字節單元,也可以說包含第12和第14兩個字單元,用字符D(Double Word)表示雙字。
依據這樣的存儲單元命名規則,存儲區的任何一個存儲單元,無論是位單元、字節單元、字單元還是雙字單元都有一個確切的地址,即絕對地址。當我們在PLC變量中添加一個新變量時,既要給該變量編制一個名稱(變量符號),又要給該變量安排一個具體的絕對地址。當PLC程序運行時,需要訪問變量,既可以根據變量名稱在眾多變量中找到所需變量(符號尋址、符號訪問),也可以根據變量的絕對地址找到變量(絕對尋址、絕對訪問)。
PLC設備還有I、Q、D、T、C等數據存儲區,雖然都可作為數據存儲區,但是作用不同。I存儲區稱為輸入映像存儲區,用來接收從DI、AI硬件模塊傳送過來的信息數據,針對不同類型的接收數據,可以表示為I0.1、IB10、IW20、ID20等代表位、字節、字和雙字數據變量;Q存儲區稱為輸出映像存儲區,用來存放需要輸出到DQ、AQ硬件模塊的信息數據,同樣可以表示為Q0.1、QB10、QW20、QD20等。在I、Q、M存儲區保存的變量是在PLC變量表中創建的。
D存儲區稱為數據塊存儲單元,由于現場工藝數據比較復雜,為提高處理數據的效率,PLC專門建立了被稱為數據塊的存儲區域,每個數據塊都有唯一的名稱和編號,作為地址便于尋址和訪問。數據塊存儲單元也是以字節順序編排的,當讀寫數據塊中的變量數據時,用絕對地址DB1.DBX2.0表示編號為1的數據塊的第2字節的第0位,用DB2.DBB20表示2號數據塊的第20字節,同理用DB3.DBW12、DB2.DBD20表示數據塊的字和雙字存儲單元的地址。數據塊用DB(Data Block)符號+編號數字表示。數據塊在PLC設備的程序塊編輯器中創建。
四、變量的數據類型
1.HMI變量的數據類型
HMI變量的數據類型本質上同PLC變量的數據類型是一回事。HMI變量數據類型的應用相對PLC變量的使用要簡單一些。
在編輯組態HMI項目時使用的變量分為內部變量和外部變量兩種。內部變量是指在HMI設備項目內部使用的變量,不參與HMI設備與其他設備組網連接所發生的變量通信(數據交換等)等操作。反之,在HMI設備和PLC設備的集成控制系統中,HMI變量通過網絡一一對應(映射)連接PLC變量,參與數據傳送和交換,這類HMI變量稱為外部變量。
無論HMI變量,還是PLC變量,其存儲區中的變量數據長短大小不一,但以位為最基本單元,最小的數據只有一位,數據值只能表示二進制的0或1,數據位長的可以是4位、8位、16位、32位或64位,甚至更長,所能表示的數據值范圍(值域)就很寬。這些是由變量的數據類型不同決定的。
由于現場工藝控制系統的數據應用種類繁多,例如生產線產量計件,可用整數;溫度控制時,如果控制精度為±1℃(如256℃),則可用帶符號的整數,如果控制精度為±0.1℃(如68.6℃),則必須用實數(浮點數),同樣是溫度控制,有些場合溫度的變化范圍較小(如0~120℃),而有些則較大(如0~1200℃),在變量表中定義變量數據類型時,沒有必要將一個值變化范圍較小的變量安排給一個較大(位數較多)的存儲單元,系統操作變量時,既浪費存儲單元容量,又影響運算速度。當定義添加的變量非常多時,這種浪費所帶來的影響就非常大了。
工藝控制工程中的數據應用場合、應用要求千差萬別,為了滿足要求,同時還必須適應半導體存儲器的特點和要求,適應PLC和HMI設備數據計算和處理效率的要求,PLC和HMI系統為變量規定了一系列的數據類型。當用戶使用變量時,要評估所用變量的取值范圍,對照HMI和PLC系統定義的數據類型,為所添加的變量選擇合適的數據類型。
在HMI變量表中添加變量時,如果定義的是內部變量,則必須為其選擇數據類型。HMI設備內部變量的常用數據類型如表3-1-2所示。可以看到位數越多的數據類型所表示的數據取值范圍越大,例如Int型數據表示帶正負號的16位整數,值域為-32768~32767,程序中所用變量值如剛好在此范圍內,就可以為該變量選用Int數據類型,若使用DInt類型也是可以的,但顯然浪費存儲資源,更重要的是CPU運算速度也大受影響,是不可取的。這也是進行數據類型劃分的意義。
表3-1-2 HMI設備內部變量常用數據類型

HMI的外部變量的數據類型取決于與之連接的PLC變量的數據類型,不需要在變量表中定義,當在為HMI外部變量連接到具體的PLC變量時,軟件系統會根據所連的PLC變量的數據類型確定當前HMI變量的數據類型。
2.PLC變量的常用數據類型
PLC變量數據類型比HMI劃分得更多更細,新型S7-1200/1500 PLC比S7-300/400 PLC的數據類型又增加了一些,以S7-1500 PLC支持的數據類型最多。這樣做的目的是提升PLC程序的運算速度和執行效率。許多知名PLC廠商也都采取這樣的做法。
PLC變量通常在變量表和數據塊中創建,如圖3-1-4所示。在組態HMI設備的外部變量連接屬性時,通常在PLC設備的變量表和數據塊中找到對應連接(映射)的變量數據。

圖3-1-4 PLC變量數據的創建和保存
在組態HMI、PLC集成控制系統時,連接通信PLC變量是一個重要的組態工作。這里對PLC變量及常用數據類型介紹如下。
PLC常用的數據類型如表3-1-3、表3-1-4所示。
表3-1-3 S7-300/400 PLC設備變量常用數據類型

表3-1-4 S7-1200/1500 PLC設備變量的常用數據類型


LWord、LInt、ULInt、LReal、LTIME、LTOD和LDT數據類型只能通過符號名尋址。
二進制數、整數、浮點數等數據類型也稱為基本數據類型,含義比較好理解。日期時間數據類型的應用詳見后續章節,自定義數據類型等將在后面章節結合實例進行介紹。