一、什么是字符和字符串数据类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列。
1200中的字符和字符串数据类型如下表所示:
![4b8fe485b668d3663b44c73598237b0e.png](https://i-blog.csdnimg.cn/blog_migrate/a68359dae54c053cb6e7e8da65211bfb.jpeg)
Char 和 WChar
Char 在存储器中占一个字节,可以存储以 ASCII 格式(包括扩展 ASCII字符代码)编码的单个字符。 WChar在存储器中占一个字的空间,可包含任意双字节字符表示形式。
编辑器语法在字符的前面和后面各使用一个单引号字符。可以使用可见字符和控制字符。
String 和 WString
CPU 支持使用 String 数据类型存储一串单字节字符。 String数据类型包含总字符数(字符串中的字符数)和当前字符数。String类型提供了多达 256个字节,用于在字符串中存储最大总字符数(1个字节)、当前字符数(1个字节)以及最多254个字节。 String数据类型中的每个字节都可以是从16#00到16#FF的任意值。
WString
数据类型支持单字(双字节)值的较长字符串。第一个字包含最大总字符数;下一个字包含总字符数,接下来的字符串可包含多达 65534 个字。 WString
数据类型中的每个字可以是 16#0000 - 16#FFFF 之间的任意值。
可以对 IN类型的指令参数使用带单引号的文字串(常量)。例如, ‘ABC’是由三个字符组成的字符串,可用作 S_CONV 指令中 IN 参数的输入。还可通过在 OB、 FC、 FB 和 DB的块接口编辑器中选择“String”或“WString”数据类型来创建字符串变量。无法在PLC变量编辑器中创建字符串。
可从数据类型下拉列表中选择一种数据类型,输入关键字“String”或“WString”,然后在方括号中以字节 (String) 或字 (WString)为单位指定最大字符串大小。例如,“MyString String[10]”指定 MyString 的最大长度为 10个字节。如果不包含带有最大长度的方括号,则假定字符串的最大长度为 254 并假定WString 的最大长度为65534。“MyWString WString[1000]”可指定一个 1000 字的
WString。
下面看看如何在DB块中定义字符串:打开数据块
1、选择接口中的相应声明部分。
2、在“名称”列中输入变量名称。
3、在“数据类型”(Data type) 列中输入“STRING”。输入时系统将提供自动完成功能。
4、可选:在关键字 STRING 后面,使用方括号指定字符串的最大长度。如果未指定最大长度,则字符串的默认长度为 254 个字符。
![1c186042cb3acdf04cdb0cb9af74f40b.png](https://i-blog.csdnimg.cn/blog_migrate/46afef74e4a091877d10e760c1cdb6f7.jpeg)
在上图中
A、第一个string没定义长度,则是系统默认的长度254个字符。占n+2个字节,也就是254+2=256字节
B、第二个string定义长度为20个字符。
二、字符串指令
1、指令位置
![a63ccdfb6817144fc49245c8f0f04834.png](https://i-blog.csdnimg.cn/blog_migrate/0715e7795e0fb53ca70c4ae79ae1e156.jpeg)
2、典型指令介绍
2.1 移动字符串
![2b3c96b4ce07943191e92ac2de7d1b1c.png](https://i-blog.csdnimg.cn/blog_migrate/30132f2bf904fadd293bc77b92f0ecc3.jpeg)
指令就是:将参数IN中字符串(W)STRING的内容写入在参数OUT中指定的数据区域。
![8296c21956706c1590e60fb9f9f59f59.png](https://i-blog.csdnimg.cn/blog_migrate/04b2531562cc3b373f7138a1905250d4.jpeg)
仿真运行:
![0148e8c84ecf69dcda4c47477ceeb46f.png](https://i-blog.csdnimg.cn/blog_migrate/5119e4c566203fc5db279ca0e3ccc637.jpeg)
2.2转换字符串指令
![11afd92869706f42dd7aa7494e30e285.png](https://i-blog.csdnimg.cn/blog_migrate/4918143c0711d63ba2dd30b17217d8fe.jpeg)
转换字符串将 IN 输入中的值转换为 OUT 输出中指定的数据格式。
A、转换字符串
转换数字值(整数或浮点数):
针对 IN 输入参数中指定的字符串的所有字符执行转换。允许的字符包括数字“0”到“9”、小数点以及加减号。字符串的第一个字符可以是有效数字或符号。将忽略前导空格和指数计数制。
转换字符:
将字符串转换为字符时,字符串中的第一个字符将传送到参数 OUT 中。
![abc7ed30e31aa5a314029a94cc339a2e.png](https://i-blog.csdnimg.cn/blog_migrate/864cde90ed1129732c78ee2711ed337c.jpeg)
上图将字符串转换成INT型,
![bbd6aa69626df581584fb3f3372bf726.png](https://i-blog.csdnimg.cn/blog_migrate/6301f773138248ca47c9313e79768cee.jpeg)
上图是INT转换成字符串
2.3 将字符串转换成数值指令
![fe4bc771ab9506d6d510a69a286c22ee.png](https://i-blog.csdnimg.cn/blog_migrate/da11fd4f526e044b1b7e73b29eca954b.jpeg)
“STRG_VAL”指令可将字符串转换为整数或浮点数:
在 IN 输入参数中指定要转换的字符串。
通过为 OUT 输出参数选择数据类型,确定输出值的格式。
FORMAT是字符的输入格式,意义参见下表:
![3bf051c1548d8308154a6f2680d3ff08.png](https://i-blog.csdnimg.cn/blog_migrate/3fde6357ca1f9f941ff230291fce2e9c.jpeg)
参数P:是指从P位置开始转换。
看看下面这个程序:
![4cfe2d1223343f71e0d43df17b676934.png](https://i-blog.csdnimg.cn/blog_migrate/4cd3fc813211c4b5ba4cb1a5c0189f5a.jpeg)
在上图中FORMAT设置为1,则将IN中的1.234中的点解释为千位分隔符,若设置为0就解释为点,如下图所示:
![73034388d6d93a8d00f74978f3b69a20.png](https://i-blog.csdnimg.cn/blog_migrate/060bab576f73be9af9d642aaa1a71880.jpeg)
2.4 将数值转换字符串指令
![5c3eabc3e47f852497bc50a043c2c0db.png](https://i-blog.csdnimg.cn/blog_migrate/822b21131241b38bf5f934f7e05a6dfd.jpeg)
VAL_STRG”指令用于将数字值转换为字符串。
在 IN 输入参数中指定要转换的值。通过选择数据类型来决定数字值的格式。
可以在 OUT 输出参数中查询转换结果。
转换允许的字符包括数字“0”到“9”、小数点、小数撇、计数制“E”和“e”,以及加减号字符。无效字符将中断转换过程。
使用 SIZE 参数指定待写入字符串的字符数。这从 P 参数中指定的字符开始计数。如果输出值比指定长度短,则结果将以右对齐方式写入字符串。空字符位置将填入空格。
参数FORMAT如下表所示:
![e4c5f457b7affa828b4f925d72e67d33.png](https://i-blog.csdnimg.cn/blog_migrate/df5e499683e0dbb0972e7a456219e367.jpeg)
使用 PREC 参数定义转换浮点数时保留的小数位数。REAL 数据类型的数字值所支持的最大精度为 7 位数。如果要转换的值为整数,可使用 PREC 参数指定放置小数点的位置。
看看下面的程序:
![a35222699a23dacfde0fe02d3d3e4c48.png](https://i-blog.csdnimg.cn/blog_migrate/4516ca82dfaf7adc868bce615a166623.jpeg)
根据参数P=16,就是从第16个字符开始写入该字符,
根据SIZE=10,就是从该位置开始写入该字符串10个字符长度,
参数FORMAT为16#4,所以选择小数点分隔符,
PrecVAL的值为3,将向字符串写入3个小数位。
待转换值的符号作为字符存储在字符串中,作为数字的前缀。
字符串的其余10个字符作为符号前的空格写入。
最后的结果如上图所示。