PLC基礎篇之數據類型(Data type)

數據類型(Data type)是數據在PLC(計算機)中的組織形式,它包含了數據的長度及數據所支持的操作方式(支持哪些指令)。編程時給變數(Varibale)指定數據類型後,編譯器會給該變數分配一定長度的內存並明確該變數的操作方式。透徹的理解數據類型是程序設計的基本要求。

不同廠家的PLC對數據類型的支持可能會略有出入,但是基本數據類型幾乎相同(不僅僅是PLC的編程,在計算機高級語言的編程中,基本數據類型也相同)。這篇文章以西門子S7系列PLC為例,講解下PLC的基本數據類型。

首先說一說「位(bit)」。前一篇文章在講解數制的時候(參考:PLC基礎篇之數制及其表示方法),曾多次提到「位」的概念。「位」,英文名稱為「bit」,它是PLC(計算機)的最小存儲單位,其取值範圍為「0」和「1」兩種。

「位」是存儲單位,按位存放的數據,在數據類型中,被稱為「布爾型」(Bool)。布爾型數據的取值範圍為「0」和「1」,可用英文「TRUE」(真)和「FALSE」(假)表示。

在PLC的編程中,布爾型的數據使用頻率是很高的。對於數字量的輸入或輸出,都是以「位」(布爾型)的方式進行操作。比如「I0.0」就是一個布爾型變數,它表示輸入緩衝區(Input)的第0個位元組的第0位。「位」,也俗稱「點」,常把輸入通道稱為「I點」,把輸出通道稱為「Q點」。

第二種類型:位元組(Byte)。八個「位」組成一個「位元組(Byte)」,如下圖:

在PLC中,輸入模塊和輸出模塊的通道也是按照位元組的順序來存放的。比如「I0.0~I0.7」,這8個輸入「位」組成「IB0」。對於S7-300/400的PLC,Byte類型是無符號數,其取值範圍內為 0~255(0xFF)。對於S7-1200/1500PLC的編程(博途平台),Byte類型可以作為有符號數或者無符號數。當作為有符號數時,其取值範圍為「-128~+127」;當作為無符號數時,其取值範圍為0~255(0xFF)。

第三種類型:字元型(CHAR)。字元型類型的數據也佔用一個位元組,它內部存放的是該字元的ASCII碼值。比如字元「A」,其ASCII碼值為66(0x42)。當程序查詢到該數據屬於字元型,並且內部存儲的值為66時,將會在屏幕上顯示大寫的字元:「A」。

第四種類型:整型(INT)。整型數據佔用兩個位元組(Byte),屬於有符號數,其取值範圍為:-32768~+32767。整形數據的最高位為符號位,「0」表示正數,「1」表示負數。既然整形數據由兩個位元組組成,就有位元組順序的問題,哪個位元組是高位元組呢?西門子S7系列PLC採用大端(Big-Enidan)的存放方式,如下圖(關於位元組序,請參考文章:給你講個來自《格列佛遊記》的計算機故事):

第五種類型:字(WORD)。「字」類型也佔用兩個位元組,但是它表示無符號數,其取值範圍為:0~65535(0xFFFF)。與整型數據一樣,也採用Big-Endina的方式存放。

在PLC中,用「W」來表示一個「字」類型的變數。比如變數「MW0」,其中「M」表示該變數存放在「M」區,「W」表示它是一個「字」類型的變數,「0」表示其起始地址為0。「MW0」由「MB0」和「MB1」組成,其中「MB0」為高位元組(Big-Endian位元組序)。

第六種類型:雙字(Double WORD)。「雙字」由兩個「字」組成,因此它包含四個位元組,其取值範圍為:0~4294967295(0xFFFFFFFF)。在PLC中,「雙字」用「D」表示。比如「MD0」,它表示M存儲區從地址0開始的4個位元組,即:MB0、MB1、MB2和MB3,位元組序依然為大端(Big-Endina)。

第六種類型:雙整型(Double INT)。「雙整型」類型由兩個「整型」組成,也佔用四個位元組,不過它表示的是有符號數,其取值範圍為:-2147483648~+2147483648。在PLC中,表示為「DINT」。

第七種類型:實型(Real)。「實型」數據佔用四個位元組,用來表示浮點數。實型數據總計32個「位」,被分成三個部分:

1)符號位(Sign):最高位(第31位),正數為「0」,負數為「1」。

2)指數位(Exponent):第23位到第30位,用於存儲科學計數法中的指數數據,並且採用移位存儲;

3)尾數部分(Mantissa):第0位到第22位,表示浮點數的尾數部分;

對於「指數位」,為了處理負指數的需要,其存儲的值為實際指數加上偏移量「127」。比如,若實際指數為「0」,則存儲值為「127」;若實際指數為「-64」,則存儲值為「63」。

實型數據(浮點數)可以使用4個位元組的空間,可以表示非常大(10的38次方)和非常小(10的負38次方)的數,但是浮點數的運算速度相對整型會慢一些。在PLC編程中,可以輸入小數點來表示浮點數。比如「10」表示整數,「10.0」表示浮點數。

對於S7-1200/1500系列PLC,博途開發環境支持更多的數據類型。比如:UDINT表示無符號雙整型;SDINT表示有符號雙整型;SINT表示有符號整型;LReal表示雙精度浮點數(64位,8個位元組)。本文介紹的基本數據類型主要針對S7系列PLC,對其它PLC產品或計算機程序設計可能會略有出入。在某些高級語言中(比如:VB),布爾型變數的取值範圍雖然也是「0」和「1」,但是要佔用2個位元組(Byte),不同的操作系統對數據類型的定義也會有所不同(比如32位的Windows和64位的Windows)。為了防止初學者混淆,建議先搞清楚西門子PLC編程環境下的基本數據類型,如果以後需要在其它開發環境下編程,只要查詢下相關手冊,便可觸類旁通。

關於基本數據類型就先講到這裡了,西門子PLC還支持複雜數據類型,我們後續的文章再介紹。相關參考文章:

PLC基礎篇之數制及其表示方法

給你講個來自《格列佛遊記》的計算機故事

官網方正智芯提供本文PDF版本下載:


推薦閱讀:

作為一名電氣工程師數學重要嗎?
專欄導讀——圍繞電力市場的幾句閑話
車用電機控制器
工控人一年出差8月,老婆怎麼看?

TAG:可编程逻辑控制器PLC | 电气自动化 | 电气工程 |