S7-200系統(tǒng)中的數(shù)據(jù)及其格式
S7-200 CPU收集操作指令、現(xiàn)場(chǎng)狀況等信息,把這些信息按照用戶程序指定的規(guī)律進(jìn)行運(yùn)算、處理,然后輸出控制、顯示等信號(hào)。
所有這些信息在S7-200 PLC中,都表示為不同格式的數(shù)據(jù),作為數(shù)據(jù)來處理;按照其自身定義,格式不同的數(shù)據(jù)表示不同含義的信息。
在S7-200中,各種指令對(duì)數(shù)據(jù)格式都有一定要求,指令與數(shù)據(jù)之間的格式要一致才能正常工作。例如,為一個(gè)整數(shù)數(shù)據(jù)使用實(shí)數(shù)(浮點(diǎn)數(shù))運(yùn)算指令,顯然會(huì)得到不正確的結(jié)果。 數(shù)據(jù)有不同的長(zhǎng)度(以二進(jìn)制表示它們時(shí),占據(jù)的位數(shù)不同),也就決定了數(shù)值的大小范圍。模擬量信號(hào)在進(jìn)行模/數(shù)(A/D)和數(shù)/模(D/A)轉(zhuǎn)換時(shí),一定會(huì)存在誤差;代表模擬量信號(hào)的數(shù)據(jù),只能以一定的精度表示模擬量信號(hào)。
所有的數(shù)據(jù)在PLC中都是以二進(jìn)制形式表示的 ? 數(shù)據(jù)都有其特定的長(zhǎng)度和表示方式,稱為格式 ? 數(shù)據(jù)的格式與用于運(yùn)算、處理它的指令相關(guān)
以不同的格式查看一個(gè)數(shù)據(jù),或是使用不同格式的指令處理它,會(huì)得到不同的效果
表1. S7-200支持的數(shù)據(jù)格式 尋址格式
數(shù)據(jù)長(zhǎng)度
(二進(jìn)制位)
數(shù)據(jù)類型
取值范圍
BOOL(位) 1(位) 布爾數(shù)
(二進(jìn)制位)
真(1);假(0)
BYTE(字節(jié))
8
(字節(jié)) 無符號(hào)整數(shù) 0 ~ 255;0 ~ FF(Hex) INT(整數(shù)) 16
(字)
有符號(hào)整數(shù) - 32768 ~ 32767; 8000 ~ 7FFF(Hex) WORD(字) 無符號(hào)整數(shù) 0 ~ 65535; 0 ~ FFFF(Hex)
DINT (雙整數(shù))
32
(雙字) 有符號(hào)整數(shù) - 2147483648 ~ 2147483647 8000 0000 ~ 7FFF FFFF(Hex) DWORD
(雙字)
無符號(hào)整數(shù) 0 ~ 4294967295; 0 ~ FFFF FFFF(Hex)
REAL (實(shí)數(shù)) IEEE 32位 單精度浮點(diǎn)數(shù)
-3.402823E+38 ~ -1.175495E-38(負(fù)數(shù)); +1.175495E-38 ~+3.402823E+38(正數(shù)); 0.0※ ASCII 8/個(gè)
(字節(jié))
字符列表 ASCII字符、
漢字內(nèi)碼(每個(gè)漢字2字節(jié)) STRING (字符串)
字符串
1 ~ 254個(gè)ASCII字符、
漢字內(nèi)碼(每個(gè)漢字2字節(jié))
※ 實(shí)數(shù)不能絕對(duì)準(zhǔn)確地表示“零”
二進(jìn)制、十六進(jìn)制和十進(jìn)制
二進(jìn)制和二進(jìn)制數(shù): 所有通過S7-200 PLC處理的數(shù)據(jù)(數(shù)值、字符等等)都以二進(jìn)制形式表示。在S7-200中,特別指出一個(gè)數(shù)據(jù)是二進(jìn)制數(shù)并沒有什么意義。
十六進(jìn)制和十六進(jìn)制數(shù):在二進(jìn)制數(shù)中,每4個(gè)二進(jìn)制位可以分為一組;這組二進(jìn)制數(shù)值的不同變化可以表示16個(gè)狀態(tài),正好是16進(jìn)制數(shù)每一位數(shù)字的變化范圍。因此,可以用十六進(jìn)制數(shù)值方便地表示二進(jìn)制數(shù)。
例如,二進(jìn)制數(shù)1000_1111b分為兩組來看,分別是1000b和1111b,正好可以表示16進(jìn)制數(shù)字8h和Fh(0000b對(duì)應(yīng)于0h,...,1111b對(duì)應(yīng)于Fh);那么這個(gè)二進(jìn)制數(shù)就可以表示為8Fh。
十進(jìn)制和十進(jìn)制數(shù):十進(jìn)制是S7-200的數(shù)學(xué)計(jì)算的基礎(chǔ),在S7-200中,一般都使用十進(jìn)制的體系,除了時(shí)間(12/24或60進(jìn)制)等特殊數(shù)據(jù)外。
二進(jìn)制數(shù)用于在PLC中表示十進(jìn)制數(shù)值、或者其他(如字符等)數(shù)據(jù),而16進(jìn)制用來比較簡(jiǎn)單地描述二進(jìn)制數(shù)。
在S7-200中,二進(jìn)制立即數(shù)表示為2#xxxx_xxxx(1字節(jié)長(zhǎng)度),16進(jìn)制立即數(shù)表示為16#xx(1字節(jié)長(zhǎng)度)。
二進(jìn)制位邏輯(bit)
PLC中以二進(jìn)制“位”的數(shù)據(jù)形式來表示邏輯“1”、“0”(或者“開”、“關(guān)”)。位是最基本的數(shù)據(jù)單位。
在數(shù)據(jù)字節(jié)(Byte)中,二進(jìn)制邏輯只用一個(gè)位(bit)來表示。每個(gè)字節(jié)由8個(gè)位組成。 ?
在S7-200中,某些類型的數(shù)據(jù)兼有成組的字節(jié)(字)訪問形式,也有位的訪問形式,如定時(shí)器、計(jì)數(shù)器等 ? 在編程軟件Micro/WIN中,對(duì)位數(shù)據(jù)進(jìn)行運(yùn)算操作的指令都在指令樹的Bit Logic(位邏輯)分支中
“位”的邏輯值為“1”或者“0”,但是在實(shí)際應(yīng)用中,某種狀態(tài)的“有效值”可以是“1”,也可以是“0”。“有效”就是我們認(rèn)為某個(gè)狀態(tài)已經(jīng)“激活”
整數(shù)、無符號(hào)整數(shù)和有符號(hào)整數(shù)
字節(jié)、字、雙字都可以用來表示十進(jìn)制整數(shù),顯然它們的數(shù)據(jù)長(zhǎng)度不同,能夠表示的數(shù)的大小范圍也不同。
無符號(hào)整數(shù)只有0和正整數(shù);有符號(hào)整數(shù)可以有正數(shù)和負(fù)數(shù)。 有符號(hào)整數(shù)采用二進(jìn)制補(bǔ)碼的形式來表示負(fù)數(shù)。
在S7-200中,字節(jié)、字、雙字都可以按照無符號(hào)、有符號(hào)整數(shù)來查看 ? Micro/WIN中,整數(shù)運(yùn)算指令在指令樹的Integer Math分支中
只有字節(jié)運(yùn)算指令(帶B符號(hào)的指令,如INC_B等)是無符號(hào)整數(shù)運(yùn)算指令
凡帶有I,或W,DW等(除字節(jié)B指令外)的數(shù)學(xué)運(yùn)算指令,都是有符號(hào)整數(shù)運(yùn)算指令
定時(shí)器、計(jì)數(shù)器的值都是有符號(hào)整數(shù)
HSC(高速計(jì)數(shù)器)的計(jì)數(shù)當(dāng)前值(HCx)和設(shè)定值都是32位的有符號(hào)整數(shù) ?
在編程軟件Micro/WIN中輸入立即數(shù)據(jù)時(shí),如果不輸入小數(shù)點(diǎn),則認(rèn)作整數(shù)
在不需要高精度運(yùn)算的條件下,使用整數(shù)可以簡(jiǎn)化編程,節(jié)省處理時(shí)間。
實(shí)數(shù)(浮點(diǎn)數(shù))
在S7-200中,實(shí)數(shù)(浮點(diǎn)數(shù))是符合IEEE標(biāo)準(zhǔn)的32位實(shí)數(shù),即單精度實(shí)數(shù)。實(shí)數(shù)格式按照一定的運(yùn)算規(guī)律把32個(gè)二進(jìn)制位分組,表示極小或極大的數(shù)。
S7-200的實(shí)數(shù)運(yùn)算指令都在指令樹的Floating-Point Math(實(shí)數(shù)運(yùn)算) 分支中 ? 實(shí)數(shù)當(dāng)作整數(shù)運(yùn)算的時(shí)候會(huì)導(dǎo)致數(shù)值的錯(cuò)誤;而整數(shù)當(dāng)作實(shí)數(shù)應(yīng)用可能會(huì)使數(shù)據(jù)非法(不符合標(biāo)準(zhǔn))
在編程軟件Micro/WIN中輸入帶小數(shù)點(diǎn)數(shù)據(jù)的數(shù)據(jù),則認(rèn)為實(shí)數(shù)(實(shí)數(shù)形式的整數(shù)值必須輸入小數(shù)點(diǎn)和一位為零的小數(shù)位,如10.0)
ASCII字符和String(字符串)
在S7-200中,ASCII字符是由表示字母、數(shù)字和一些特殊符號(hào)的ASCII編碼組成的二進(jìn)制數(shù)據(jù)字節(jié),一個(gè)字節(jié)存儲(chǔ)一個(gè)字符。
ASCII(美國(guó)信息交換標(biāo)準(zhǔn)碼)是一種字符編碼格式,在一個(gè)字節(jié)長(zhǎng)度中不同的二進(jìn)制數(shù)值代表不同的字符。如字母A為41h(十六進(jìn)制數(shù)值),以十進(jìn)制看就是65;而數(shù)字5的ASCII值為35h,十進(jìn)制值為53。
S7-200中新引入了String(字符串)數(shù)據(jù)格式,其結(jié)構(gòu)是在ASCII字符字節(jié)串前面有一個(gè)串長(zhǎng)度。字符串最長(zhǎng)可以有255個(gè)數(shù)據(jù)字節(jié)。
字符串中也能包括漢字編碼,每個(gè)漢字占用兩個(gè)字節(jié)。
這是S7-200內(nèi)部對(duì)ASCII字符串的格式定義,所有與字符串有關(guān)的指令都遵照這個(gè)格式。
在編程軟件中,用單字節(jié)(英文)的單引號(hào)(')將作為字符的內(nèi)容括起來可以在數(shù)據(jù)塊和狀態(tài)圖中輸入ASCII數(shù)據(jù)字節(jié)
在單字節(jié)的雙引號(hào)(")中間輸入文本內(nèi)容可以輸入字符串
按上述方法輸入的字符串會(huì)自動(dòng)按字符串格式排列(在起始地址中放入字符個(gè)數(shù)) ? 使用程序,或人為組合成的ASCII字符串,使用ASCII字符串指令時(shí),必須注意是否符合格式
例如:
圖1. 在數(shù)據(jù)塊中輸入ASCII數(shù)據(jù)和字符串
下載項(xiàng)目到S7-200 CPU,使用狀態(tài)圖在線監(jiān)控可以看到:
注意ASCII字節(jié)和字符串的區(qū)別。D6D0h是漢字“中”的編碼。 STEP 7-Micro/WIN V4.0以上版本完全支持字符串?dāng)?shù)據(jù)格式。 BCD
BCD意為“二進(jìn)制編碼的十進(jìn)制數(shù)”。BCD是一種編碼方式,是以二進(jìn)制數(shù)對(duì)十進(jìn)制數(shù)字的編碼,并因?yàn)?6進(jìn)制的優(yōu)勢(shì),改用十六進(jìn)制數(shù)字表示。
十進(jìn)制只有十個(gè)數(shù)字,所以以16進(jìn)制表示的BCD碼不會(huì)出現(xiàn)16進(jìn)制數(shù)字Ah - Fh。
十進(jìn)制數(shù)39用BCD碼表示就是39h,或16#39。BCD碼數(shù)值必須用16進(jìn)制查看才能得到正確結(jié)果。