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