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

news2024/12/24 0:04:20

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

前面一期我们介绍了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提供的函数进行操作,需要通过指针方式解决,以后再进行详细介绍。

------------------

原创不易,感兴趣的多支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Realsense相机的RGB与depth图像的对齐

第三部分 将RGB图像和Depth图像对齐 文章目录第三部分 将RGB图像和Depth图像对齐前言一、创建对齐的cpp文件1.用vim创建C文件二、使用CMake构建C工程1.创建并编写CMakeList.txt文件2.编译CMakeLists.txt总结前言 将RGB图像和深度图像对齐有两种方式&#xff0c;一种是将深度图…

音视频开发-第一章-H264编解码

目录参考原文一、概述二、封装格式2.1、视频文件封装格式2.2、音视频编码方式2.2.1、视频编码方式2.2.2、音频编码方式三、H264相关概念3.1、H264基本单元3.2、帧类型3.3、GOP(画面组)3.4、IDR 帧四、H264压缩方式4.1、H264压缩方式4.2、H264压缩方式说明五、H264分层结构5.1、…

【websocket】前端websocket 实时通信

前端websocket 实时通信 文章目录前端websocket 实时通信什么是websocket为什么传统的http协议不能做到websocket实现的功能websocket前后端所用到的事件对比WebSocket.readyState代码什么是websocket websocket是HTML5开始提供的一种网络通信协议&#xff0c;它诞生的目的是在…

60条小妙招帮助你开车更省油

1、把备胎和千斤顶&#xff0c;工具&#xff0c;都放在家里&#xff0c;不跑长途不带这些&#xff0c;省油。2、说明书上说92号或以上标号&#xff0c;那么加95号油省油。如果是95或以上的标注&#xff0c;那就加98省油。3、驾驶中尽量减少急加速 急刹车&#xff0c;省油。4、驾…

Java——多态

好久不见啊&#xff0c;兄弟们&#xff01;&#xff01;这不将近期末考试了吗&#xff0c;阿涛平日里课听的不多&#xff0c;所以最近都在疯狂补课&#xff0c;祖宗之法也可变&#xff0c;阿涛的学校终于不是二十周校历了&#xff01;&#xff01;希望从今往后我们的生活都能够…

[oeasy]python0041_ 转义字符_转义序列_escape_序列_sequence

转义序列 回忆上次内容 上次回顾了5bit-Baudot博多码的来历从 莫尔斯码 到 博多码 原来 人 来 收发电报 现在 机器 来 收发电报 输入方式 从 电键改成 键盘 输出方式 从 纸带变成 打印纸张 后来 电传打字机ASR-33成为 初代 经典终端 除了 \n 和 \r 之外 还有什么 特殊字符 吗…

前端格式化工具使用(eslint、stylelint、prettier、lint-staged和husky搭配格式化代码)

目录 eslint 安装eslint .eslintrc.js env extends parser parserOptions rules globals plugins 屏蔽eslint检测具体规则 官方规则 stylelint 安装stylelint 创建stylelint配置文件 .eslintrc.js extends sass文件的格式检查 prettier 安装使用prettier …

Vue组件-插槽

一、插槽 1. 组件的三大核心&#xff1a;属性&#xff08;data、props&#xff09;、事件、插槽 2. 插槽&#xff08;slot&#xff09; 插槽&#xff08;slot&#xff09;将父组件的内容与子组件的模板相混合&#xff0c;从而弥补了视图的不足。 插槽的目的&#xff1a;使组件…

ConstraintLayout2

ConstraintLayout2ImageFilterView 属性 app:altSrc&#xff1a;altSrc提供的资源将会和src提供的资源通过crossfade属性形成交叉淡化效果。默认情况下,crossfade0&#xff0c;altSrc所引用的资源不可见,取值在0-1app:saturation&#xff1a;float型&#xff0c;默认1&#xf…

FPGA知识汇集-时钟系统的移植

