PLC基礎(chǔ)篇之?dāng)?shù)據(jù)類型(Data type)
數(shù)據(jù)類型(Data type)是數(shù)據(jù)在PLC(計(jì)算機(jī))中的組織形式,它包含了數(shù)據(jù)的長(zhǎng)度及數(shù)據(jù)所支持的操作方式(支持哪些指令)。編程時(shí)給變量(Varibale)指定數(shù)據(jù)類型后,編譯器會(huì)給該變量分配一定長(zhǎng)度的內(nèi)存并明確該變量的操作方式。透徹的理解數(shù)據(jù)類型是程序設(shè)計(jì)的基本要求。

不同廠家的PLC對(duì)數(shù)據(jù)類型的支持可能會(huì)略有出入,但是基本數(shù)據(jù)類型幾乎相同(不僅僅是PLC的編程,在計(jì)算機(jī)高級(jí)語(yǔ)言的編程中,基本數(shù)據(jù)類型也相同)。這篇文章以西門子S7系列PLC為例,講解下PLC的基本數(shù)據(jù)類型。
首先說(shuō)一說(shuō)“位(bit)”。前一篇文章在講解數(shù)制的時(shí)候(參考:PLC基礎(chǔ)篇之?dāng)?shù)制及其表示方法),曾多次提到“位”的概念。“位”,英文名稱為“bit”,它是PLC(計(jì)算機(jī))的最小存儲(chǔ)單位,其取值范圍為“0”和“1”兩種。
“位”是存儲(chǔ)單位,按位存放的數(shù)據(jù),在數(shù)據(jù)類型中,被稱為“布爾型”(Bool)。布爾型數(shù)據(jù)的取值范圍為“0”和“1”,可用英文“TRUE”(真)和“FALSE”(假)表示。
在PLC的編程中,布爾型的數(shù)據(jù)使用頻率是很高的。對(duì)于數(shù)字量的輸入或輸出,都是以“位”(布爾型)的方式進(jìn)行操作。比如“I0.0”就是一個(gè)布爾型變量,它表示輸入緩沖區(qū)(Input)的第0個(gè)字節(jié)的第0位。“位”,也俗稱“點(diǎn)”,常把輸入通道稱為“I點(diǎn)”,把輸出通道稱為“Q點(diǎn)”。
第二種類型:字節(jié)(Byte)。八個(gè)“位”組成一個(gè)“字節(jié)(Byte)”,如下圖:

在PLC中,輸入模塊和輸出模塊的通道也是按照字節(jié)的順序來(lái)存放的。比如“I0.0~I0.7”,這8個(gè)輸入“位”組成“IB0”。對(duì)于S7-300/400的PLC,Byte類型是無(wú)符號(hào)數(shù),其取值范圍內(nèi)為 0~255(0xFF)。對(duì)于S7-1200/1500PLC的編程(博途平臺(tái)),Byte類型可以作為有符號(hào)數(shù)或者無(wú)符號(hào)數(shù)。當(dāng)作為有符號(hào)數(shù)時(shí),其取值范圍為“-128~+127”;當(dāng)作為無(wú)符號(hào)數(shù)時(shí),其取值范圍為0~255(0xFF)。
第三種類型:字符型(CHAR)。字符型類型的數(shù)據(jù)也占用一個(gè)字節(jié),它內(nèi)部存放的是該字符的ASCII碼值。比如字符“A”,其ASCII碼值為66(0x42)。當(dāng)程序查詢到該數(shù)據(jù)屬于字符型,并且內(nèi)部存儲(chǔ)的值為66時(shí),將會(huì)在屏幕上顯示大寫的字符:“A”。
第四種類型:整型(INT)。整型數(shù)據(jù)占用兩個(gè)字節(jié)(Byte),屬于有符號(hào)數(shù),其取值范圍為:-32768~+32767。整形數(shù)據(jù)的最高位為符號(hào)位,“0”表示正數(shù),“1”表示負(fù)數(shù)。既然整形數(shù)據(jù)由兩個(gè)字節(jié)組成,就有字節(jié)順序的問(wèn)題,哪個(gè)字節(jié)是高字節(jié)呢?西門子S7系列PLC采用大端(Big-Enidan)的存放方式,如下圖(關(guān)于字節(jié)序,請(qǐng)參考文章:給你講個(gè)來(lái)自《格列佛游記》的計(jì)算機(jī)故事):

