说明
数据类型为 STRING 的操作数在一个字符串中存储多个字符,最多可包括 254 个字符。在一个字符串中,可使用系统所创建代码页的所有字符。字符在单引号中指定。
字符串中还可包含特殊字符。转义字符 $ 可用于标识控制字符、美元符号和单引号。
说明 不同代码页 请注意,在 Windows 系统中,特殊字符使用当前设置的代码页进行编码。即,由于各操作系统使用的代码页不同,因此包含有特殊字符的字符串的显示也将不同。 正是因为代码页对所在系统的依赖性,用户程序的国际通用性变得极为困难。目前,仅 7 位 ASCII 编码中的字符才具有国际通用性。 |
下表列出了 STRING 变量的属性:
长度(字节) | 格式 | 值范围 | 输入值示例 |
---|---|---|---|
n + 2 1) | ASCII 字符串,包括特殊字符 | 0 到 254 个字符 |
'Name' STRING#'NAME' STRING#'Na...(该字符串的实际长度超出了屏幕空间。) STRING#'' (该字符串为空。) |
1) 数据类型为 STRING 的操作数在内存中占用的字节数比指定的最大长度要多 2 个字节。 |
下表给出了特殊字符表示法示例:
字符 | 十六进制 | 含义 | 示例 |
---|---|---|---|
$L 或 $l | 0A | 换行 | '$LText', '$0AText' |
$N | 0A 和 0D |
断行 断行在字符串中占用 2 个字符,在编辑器的显示画面中将转换为 $R$L。 |
'$NText', '$0A$0DText' |
$P 或 $p | 0C | 分页 | '$PText', '$0CText' |
$R 或 $r | 0D | 回车 (CR) | '$RText','$0DText' |
$T 或 $t | 09 | 切换 | '$TText', '$09Text' |
$$ | 24 | 美元符号 | '100$$', '100$24' |
$' | 27 | 单引号 | '$'Text$'','$27Text$27' |
如果转义字符 $ 后面跟有该表格中的某个字母,则表格中指定该字符将包含在字符串中。如果转义字符 $ 后面跟随的字母不在该表格中,则该字母将包含在该字符串中。如果转义字符 $ 后跟随两个或一个十六进制数字,该代码将包含在字符串中。
监控表中的应用
以下示例适用于 S7-300/400 系列 CPU:监视一个数据类型为 STRING 的变量时,将仅显示前 30 个字符。如果实际长度大于 30 个字符,则将显示一个省略号 (…) 而非闭合撇号 (')。当 STRING 的值超过 30 个字符时,无法进行更改。
字符串的最大长度
在操作数的声明过程中,可在关键字 STRING 后使用方括号指定字符串的最大长度(如,STRING[4])。也可以使用局部或全局常量声明字符串的最大长度(如,STRING[#loc_const] 或 STRING["glob_const"])。如果未指定最大长度,则相应的操作数长度设置为标准的 254 个字符。
如果指定字符串的实际长度小于所声明的最大长度,则字符将以左对齐方式写入字符串,并将剩余的字符空间保持为未定义。在值处理和各种显示过程中,仅涉及可确定字符串实际长度的所有字符空间量。
说明 对于 S7-300/400 CPU,请注意:如果定义了 STRING 数据类型的临时变量,则在用户程序中使用变量之前必须使用指定的长度定义 BYTE“字符串最大长度”。 |
传递 STRING 或 WSTRING 数据类型的变量 |
说明
可以将 STRING 或 WSTRING 数据类型的变量作为参数进行传递下表列出了不同 CPU 系列中 (W)STRING 的传递规则:
CPU 系列 | 数据类型 | 块调用中的传递规则 |
---|---|---|
S7-300/400 | STRING | 声明的形参和实参长度必须相同。 |
S7-1200/1500 |
STRING WSTRING |
声明的形参和实参长度可以不同。在运行过程中,如果目标参数的声明长度小于接收的 (W)STRING 参数长度,则截断 (W)STRING 参数并将使能输出 ENO 设置为 FALSE。 在程序编辑器中,参数处的灰色矩形表示 (W)STRING 在运行过程中可能被截断。 例外: 调用 STL 块时,形参和实参的声明长度必须始终相同。 |
下图显示了一个块调用中,声明的形参和实参长度不同。由于声明的长度不同,在运行过程中,“Input_String_20”和“Output_String_10”可能会截断。
声明 STRING 和 WSTRING 数据类型的变量 要声明 STRING 或 WSTRING 数据类型的变量,请按以下步骤操作:
选择接口中的相应声明区域。 在“名称”(Name) 列中输入一个变量名称。 在“数据类型”(Data type) 列中输入“STRING”或“WSTRING”。输入时系统将提供自动完成功能。 可选:在关键字 STRING 或 WSTRING 后面,使用方括号指定字符串的最大长度。如果未指定最大长度,则字符串的默认长度为 254 个字符。 最大长度为 4 的 WSTRING 示例: WSTRING[4] 使用局部常量定义字符串最大长度的示例: STRING[#My_local_const1] 使用全局常量定义字符串最大长度的示例: STRING["My_global_const1"] |
CHAR 隐式转换
隐式转换选项
下表列出了 CHAR 数据类型的隐式转换选项:
源 | 目标 |
进行 IEC 检查 |
不进行 IEC 检查 |
说明 |
---|---|---|---|---|
CHAR | BOOL | - | - | 不能进行隐式转换 |
BYTE | - | X | 源值的位模式以右对齐方式原样传递到目标数据类型。其余位从左边开始填充 0。 | |
WORD | - | X | ||
DWORD | - | X | ||
SINT | - | X | ||
USINT | - | X | ||
INT | - | X | ||
UINT | - | X | ||
DINT | - | X | ||
UDINT | - | X | ||
REAL | - | - | 不能进行隐式转换 | |
LREAL | - | - | ||
TIME | - | - | ||
DTL | - | - | ||
TOD | - | - | ||
DATE | - | - | ||
WCHAR | - | - | ||
STRING | X | X | 该 STRING 长度变短为 1 并包含该字符。 | |
WSTRING | - | - | 不能进行隐式转换 | |
x:可以转换 -: 不可转换 |
显式转换选项 下表列出了 CHAR 数据类型的显式转换选项和指令:
源 | 目标 | 转换 | 说明 | 指令助记符 |
---|---|---|---|---|
CHAR | BOOL | - | 不能进行显式转换 | - |
BYTE1) | X | 源值的位模式以右对齐方式原样传递到目标数据类型。 | 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 | - | 不能进行显式转换 | - | |
LREAL | - | - | ||
TIME | - | - | ||
DTL | - | - | ||
TOD | - | - | ||
DATE | - | - | ||
STRING | X | 值将转换为字符串 (STRING) 的第一个字符。若未定义字符串的长度,则转换后长度设置为“1”。如果已定义字符串的长度,则它在转换后保持不变。 | CHAR_TO_STRING | |
WSTRING | - | 不能进行显式转换 | - | |
WCHAR | X | CHAR_TO_WCHAR | ||
x:可以转换 - : 不可转换 1) 位串 (BYTE、WORD、DWORD) 和数据类型 CHAR 一开始就扩展成所需的宽度,然后再复制这些位。源类型决定了解释方法。 |
移动和转换字符串
1. 移动和转换字符串指令的调用,如图1所示。
图1. 移动和转换字符串指令
2. 移动和转换字符串指令的使用。
(1)移动字符串指令S_MOVE。
S_MOVE指令可以将参数IN中的字符串写入到参数OUT中的指定数据区域。
在全局DB中创建两个String类型变量,用来保存数据,如图2所示:
图2. 在全局DB中创建变量
在OB1中调用S_MOVE指令,并连接参数,如图3所示:
图3. 在OB1中调用S_MOVE指令
将需要复制的字符串("StringInput")通过输出参数OUT("StringOutput")输出,如图4所示:
图4. S_MOVE指令执行结果
(2)转换字符串指令S_CONV。
S_CONV指令可以将参数IN中的数值转换为OUT输出中指定的数据格式,下面列出了可能进行数值转换的数据类型:
1)将字符串转换为数字值
参数IN中的数值数据类型为STRING,WSTRING;参数OUT中数值的数据类型为CHAR,WCHAR,USINT,UINT,UDINT,SINT,INT,DINT,REAL,LREAL。
2)将字符串转换为字符串
参数IN中的数值数据类型为STRING,WSTRING;参数OUT中数值的数据类型为STRING,WSTRING。
3)将数字值或字符转换为字符串
参数IN中的数值数据类型为CHAR,WCHAR,USINT,UINT,UDINT,SINT,INT,DINT,REAL,LREAL;参数OUT中数值的数据类型为STRING,WSTRING。
4)将字符转换为字符
参数IN中的数值数据类型为CHAR,WCHAR;参数OUT中数值的数据类型为CHAR,WCHAR。
在全局DB中创建四个变量,用来保存数据,如图5所示:
图5. 在全局DB中创建变量
在OB1中调用S_CONV指令,并连接参数,选择数据类型。在第一个选项中选择待转换的数据类型("ValueInput"),本例中为Int类型;在第二个选项中选择待生成字符串的数据类型("StringOutput"),本例中为String类型,如图6所示:
图6. 在OB1中调用S_CONV指令
将需要转换的数值("ValueInput")转换为输出格式,在字符串开头处的空白区域写入空格,转换结果以字符串形式通过输出参数OUT("StringOutput")输出,如图7所示:
图7. S_CONV指令执行结果(LAD语言)
注:如果使用SCL语言调用S_CONV指令,当数字值转换为字符串时,字符串的第一个字符不会使用空格进行填充,如图8所示:
图8. S_CONV指令执行结果(SCL语言)
审核编辑:刘清
-
STL
+关注
关注
0文章
86浏览量
18327 -
S7-300
+关注
关注
8文章
225浏览量
34301 -
ASCII码
+关注
关注
0文章
51浏览量
17315
原文标题:西门子博途: STRING的使用
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论