ASIC 和FPGA芯片的内核之间最大的不同莫过于时钟结构。ASIC设计需要采用诸如时钟树综合、时钟延迟匹配等方式对整个时钟结构进行处理&#xff0c;但是 FPGA设计则完全不必。因为后者有内建的时钟资源:锁相环、频率综合器、移相器&#xff0c;以及具有低延迟特性的专用时钟布线网…

Unity基于状态机的架构与设计

我们做游戏的时候经常会有流程控制&#xff0c;流程控制的方法有很多&#xff0c;行为决策树&#xff0c;状态机等。本质差别都不大&#xff0c;就是把每一段执行逻辑做成一个一个的节点&#xff0c;根据条件执行某个节点&#xff0c;切换到某个节点。今天给大家分享一下基于状…

如何在VSCode中添加Python解释器并安装Python库

如何在VSCode中添加Python解释器并安装Python库作者介绍一&#xff0e; 安装VScode编辑器二&#xff0e; 安装Python解释器三&#xff0e; 在VScode中添加Python解释器四&#xff0e; 创建项目并在VScode中打开&#xff1b;五、在VScode中安装Python库作者介绍 孟莉苹&#xf…

【TypeScript入门】TypeScript入门篇——对象

对象其实就是一种封装的概念&#xff0c;它把事物封装成一个类&#xff0c;然后提供类的接口&#xff0c;而具体的过程人们是看不到的。 一、对象实例 二、TypeScript 类型模板 三、鸭子类型(Duck Typing) 对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等&am…

Linux常用命令——lsof命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) lsof 显示Linux系统当前已打开的所有文件列表lsof -p pid 补充说明 lsof命令用于查看你进程打开的文件&#xff0c;打开文件的进程&#xff0c;进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系…

十四、Node.js 中 session验证登录

在前一篇内容中讲到这个cookie实现验证登录&#xff0c;cookie是存储在客户端的&#xff0c;而session是存储在服务器的&#xff0c;相比较session的安全性会更高&#xff0c;session对象存储特定用户会话所需要的属性以及配置信息&#xff0c;服务通过session对象将用户的信息…

CPU使用率过高的原因及解决方法

常见的CPU使用率过高可不是职场CPU哦&#xff0c;而是电脑的中央处理器&#xff0c;CPU作为计算机系统重要的运算和控制核心&#xff0c;可谓是“很忙”的存在。在我们日常使用电脑设备时&#xff0c;由于打开的软件、游戏、网页等程序容易导致电脑运作卡顿&#xff0c;这时候就…

《图机器学习》-Traditional Methods for Machine Learning in Graphs

Traditional Methods for Machine Learning in Graphs前言一、Node-Level Tasks and Features二、Link-Level Tasks and Features三、Graph-Level Tasks and Features前言 图机器学习任务可以分为三种&#xff1a; Node-level prediction&#xff1a;节点级的预测 如对节点进…

最优控制学习笔记3----无约束条件的泛函极值问题

无约束条件的最优控制问题 设函数 x(t)x(t)x(t) 在 [t0,tf][t_0, t_f][t0​,tf​] 区间上连续可到&#xff0c;考虑 Lagrange型性能指标函数 J[x(t)]∫t0tfL[x(t),x˙(t),t]dtJ[x(t)]\displaystyle\int_{t_0}^{t_f}L[x(t), \dot{x}(t), t]dtJ[x(t)]∫t0​tf​​L[x(t),x˙(t),…

Linux---常见指令

目录 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令 06.rmdir指令 && rm 指令 07.man指令 08.cp指令 09.mv指令 10. cat指令 11.more指令 12.less指令 13.head指令 13.tail指令 简述重定向和管道概念&#xff1a; 14.时间相关的指令 15.Ca…

Git Fork操作与配置

我理解的git fork&#xff1a;将别人&#xff08;张三&#xff09;仓库包括文件&#xff0c;提交历史&#xff0c;issues等复制一份到自己的github账号下。我们在可以通过修改本地项目的代码&#xff0c;然后&#xff0c;给&#xff08;张三&#xff09;发送一个Merge Request&…