西门子的PLC编程软件支持丰富的数据类型,多种编程语言,可以让编程人员充分的发挥自己的聪明才智,简洁高效的完成设计。今天我们来聊聊STEP7中的字符串数据类型,并跟大家分享一个使用简洁的代码获取字符串长度的小技巧。
我们先来看看字符串(STRING)的类型定义:
在STEP7中,字符串是N个字符(CHAR)的集合,N的范围从0到254,字符串占用的存储空间为N+2个字节。为什么N个字节长度的字符串,要占用N+2个字节的存储空间呢?这是因为STEP7规定字符串的第0个字节和第1个字节是用来表示该字符串的长度的,从第2个字节开始,才用来存储字符串的字符。规定如下:第0个字节(Byte0)表示该字符串的最大长度;第1个字节(Byte1)表示该字符串的实际长度。举个例子来说:假设我们定义了一个字符串STRING[2]="AB",那么第0个字节(Byte0)的值为4;第1个字节(Byte1)的值为2;第2个字节(Byte2)的值为65("A"的ASCII码);第3个字节(Byte3)的值为66("B"的ASCII码),如下图:
在实际的通信中,有时候我们需要把接收到的字符串(STRING)类型的数据转换成整形数据来进行一些运算处理,完成之后又需要把整形数据转换成字符串发送出去;对于这些需求,STEP7提供了两个很有用的函数FC5和FC37;为了说明怎么使用我们先来创建一个FB块,它的输入参数和静态变量参数如下:
使用系统库中的IEC函数FC5可以把双整形变量(DINT)转换成字符串(STRING);
转换成字符串后,我们想知道字符的实际长度是多少?可以有两个方法:
第一种:可以调用IEC函数FC21,把转换后的字符串作为参数输入给"S"形参,则"RET_VAL"中便可获得字符串的实际长度;
这是最常规的做法;
第二种方法是我想跟大家分享的一个小技巧,它基于我们对字符串(STRING)这种数据类型的理解,既然我们知道一个字符串的BYTE1里面的值存放的就是字符串的实际值,而字符串又是字符的集合(数组),那么是不是直接访问数组的第1位就能获取字符串的实际长度呢?如下图:我们可以用两句简单的代码,就获取到字符串变量"#STAT_STR_SEND"的实际长度,省去了调用系统函数的繁琐,是不是很简洁高效?
当数据完成运算后,可以调用IEC函数FC37把双整形变量(DINT)转换成字符串(STRING):
好了,获取字符串长度的小技巧就介绍到这里,实践是检验真理的唯一标准,有空试试吧?
扫描下面的二维码,关注“方正智芯”的原创文章,提供工业控制领域(PLC、单片机、通信)的技术和经验的分享,持续关注,持续进步。
点击这里下载本文的PDF版本:
发表评论