一、char 和 string 的定義:
1、數據類型為 char (Character) 的變量長度為 8 bit 位,占用1個 byte 的內存。char 數據類型將單個字符存儲為 ASCII 編碼形式。
通常是指計算機中使用的字母、數字和符號,包括:1、2、3、A、B、C、常見符號等。每個字符占用空間為1字節(jié)。
2、數據類型為 string 的操作數可存儲多個字符,最多可包括 254 個字符。字符串中的第一個字節(jié)為總長度,第二個字節(jié)為有效字符數量。
字符串(string)在存儲上類似字符的數組,所以它每一個元素都是可以提取的字符,如:"abcdefg"叫字符串,而其中的每個元素叫字符。
例如,在 PLC 中創(chuàng)建一個 DB 塊,并將屬性設置為標準 DB 塊,在 DB1 塊中創(chuàng)建如下的字符串和字符,并賦予起始值。如下圖所示:
圖.01
1、string 數據類型的格式
下載到 PLC 中,通過監(jiān)視表逐個查看每個字節(jié)中的值。如下圖所示:
圖.02
可以看出:
a.數據類型為 string 的字符串,通過查看 DB 塊偏移地址可見該字符串占用256字節(jié);查看字符串第一個字節(jié),其最多存儲字符總數量為254個。
b.數據類型為 string[10] 的字符串,通過查看 DB 塊偏移地址可見該字符串占用12字節(jié);查看字符串第一個字節(jié),其最多存儲字符數量為10個。
c.字符串的第一個字節(jié)為該字符串總長度,第二個字節(jié)為當前存儲的有效字符數量。
2、char 和16進制數的關系
在計算機領域,所有的數據都是以2進制數存儲的,那么 char,16進制數和2進制數又有什么關系?
如下圖所示:
圖.03
可以看出:
a.通過字符 'A' 的16進制數和2進制數,可見字符(char)、16進制數只是在 PLC 中顯示的形式不同,實際存儲的是一個2進制值。
b.通過字符 '1' 和數值1(MB0的值)的16進制數和2進制數,可見字符 '1' 和數值1是兩種不同數據。因此,實際使用是必須注意區(qū)別。
c.下圖是 ASCII 字符(char):'0','1',……'E','F' 對應的2進制,10進制,16進制對應關系的截圖。
圖.04
更多的 ASCII 字符對應關系,請查看下面的鏈接。
ASCII 碼表鏈接:ASCII
三、使用 string 數據類型在 HMI 上顯示漢字
例如,在某些不支持 WString 數據類型(關于 WString 參見:跳轉鏈接)的 HMI 設備上顯示漢字,也是可以使用 string 數據類型顯示的。
但由于 string 數據類型中存儲的漢字編碼標準為 GBK 編碼;因此,需要在 HMI 設備上選擇相應的編碼標準。
如下圖所示,在 string 數據類型的起始值中定義漢字 '你好',且字符背景底色為淺黃色(編譯時會有警告信息,這是TIA軟件建議 string 數據類型中不使用漢字的友情提示),但不影響使用。
圖.05
在線監(jiān)控時發(fā)現漢字無法按 Unicode 編碼方式正確顯示,設置顯示格式為16進制數,通過下圖所示的字符編碼對應關系,發(fā)現其對應的是 GBK 編碼。如下圖所示:
圖.06
所以,在 HMI 設備上顯示 string 數據類型中存儲的漢字時,需要在 HMI 上設置對應的 GBK 編碼方式,是可以顯示漢字的。
關于16進制數和 GBK 編碼對應關系,可以通過如下網址查詢:GBK
四、常問問題:
1、HTA 和 ATH 指令的輸入和輸出使用限制?
通過 TIA 軟件的在線幫助,查看指令功能說明:
指令 HTA 功能——輸入范圍為16進制數:16#0,1,……E,F,輸出范圍為由 ASCII 字符(char):'0','1',……'E','F' 組成的數組或字符串 。
指令 ATH 功能——輸入范圍為由 ASCII 字符(char):'0','1',……'E','F' 組成的數組或字符串,輸出范圍為16進制數:16#0,1,……E,F 。
注意:指令 ATH 和指令 HTA 的輸入和輸出都是受到限制的。
2、HTA 和 ATH 指令的作用?
在具體的應用中需要互相轉換字符('0','1',……'E','F')和16進制數值(16#0,1,……E,F),那么HTA和ATH就為轉換這兩種類型的數據提供了方便。
以 HTA 指令為例,在 OB1 中調用 HTA 指令,實現如下要求的轉換:
a.W#16#12AB需要轉換為 ASCII 字符數組,使用 HTA 指令轉換結果為 CHAR#['1','2','A','B']。
b.W#16#12AB需要轉換為 ASCII 字符串,使用 HTA 指令轉換結果為 '12AB' 。
如下圖所示:
圖.07
結果:使用 HTA 指令轉換后,數據類型及占用字節(jié)空間發(fā)生了變化;同樣的,使用 ATH 指令可以做反向轉換,這里不再舉例說明。
3、字符串存儲的 'abcdef',通過賦值更新為了 'DCBA',為何查看字符存儲單元時,字符 'e' 和 'f' 還能監(jiān)視到?該如何處理?
簡單測試程序,如下圖所示:
圖.08
當M0.0觸發(fā)之后,再觸發(fā)M0.2,結果如下圖所示:
圖.09
例子中,6字符的字符串更新為4字符的字符串,原字符串的后2個字符沒有更新;倘若這10個字符的字符串需要通過串口或 TCP 通信完整(字符串總長12字節(jié))的發(fā)送到通信伙伴,那么在字符串信息更新后的發(fā)送信息中將包含這兩個不需要發(fā)送的字符。
結果:字符串更新時,僅更新有效字符數量的部分。
建議處理方法:更新字符串之前,先清空該字符串中所有字符。
4、如何輸入特殊字符(如:回車,換行,$ 等)?
例如,需要輸入的字符串為 '$ABCD$+回車+換行',可以參考如下表格:
圖.10
根據表格說明,字符串在 PLC 中的書寫格式:'$$ABCD$$$R$L' 或 '$$ABCD$$$N',如下圖所示:
圖.11
審核編輯:湯梓紅
-
plc
+關注
關注
5010文章
13275瀏覽量
463084 -
西門子
+關注
關注
94文章
3034瀏覽量
115790 -
數據類型
+關注
關注
0文章
236瀏覽量
13618 -
string
+關注
關注
0文章
40瀏覽量
4732
原文標題:PLC中char 和 string 的定義
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論