热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

威纶通宏指令是c语言吗,威纶触摸屏宏指令编程,字符串相关函数介绍与使用...

04:39如下图,前面几个小节,我们介绍了数学运算,数据转换,数据操作分类下的全部函数,这小节我们来介绍字符串

04:39

如下图,前面几个小节,我们介绍了数学运算,数据转换,数据操作分类下的全部函数,

这小节我们来介绍字符串处理相关的函数。

dc80b21ec45d36ea555eed12e2229bdf.png

字符串处理相关的函数,顾名思义就是针对字符串数据的一些处理,如大小写转换,

复制剪切插入,查找子字符串,编码转换等等。

这些函数如下所示,共有28个,

StringToLower, StringToUpper, StringToReverse

StringTrimLeft, StringTrimRight

StringCat, StringInsert,StringCopy, StringMid

StringExcluding, StringIncluding

StringFind, StringFindOneOf,StringReverseFind

StringCompare, StringCompareNoCase

StringGet,StringGetEx,

StringLength

StringSet,StringSetEx

String2Unicode, Utf82Unicode ,Unicode2Utf8

UnicodeCat,UnicodeCopy, UnicodeCompare, UnicodeExcluding

宏指令的学习只有在编程软件中实践,才能够比较直观地了解每个函数的功能与使用。

所以在学习下面的指令前,我们可以在编程软件界面上,准备一个字符元件,设置其读写地址为LW0,长度20个字,以便可以直观的显示出每个指令的执行结果。

元件的具体设置如下图所示。

a8e85ae23666295b9484ef046de833ce.png

1. StringToLower,

函数用于将指定字符串转换为小写形式,要注意接收转换结果的字符数组要有足够的空间,不然函数执行失败。

我们可以在宏编辑界面使用下面的代码,模拟运行查看函数的执行结果。

macro_command main()

char source[5]="aBCdE", result[5]

bool rst

//函数将指定的字符串转换为小写形式,结果result="abcde"

rst = StringToLower("aBCdE", result[0])

//也可以传递字符元素,表示转换索引0开始的全部字符

rst = StringToLower(source[0], result[0])

if rst == true then

SetData(result[0], "Local HMI", LW, 0, 5)

end if

end macro_command

2. StringToUpper。

与上面函数StringToLower执行结果相反,此函数将指定字符串转换为大写形式,

一样要注意的存储转换结果的字符数组空间要足够大,不然函数执行失败。

也可以编译模拟下面函数的使用例程,查看执行结果。

macro_command main()

char source[5]="aBCdE", result[5]

bool rst

//函数将指定的字符串转换为大写形式,结果result="ABCDE"

rst = StringToUpper("aBCdE",result[0])

//也可以传递字符元素,表示转换索引0开始的全部字符

rst = StringToUpper(source[0], result[0])

if rst == true then

SetData(result[0], "Local HMI", LW, 0, 5)

end if

end macro_command

3. StringToReverse。

此函数用于将指定字符串的内容进行反向重新排序。

例如“1234”,重新排序后变成“4321”

可以在宏编辑器里运行下面代码查看执行结果。

macro_command main()

char source[5]="aBCdE", result[5]

bool rst

//函数将指定的字符串顺序反向重排,结果result="EdCBa"

rst = StringToReverse("aBCdE",result[0])

//也可以传递字符元素,表示转换索引0开始的全部字符

rst = StringToReverse(source[0], result[0])

if rst == true then

SetData(result[0], "Local HMI", LW, 0, 5)

end if

end macro_command

4. StringTrimLeft, StringTrimRight。

这两个函数用于从左边或右边删除最左边或最右边指定的字符串。

例如StringTrimLeft(“*1234”,“*”, result[0])

最左边是“*”则删除,不是则原样输出,结果result=“1234”

可以在宏编辑器使用下面代码,模拟运行查看结果。

macro_command main()

char source[12]=",.*aBCdE,.*", set[3]=",",result[12]

