今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。
前面一期我们介绍了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中主要的字符串操作函数如下表:
函数功能 | CODESYS-ST | 备注 |
长度 | LEN、WLEN | 仅统计字符数,不包含结束符 |
左取位 | LEFT、WLET | 从字符串左边开始计数 |
右取位 | RIGHT、WRIGHT | 从字符串右边开始计数 |
中间取位 | MID、WMID | 从字符串左边开始计数 |
字符串连接 | CONCAT、WCONCAT | |
插入 | INSERT、WINSERT | |
删除 | DELETE、WDELETE | |
替换 | REPLACE、WREPLACE | |
查找 | FIND、WFIND | |
赋值 | := | |
比较 | =、<> |
注意:以上函数中的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提供的函数进行操作,需要通过指针方式解决,以后再进行详细介绍。
------------------
原创不易,感兴趣的多支持!