說(shuō)明
數(shù)據(jù)類型為 STRING 的操作數(shù)在一個(gè)字符串中存儲(chǔ)多個(gè)字符,最多可包括 254 個(gè)字符。在一個(gè)字符串中,可使用系統(tǒng)所創(chuàng)建代碼頁(yè)的所有字符。字符在單引號(hào)中指定。
字符串中還可包含特殊字符。轉(zhuǎn)義字符 $ 可用于標(biāo)識(shí)控制字符、美元符號(hào)和單引號(hào)。
說(shuō)明 不同代碼頁(yè) 請(qǐng)注意,在 Windows 系統(tǒng)中,特殊字符使用當(dāng)前設(shè)置的代碼頁(yè)進(jìn)行編碼。即,由于各操作系統(tǒng)使用的代碼頁(yè)不同,因此包含有特殊字符的字符串的顯示也將不同。 正是因?yàn)榇a頁(yè)對(duì)所在系統(tǒng)的依賴性,用戶程序的國(guó)際通用性變得極為困難。目前,僅 7 位 ASCII 編碼中的字符才具有國(guó)際通用性。 |
下表列出了 STRING 變量的屬性:
長(zhǎng)度(字節(jié)) | 格式 | 值范圍 | 輸入值示例 |
---|---|---|---|
n + 2 1) | ASCII 字符串,包括特殊字符 | 0 到 254 個(gè)字符 |
'Name' STRING#'NAME' STRING#'Na...(該字符串的實(shí)際長(zhǎng)度超出了屏幕空間。) STRING#'' (該字符串為空。) |
1) 數(shù)據(jù)類型為 STRING 的操作數(shù)在內(nèi)存中占用的字節(jié)數(shù)比指定的最大長(zhǎng)度要多 2 個(gè)字節(jié)。 |
下表給出了特殊字符表示法示例:
字符 | 十六進(jìn)制 | 含義 | 示例 |
---|---|---|---|
$L 或 $l | 0A | 換行 | '$LText', '$0AText' |
$N | 0A 和 0D |
斷行 斷行在字符串中占用 2 個(gè)字符,在編輯器的顯示畫面中將轉(zhuǎn)換為 $R$L。 |
'$NText', '$0A$0DText' |
$P 或 $p | 0C | 分頁(yè) | '$PText', '$0CText' |
$R 或 $r | 0D | 回車 (CR) | '$RText','$0DText' |
$T 或 $t | 09 | 切換 | '$TText', '$09Text' |
$$ | 24 | 美元符號(hào) | '100$$', '100$24' |
$' | 27 | 單引號(hào) | '$'Text$'','$27Text$27' |
如果轉(zhuǎn)義字符 $ 后面跟有該表格中的某個(gè)字母,則表格中指定該字符將包含在字符串中。如果轉(zhuǎn)義字符 $ 后面跟隨的字母不在該表格中,則該字母將包含在該字符串中。如果轉(zhuǎn)義字符 $ 后跟隨兩個(gè)或一個(gè)十六進(jìn)制數(shù)字,該代碼將包含在字符串中。
監(jiān)控表中的應(yīng)用
以下示例適用于 S7-300/400 系列 CPU:監(jiān)視一個(gè)數(shù)據(jù)類型為 STRING 的變量時(shí),將僅顯示前 30 個(gè)字符。如果實(shí)際長(zhǎng)度大于 30 個(gè)字符,則將顯示一個(gè)省略號(hào) (…) 而非閉合撇號(hào) (')。當(dāng) STRING 的值超過(guò) 30 個(gè)字符時(shí),無(wú)法進(jìn)行更改。
字符串的最大長(zhǎng)度
在操作數(shù)的聲明過(guò)程中,可在關(guān)鍵字 STRING 后使用方括號(hào)指定字符串的最大長(zhǎng)度(如,STRING[4])。也可以使用局部或全局常量聲明字符串的最大長(zhǎng)度(如,STRING[#loc_const] 或 STRING["glob_const"])。如果未指定最大長(zhǎng)度,則相應(yīng)的操作數(shù)長(zhǎng)度設(shè)置為標(biāo)準(zhǔn)的 254 個(gè)字符。
如果指定字符串的實(shí)際長(zhǎng)度小于所聲明的最大長(zhǎng)度,則字符將以左對(duì)齊方式寫入字符串,并將剩余的字符空間保持為未定義。在值處理和各種顯示過(guò)程中,僅涉及可確定字符串實(shí)際長(zhǎng)度的所有字符空間量。
說(shuō)明 對(duì)于 S7-300/400 CPU,請(qǐng)注意:如果定義了 STRING 數(shù)據(jù)類型的臨時(shí)變量,則在用戶程序中使用變量之前必須使用指定的長(zhǎng)度定義 BYTE“字符串最大長(zhǎng)度”。 |
傳遞 STRING 或 WSTRING 數(shù)據(jù)類型的變量 |
說(shuō)明
可以將 STRING 或 WSTRING 數(shù)據(jù)類型的變量作為參數(shù)進(jìn)行傳遞下表列出了不同 CPU 系列中 (W)STRING 的傳遞規(guī)則:
CPU 系列 | 數(shù)據(jù)類型 | 塊調(diào)用中的傳遞規(guī)則 |
---|---|---|
S7-300/400 | STRING | 聲明的形參和實(shí)參長(zhǎng)度必須相同。 |
S7-1200/1500 |
STRING WSTRING |
聲明的形參和實(shí)參長(zhǎng)度可以不同。在運(yùn)行過(guò)程中,如果目標(biāo)參數(shù)的聲明長(zhǎng)度小于接收的 (W)STRING 參數(shù)長(zhǎng)度,則截?cái)?(W)STRING 參數(shù)并將使能輸出 ENO 設(shè)置為 FALSE。 在程序編輯器中,參數(shù)處的灰色矩形表示 (W)STRING 在運(yùn)行過(guò)程中可能被截?cái)唷?br /> 例外: 調(diào)用 STL 塊時(shí),形參和實(shí)參的聲明長(zhǎng)度必須始終相同。 |
下圖顯示了一個(gè)塊調(diào)用中,聲明的形參和實(shí)參長(zhǎng)度不同。由于聲明的長(zhǎng)度不同,在運(yùn)行過(guò)程中,“Input_String_20”和“Output_String_10”可能會(huì)截?cái)唷?/p>
聲明 STRING 和 WSTRING 數(shù)據(jù)類型的變量 要聲明 STRING 或 WSTRING 數(shù)據(jù)類型的變量,請(qǐng)按以下步驟操作:
選擇接口中的相應(yīng)聲明區(qū)域。 在“名稱”(Name) 列中輸入一個(gè)變量名稱。 在“數(shù)據(jù)類型”(Data type) 列中輸入“STRING”或“WSTRING”。輸入時(shí)系統(tǒng)將提供自動(dòng)完成功能。 可選:在關(guān)鍵字 STRING 或 WSTRING 后面,使用方括號(hào)指定字符串的最大長(zhǎng)度。如果未指定最大長(zhǎng)度,則字符串的默認(rèn)長(zhǎng)度為 254 個(gè)字符。 最大長(zhǎng)度為 4 的 WSTRING 示例: WSTRING[4] 使用局部常量定義字符串最大長(zhǎng)度的示例: STRING[#My_local_const1] 使用全局常量定義字符串最大長(zhǎng)度的示例: STRING["My_global_const1"] |
CHAR 隱式轉(zhuǎn)換
隱式轉(zhuǎn)換選項(xiàng)
下表列出了 CHAR 數(shù)據(jù)類型的隱式轉(zhuǎn)換選項(xiàng):
源 | 目標(biāo) |
進(jìn)行 IEC 檢查 |
不進(jìn)行 IEC 檢查 |
說(shuō)明 |
---|---|---|---|---|
CHAR | BOOL | - | - | 不能進(jìn)行隱式轉(zhuǎn)換 |
BYTE | - | X | 源值的位模式以右對(duì)齊方式原樣傳遞到目標(biāo)數(shù)據(jù)類型。其余位從左邊開始填充 0。 | |
WORD | - | X | ||
DWORD | - | X | ||
SINT | - | X | ||
USINT | - | X | ||
INT | - | X | ||
UINT | - | X | ||
DINT | - | X | ||
UDINT | - | X | ||
REAL | - | - | 不能進(jìn)行隱式轉(zhuǎn)換 | |
LREAL | - | - | ||
TIME | - | - | ||
DTL | - | - | ||
TOD | - | - | ||
DATE | - | - | ||
WCHAR | - | - | ||
STRING | X | X | 該 STRING 長(zhǎng)度變短為 1 并包含該字符。 | |
WSTRING | - | - | 不能進(jìn)行隱式轉(zhuǎn)換 | |
x:可以轉(zhuǎn)換 -: 不可轉(zhuǎn)換 |
顯式轉(zhuǎn)換選項(xiàng) 下表列出了 CHAR 數(shù)據(jù)類型的顯式轉(zhuǎn)換選項(xiàng)和指令:
源 | 目標(biāo) | 轉(zhuǎn)換 | 說(shuō)明 | 指令助記符 |
---|---|---|---|---|
CHAR | BOOL | - | 不能進(jìn)行顯式轉(zhuǎn)換 | - |
BYTE1) | X | 源值的位模式以右對(duì)齊方式原樣傳遞到目標(biāo)數(shù)據(jù)類型。 | CHAR_TO_BYTE | |
WORD1) | X | CHAR_TO_WORD | ||
DWORD1) | X | CHAR_TO_DWORD | ||
SINT | X | CHAR_TO_SINT | ||
USINT | X | CHAR_TO_USINT | ||
INT | X | CHAR_TO_INT | ||
UINT | X | CHAR_TO_UINT | ||
DINT | X | CHAR_TO_DINT | ||
UDINT | X | CHAR_TO_UDINT | ||
REAL | - | 不能進(jìn)行顯式轉(zhuǎn)換 | - | |
LREAL | - | - | ||
TIME | - | - | ||
DTL | - | - | ||
TOD | - | - | ||
DATE | - | - | ||
STRING | X | 值將轉(zhuǎn)換為字符串 (STRING) 的第一個(gè)字符。若未定義字符串的長(zhǎng)度,則轉(zhuǎn)換后長(zhǎng)度設(shè)置為“1”。如果已定義字符串的長(zhǎng)度,則它在轉(zhuǎn)換后保持不變。 | CHAR_TO_STRING | |
WSTRING | - | 不能進(jìn)行顯式轉(zhuǎn)換 | - | |
WCHAR | X | CHAR_TO_WCHAR | ||
x:可以轉(zhuǎn)換 - : 不可轉(zhuǎn)換 1) 位串 (BYTE、WORD、DWORD) 和數(shù)據(jù)類型 CHAR 一開始就擴(kuò)展成所需的寬度,然后再?gòu)?fù)制這些位。源類型決定了解釋方法。 |
移動(dòng)和轉(zhuǎn)換字符串
1. 移動(dòng)和轉(zhuǎn)換字符串指令的調(diào)用,如圖1所示。
圖1. 移動(dòng)和轉(zhuǎn)換字符串指令
2. 移動(dòng)和轉(zhuǎn)換字符串指令的使用。
(1)移動(dòng)字符串指令S_MOVE。
S_MOVE指令可以將參數(shù)IN中的字符串寫入到參數(shù)OUT中的指定數(shù)據(jù)區(qū)域。
在全局DB中創(chuàng)建兩個(gè)String類型變量,用來(lái)保存數(shù)據(jù),如圖2所示:
圖2. 在全局DB中創(chuàng)建變量
在OB1中調(diào)用S_MOVE指令,并連接參數(shù),如圖3所示:
圖3. 在OB1中調(diào)用S_MOVE指令
將需要復(fù)制的字符串("StringInput")通過(guò)輸出參數(shù)OUT("StringOutput")輸出,如圖4所示:
圖4. S_MOVE指令執(zhí)行結(jié)果
(2)轉(zhuǎn)換字符串指令S_CONV。
S_CONV指令可以將參數(shù)IN中的數(shù)值轉(zhuǎn)換為OUT輸出中指定的數(shù)據(jù)格式,下面列出了可能進(jìn)行數(shù)值轉(zhuǎn)換的數(shù)據(jù)類型:
1)將字符串轉(zhuǎn)換為數(shù)字值
參數(shù)IN中的數(shù)值數(shù)據(jù)類型為STRING,WSTRING;參數(shù)OUT中數(shù)值的數(shù)據(jù)類型為CHAR,WCHAR,USINT,UINT,UDINT,SINT,INT,DINT,REAL,LREAL。
2)將字符串轉(zhuǎn)換為字符串
參數(shù)IN中的數(shù)值數(shù)據(jù)類型為STRING,WSTRING;參數(shù)OUT中數(shù)值的數(shù)據(jù)類型為STRING,WSTRING。
3)將數(shù)字值或字符轉(zhuǎn)換為字符串
參數(shù)IN中的數(shù)值數(shù)據(jù)類型為CHAR,WCHAR,USINT,UINT,UDINT,SINT,INT,DINT,REAL,LREAL;參數(shù)OUT中數(shù)值的數(shù)據(jù)類型為STRING,WSTRING。
4)將字符轉(zhuǎn)換為字符
參數(shù)IN中的數(shù)值數(shù)據(jù)類型為CHAR,WCHAR;參數(shù)OUT中數(shù)值的數(shù)據(jù)類型為CHAR,WCHAR。
在全局DB中創(chuàng)建四個(gè)變量,用來(lái)保存數(shù)據(jù),如圖5所示:
圖5. 在全局DB中創(chuàng)建變量
在OB1中調(diào)用S_CONV指令,并連接參數(shù),選擇數(shù)據(jù)類型。在第一個(gè)選項(xiàng)中選擇待轉(zhuǎn)換的數(shù)據(jù)類型("ValueInput"),本例中為Int類型;在第二個(gè)選項(xiàng)中選擇待生成字符串的數(shù)據(jù)類型("StringOutput"),本例中為String類型,如圖6所示:
圖6. 在OB1中調(diào)用S_CONV指令
將需要轉(zhuǎn)換的數(shù)值("ValueInput")轉(zhuǎn)換為輸出格式,在字符串開頭處的空白區(qū)域?qū)懭肟崭瘢D(zhuǎn)換結(jié)果以字符串形式通過(guò)輸出參數(shù)OUT("StringOutput")輸出,如圖7所示:
圖7. S_CONV指令執(zhí)行結(jié)果(LAD語(yǔ)言)
注:如果使用SCL語(yǔ)言調(diào)用S_CONV指令,當(dāng)數(shù)字值轉(zhuǎn)換為字符串時(shí),字符串的第一個(gè)字符不會(huì)使用空格進(jìn)行填充,如圖8所示:
圖8. S_CONV指令執(zhí)行結(jié)果(SCL語(yǔ)言)
審核編輯:劉清
-
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18333 -
S7-300
+關(guān)注
關(guān)注
8文章
225瀏覽量
34312 -
ASCII碼
+關(guān)注
關(guān)注
0文章
51瀏覽量
17329
原文標(biāo)題:西門子博途: 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)論