bool rst

//判断source[12]=",.*aBCdE,.*"最左边是否为set[3]=",",是则删除,结果保存到result

//执行结果为result=".*aBCdE,.*" .要注意result要能足够容纳结果,不然函数执行失败。

//rst = StringTrimLeft(source[0], set[0], result[0])

//也可以使用这一种形式去除最左边字符串,结果result="aBCdE,.*"

//rst = StringTrimLeft(",.*aBCdE,.*", ",.*", result[0])

//有从左边去除,对应就有从右边去除,结果result=",.*aBCdE"

rst =StringTrimRight(source[0], ",.*", result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

5. StringCat。

此函数用于在指定字符串尾部添加新的字符串。

例如char source[12]="abc",result[20]="123"

执行函数后StringCat(source[0], result[0])

在字符串Result尾部添加了“abc”,并只在在result里。

最终result=“123abc”.

要注意的是result要有足够空间保存结果,不然函数执行失败。

可以在宏编辑器里执行下载代码查看执行结果。

macro_command main()

char source[12]="abc", set[3]="123",result[20]="123"

bool rst

//result=”123abc”

rst =StringCat(source[0], result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

6.StringInsert。

此函数用于的一字符串指定的位置插入另一字符串,索引的位置从0开始计数。

结果保存在被插入的字符串存储空间里。

同样也要注意结果存储空间足够大,不然函数执行失败。

例如char source[12]="abc", result[20]="123" StringInsert(1,source[0],result[0])

程序会在字符串result[20]="123"的1位置,也就是在“1“的后面插入source[12]="abc"

执行后result[20]="1 abc23"

在宏编辑界面使用下面代码,模拟运行,查看执行结果。

macro_command main()

char source[12]="abc", set[3]="123",result[20]="123"

bool rst

//result="1abc23"

rst = StringInsert(1,source[0],result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

7.StringCopy。

此函数用于实现两个字符串间的复制。

例如char source[12]="abc",result[20]="123" StringCopy(source[0],result[0])

函数将source[12]="abc"内容复制到result中,结果为result=“abc”

同样要注意result有足够空间保存结果。

也可以在编辑器里模拟运行下面代码,查看执行结果。

macro_command main()

char source[12]="abc", set[3]="123",result[20]="123"

bool rst

//执行结果result="abc"

rst = StringCopy(source[0],result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

8. StringMid

函数用于将一字符串内的子字符串提取出来。

例如char source[12]="abc",result[20] StringMid(source[1], 1, result[0])

程序将字符串"abc"第一个字符开始的1个字符串提取出来,保存到result。

字符串索引从0开始计算,所以第"abc"第一个字符为b,执行结果result=“b”

同样也要注意存储结果的空间大小,太小,函数执行会失败。

模拟运行下面代码,可以查看执行结果

macro_command main()

char source[12]="abc", set[3]="123",result[20]

bool rst

//执行结果result="b"

rst = StringMid(source[1], 1, result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

9. StringExcluding。

此函数在一字符串中从左查找另一指定字符串不包含的字符,包含时结束查找,

并返回查找结果.

例如char source[12]="abcdefg", set[3]="bc",result[20]=""

StringExcluding(source[0], set[0], result[0])

从左开始在字符串"abcdefg"中找到第一个“b”包含在“bc”字符串中,

结束查找,返回”b”前面的所有内容“a”.

所以执行结果result=“a”,这里(source[0],中的索引0表示开始查找的位置,可任意。

我们可以执行下边代码查看执行结果。同样也要考虑存储结果的空间大小。

macro_command main()

char source[12]="abcdefg", set[3]="bc",result[20]=""

bool rst

//执行结果result="b"

rst = StringExcluding(source[0], set[0], result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

10. StringIncluding。

此函数在一字符串中从左查找另一指定字符串所包含的字符,不包含时结束查找,

并返回查找结果。

例如 char source[12]="AABBCDEFG", set[3]="AB",result[20]=""

StringIncluding(source[0], set[0], result[0])

在字符串” AABBCDEFG”中查找”AB”,从左开始查找,A,A,B,B都在字符串“AB”中包含,

但C不在字符串“AB”中,所以停止查找,返回先前查找的结果”AABB”.

Result =“AABB”

可以在宏界面模拟运行下面代码查看结果。

macro_command main()

char source[12]="AABBCDEFG", set[3]="AB",result[20]=""

bool rst

//执行结果result="AABB"

rst = StringIncluding(source[0], set[0], result[0])

if rst==true then

SetData(result[0], "Local HMI", LW, 0, 12)

end if

end macro_command

11. StringFind。StringReverseFind。

这两函数用于在一字符串中,从左向右,或从右向左查找指定的字符串,

找到则返回找到字符串的索引。

例如char source[12]="abcdefg", set[3]="bc",result[20]=""

int pos pos =StringFind(source[0], set[0])

在字符串"abcdefg"中查找"bc",可以找到“bc“,索引为1,所以pos=1.

如果找不到返回-1.

可以在宏编辑界面模拟执行下面的代码,查看执行结果。

macro_command main()

char source[12]="abcdefg", set[3]="hi",result[20]=""

int pos

//从右向左查找,结果POS=-1

//pos =StringReverseFind(source[0], set[0])

//从左向右查找,结果pos=-1

pos =StringFind(source[0], set[0])

DEC2ASCII(pos, result[0], 4)

SetData(result[0], "Local HMI", LW, 0, 12)

end macro_command

12. StringFindOneOf。

相对于前面StringFind ,StringReverseFind,这个函数要求相对不高。

在一字符串中从左到右查找指定字符串,有一字符在指定字符串中包含,则停止查找,

返回字符索引。

例如

char source[12]="abcdefg", set[3]="hdi",

int pos

pos =StringFindOneOf(source[0], set[0])

在字符串"abcdefg"中从左向右查找字符串"hdi",找到字符d在字符串"hdi"中包含,则停止查找。返回d在字符串"abcdefg"的索引,pos=3。

下面是实操代码,可以运行查看执行结果。

macro_command main()

char source[12]="abcdefg", set[3]="hdi",result[20]=""

int pos

pos =StringFindOneOf(source[0], set[0])

//结果pos=3

DEC2ASCII(pos, result[0], 4)

SetData(result[0], "Local HMI", LW, 0, 12)

end macro_command

13. StringCompare, StringCompareNoCase

这两函数用于对比两字符串,相同返回true,不相同返回false.

StringCompare比对时区分大小写,

StringCompairNoCase则不分大小写。

例如bool rst rst = StringCompare("hdi", "hdi")

执行结果为TRUE,因为参与 对比两字符串相同。

rst = StringCompareNoCase ("hdi", "HDI")

函数不区分大小写,所以结果也为true,

我们也可以实践模拟下面的代码,查看执行结果

macro_command main()

char source[12]="abcdefg", set[3]="hdi",result[20]=""

bool rst

//执行结果 rst=false,

rst = StringCompare(source[0], set[0])

//结果rst=true

//rst = StringCompare("hdi", "hdi")

DEC2ASCII(rst, result[0], 4)

SetData(result[0], "Local HMI", LW, 0, 12)

end macro_command

14. StringGet,StringGetEx,

两个函数用于获取触摸屏或PLC等指定寄存器的字符串。

例如char result [12]="abcdefg",

StringGet(result [0], "Local HMI", LW, 0, 20)

表示从触摸屏"Local HMI",的地址LW0开始,读取20个字符。

存放到字符数组result中。

Local HMI为添加硬件的类型,这里没有添加PLC等硬件,所以默认只有触摸屏。

20为读取的数据个数,数据类型为字符,所以表示读取20个字符。

StringGetEx和StringGet相似,只不在执行时不会等待硬件回应,直接执行剩余代码。

我们知道硬件在通讯时会有延时现象,导致程序宏执行卡顿,

所以使用这个函数可以避免程序延时。

下面的宏指令可以模拟运行,查看获取LW 9120的结果。

macro_command main()

char source[12]="abcdefg", set[3]="hdi",result[20]="123"

bool rst

//LW 9120为系统预留编程软件版本号

StringGet(result[0], "Local HMI", LW, 9120, 4)

//StringGetEx(result[0], "Local HMI", LW, 10884, 2)

end macro_command

StringLength

StringSet,StringSetEx

15. StringLength

此函数获取指定字符数据的字符个数。

例如int nLength nLength =StringLength"abcdefg")

字符串有7个字符,所以nLength=7.

同样执行下面代码,查看显示结果。

macro_command main()

char source[12]="abcdefg", set[3]="hdi",result[20]="123"

int nLength

//"abcdefg"有7个字符,所以nLength=7

nLength =StringLength(source[0])

DEC2ASCII(nLength, result[0], 4)

SetData(result[0], "Local HMI", LW, 0, 4)

end macro_command

16. StringSet,StringSetEx

有从硬件读取字符串就有向硬件写入字符串,这两个函数用于向PLC等硬件写入字符串。

例如

char source[12]="abcdefg",

StringSet(source[0], "Local HMI", LW, 0, 12)

代码实现向触摸屏"Local HMI",LW0开始的地址写入12个字符,

字符来源于字符数组source。

如果添加PLC等其他硬件,可以将Local HMI换成硬件名称,

将地址LW0改成硬件支持的地址。

可以模拟运行下面代码,查看界面显示的内容。

macro_command main()

char source[12]="abcdefg", set[3]="hdi",result[20]

//在前面添加的数值元件显示出字符串。

StringSet(source[0], "Local HMI", LW, 0, 12)

end macro_command

另外函数StringSetEx是StringSet扩展,用法都一样,只是不会通讯硬件响应,

径直执行函数后面的代码。

17. String2Unicode, Utf82Unicode ,Unicode2Utf8

前面我们使用的字符都可以在ASCII表查找到,但世界语言很多,ASCII表不能够表示全部语言,所以就从ASCII基础上扩展出了UNICODE,UNICODE可以表示世界上的全部语言。

这两种编码字符间可以相互转换使用。

另外还有一个UTF-8编码,全称是8-bit Unicode Transformation Format,

是一种针对Unicode的可变长度字符编码。

也可以和Unicode进行相互转换。

在使用这三个函数前,我们在界面添加一个字符显示元件,

如下图设置让其能显示出UNICODE编码字符。

985224879af44983f279f538d785a378.png

char result[20]

String2Unicode("工控编程吧,欢迎关注", result[0])

将字符串常量转换为UNICODE形式,保存到result字符数组中。

要注意只会转换字符串常量,且结果存储空间要够大。

执行下面宏,可以在界面的字符元件上显示出中文。

Utf82Unicode ,Unicode2Utf8也是同样的转换操作,就不演示了。

macro_command main()

char result[20]

String2Unicode("工控编程吧,欢迎关注", result[0])

StringSet(result[0], "Local HMI", LW, 0, 20)

end macro_command

剩下的四个函数

UnicodeCat,UnicodeCopy, UnicodeCompare, UnicodeExcluding,

是关于UNICODE字符的衔接,复制,对比,包含判断等函数,和ASCII对应的函数一样使用,只是少了很多选择,在使用上也是很多问题,不是很稳定,这里了解下就好。

举报/反馈



推荐阅读
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • Visual Studio Code (VSCode) 是一款功能强大的源代码编辑器,支持多种编程语言,具备丰富的扩展生态。本文将详细介绍如何在 macOS 上安装、配置并使用 VSCode。 ... [详细]
  • 在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
author-avatar
西边升起的太阳2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有