tt99166 发表于 2023-4-12 22:42:13

CODESYS开发教程7-字符串及其基本操作



今天继续我们的小白教程,老鸟就不要在这浪费时间了:loveliness:。

前面一期我们介绍了CODESYS的关键字及变量。这一期主要介绍CODESYS的字符串类型,以及如何利用字符串操作函数来实现字符串的查找、插入、替换、连接、分割、删除等相关操作。注意本文介绍的字符串操作函数包含在Standard库中,宽字符串操作函数包含在Standard64库中,需要在库管理器中添加对应的库文件才能使用。

一、字符串类型

CODESYS的字符串分为ASCII字符串和宽字符串两种。

1.字符串STRING

STRING字符串中的字符采用ASCII编码,每个字符长度为1个字节。字符串由声明长度的字符和1个结束字符组成。在声明字符串变量时不指定长度,则默认为80个字符,加上结束字符,实际占用内存为81个字节。

str: STRING; //默认str长度为80字节,占用内存为81字节

str: STRING(100); //str长度为100字节,占用内存为101字节

CODESYS本身不限制字符串的长度,但是字符串处理函数只能处理长度为1~255的字符串。当字符串长度超过限制时,字符处理函数会做截断处理。

2.宽字符串WSTRING

由于ASCII编码只有256个,无法处理汉字,使用汉字需要采用Unicode编码(UCS)。Unicode编码采用多个字节表示一个字符,常用的是UCS-2,即采用两个字节编码表示一个字符。宽字符串是采用Unicode编码字符的字符串,通常情况下使用2个字节表示一个字符。

宽字符串也是由声明长度的字符串和结束字符组成。由于宽字符的长度是2个字节,因此在不指定字符串长度时,默认为80个宽字符加一个结束字符,占用内存为162个字节。

二、字符串常量

字符串常量是用单引号括起来的字符串,字符遵循ISO/IEC 8859-1中规定的字符集编码。

注意:当美元符号($)在字符串常量中时,根据ISO/IEC 8859-1中的编码,其后续两个字符被解释为十六进制代码。例如,'$41'表示字符A,'$0D'为换行符'$R'。有些特例如下图所示:



以上特例可以让使用者在字符串中输出特殊字符。

三、字符串操作函数

CODESYS中主要的字符串操作函数如下表:




注意:以上函数中的STRING类型长度最大均为255个字符。

1.LEN(str)

获取字符串str包含的字符数,即字符串长度。

示例:size:=LEN('CODESYS'); //结果为7

注意:本函数与C语言的strlen不同,长度仅为字符串本身个数,不包含字符串结束符'\0'。

2.LEFT(str, size)

从字符串str左边开始,返回长度为size的字符串。

示例:str1 := LEFT('CODESYS',4); //结果为“CODE”

3.RIGHT(str, size)

从字符串str右边开始,返回长度为size的字符串。

示例:str1 := RIGHT('CODESYS',3); //结果为“SYS”

4.MID (str, len, pos)

从字符串str指定的位置pos开始,返回指定长度len的字符串。

str:STRING(255),待分析的字符串。

len:INT,返回的字符串长度,从左边开始。

pos:INT,字符串的起始位置,首字符为1。

示例:str1 := MID('CODESYS',2,3); //结果为“DE”

5.CONCAT(str1, str2)

将字符串str1和str2连接起来。注意返回的字符串长度最大为255个字符,超出长度会被截断且不会报错。

示例:str1 := CONCAT('CODE','SYS'); //结果为“CODESYS”

6.INSERT(str1, str2, pos)

将字符串str2插入到字符串str1的位置pos后面。

pos:当pos>255或pos<0时,返回值为str1。pos为0表示在第一个字符前面插入,为1表示在第一个字符之后插入。

示例:str1 := INSERT('aef','bcd',1); //结果为“abcdef”

7.DELETE(str, len, pos)

从字符串str中的pos位置开始删除len个字符。

len:要删除的字符数。

pos:字符开始位置。从字符串左边计算。pos为1表示第一个字符。

注意:pos为0时执行结果可能不正确,pos最小值应该为1。

示例:str1 := DELETE('abcdef',3,1); //结果为“def”

8.REPLACE(str1, str2, len, pos)

将字符串str1中从pos开始的L个字符替换为str2。

len:要替换的字符数,从字符串左边开始。

pos:字符开始位置。从字符串左边开始。pos为1表示第一个字符。

注意:pos为0时执行结果可能不正确,pos最小值应该为1。

示例:str1 := REPLACE('abcdef','1',3,2); //结果为“a1ef”

9.FIND(str1, str2)

在str1中查找str2首次出现的第一个字符位置。如果在str1中找不到str2,则返回0。

示例:pos := FIND('11223311','22'); //结果为3

10.赋值

CODESYS的赋值使用比较方便,需要注意的是两个字符串的声明长度,如果字符串长度大于变量的声明长度,则会被截断。

11.字符串比较

CODESYS的字符串比较可以直接用关系操作符“=”和“<>”来完成。

示例:

str1:= '';

flag1 := (str1 = ''); //结果为“TRUE”

str12 := '1';

flag2 := (str2 <> ''); //结果为“TRUE”

以上只介绍了STRING的操作函数,宽字符串操作函数的参数与字符串对应的操作函数类似,这里就不一一介绍了。

四、字符串转换

字符串处理最常见的是各种类型数据与字符串的互相转换。CODESYS提供了各种类型变量的相互转换函数,格式为“变量类型_TO_STRING”或“变量类型_TO_WSTRING”。

1.日期时间转换为字符串

str:=DATE_TO_STRING(D#2023-1-4); //结果为“D#2023-01-04”

str:=DT_TO_STRING(DT#2023-1-4-0:0:0); //结果为“DT#2023-01-04-00:00:00”

2.常用变量转换为字符串

str:=INT_TO_STRING(100); //结果为“100”

str:=LREAL_TO_STRING(3.1415926); //结果为“3.1415926”

常见的转换如下图所示:



3.字符串转换为其它类型

常见的转换如下图所示:



宽字符串转换的方式类型,只是转换函数的开头为“WSTRING_TO_”。

五、结论

字符串在其它编程语言中操作起来稍微有点复杂,但在CODESYS中实际上是比较简单的。只要知道字符串类型以及字符串操作函数的用法,能够解决绝大部分的字符串操作问题,对于新手来说应该是够用了^-^。对于长度超过255个字符的字符串,由于不能直接用CODESYS提供的函数进行操作,需要通过指针方式解决,以后再进行详细介绍。
————————————————
版权声明:本文为CSDN博主「--莫名--」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/halps/article/details/128617939
页: [1]
查看完整版本: CODESYS开发教程7-字符串及其基本操作