第五種類型:字(WORD)。“字”類型也占用兩個(gè)字節(jié),但是它表示無(wú)符號(hào)數(shù),其取值范圍為:0~65535(0xFFFF)。與整型數(shù)據(jù)一樣,也采用Big-Endina的方式存放。
在PLC中,用“W”來(lái)表示一個(gè)“字”類型的變量。比如變量“MW0”,其中“M”表示該變量存放在“M”區(qū),“W”表示它是一個(gè)“字”類型的變量,“0”表示其起始地址為0。“MW0”由“MB0”和“MB1”組成,其中“MB0”為高字節(jié)(Big-Endian字節(jié)序)。
第六種類型:雙字(Double WORD)。“雙字”由兩個(gè)“字”組成,因此它包含四個(gè)字節(jié),其取值范圍為:0~4294967295(0xFFFFFFFF)。在PLC中,“雙字”用“D”表示。比如“MD0”,它表示M存儲(chǔ)區(qū)從地址0開(kāi)始的4個(gè)字節(jié),即:MB0、MB1、MB2和MB3,字節(jié)序依然為大端(Big-Endina)。
第六種類型:雙整型(Double INT)。“雙整型”類型由兩個(gè)“整型”組成,也占用四個(gè)字節(jié),不過(guò)它表示的是有符號(hào)數(shù),其取值范圍為:-2147483648~+2147483648。在PLC中,表示為“DINT”。
第七種類型:實(shí)型(Real)。“實(shí)型”數(shù)據(jù)占用四個(gè)字節(jié),用來(lái)表示浮點(diǎn)數(shù)。實(shí)型數(shù)據(jù)總計(jì)32個(gè)“位”,被分成三個(gè)部分:
1)符號(hào)位(Sign):最高位(第31位),正數(shù)為“0”,負(fù)數(shù)為“1”。
2)指數(shù)位(Exponent):第23位到第30位,用于存儲(chǔ)科學(xué)計(jì)數(shù)法中的指數(shù)數(shù)據(jù),并且采用移位存儲(chǔ);
3)尾數(shù)部分(Mantissa):第0位到第22位,表示浮點(diǎn)數(shù)的尾數(shù)部分;
對(duì)于“指數(shù)位”,為了處理負(fù)指數(shù)的需要,其存儲(chǔ)的值為實(shí)際指數(shù)加上偏移量“127”。比如,若實(shí)際指數(shù)為“0”,則存儲(chǔ)值為“127”;若實(shí)際指數(shù)為“-64”,則存儲(chǔ)值為“63”。

實(shí)型數(shù)據(jù)(浮點(diǎn)數(shù))可以使用4個(gè)字節(jié)的空間,可以表示非常大(10的38次方)和非常?。?0的負(fù)38次方)的數(shù),但是浮點(diǎn)數(shù)的運(yùn)算速度相對(duì)整型會(huì)慢一些。在PLC編程中,可以輸入小數(shù)點(diǎn)來(lái)表示浮點(diǎn)數(shù)。比如“10”表示整數(shù),“10.0”表示浮點(diǎn)數(shù)。
對(duì)于S7-1200/1500系列PLC,博途開(kāi)發(fā)環(huán)境支持更多的數(shù)據(jù)類型。比如:UDINT表示無(wú)符號(hào)雙整型;SDINT表示有符號(hào)雙整型;SINT表示有符號(hào)整型;LReal表示雙精度浮點(diǎn)數(shù)(64位,8個(gè)字節(jié))。本文介紹的基本數(shù)據(jù)類型主要針對(duì)S7系列PLC,對(duì)其它PLC產(chǎn)品或計(jì)算機(jī)程序設(shè)計(jì)可能會(huì)略有出入。在某些高級(jí)語(yǔ)言中(比如:VB),布爾型變量的取值范圍雖然也是“0”和“1”,但是要占用2個(gè)字節(jié)(Byte),不同的操作系統(tǒng)對(duì)數(shù)據(jù)類型的定義也會(huì)有所不同(比如32位的Windows和64位的Windows)。為了防止初學(xué)者混淆,建議先搞清楚西門子PLC編程環(huán)境下的基本數(shù)據(jù)類型,如果以后需要在其它開(kāi)發(fā)環(huán)境下編程,只要查詢下相關(guān)手冊(cè),便可觸類旁通。
關(guān)于基本數(shù)據(jù)類型就先講到這里了,西門子PLC還支持復(fù)雜數(shù)據(jù)類型,我們后續(xù)的文章再介紹。相關(guān)參考文章:
PLC基礎(chǔ)篇之?dāng)?shù)制及其表示方法
給你講個(gè)來(lái)自《格列佛游記》的計(jì)算機(jī)故事
官網(wǎng)提供本文PDF版本下載:
-
Origin(Pro):學(xué)習(xí)版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計(jì)算焓和比熱容 2020-08-31
-
CAD外部參照無(wú)法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復(fù)制到另一張圖中? 2020-07-03
