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