0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据格式转换函数

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-01-04 10:01 次阅读

字符串数据类型

定义(Definition)

串数据类型定义一个最长254个字符的字符串。标准的区域保留有256个字符的字符串。内存区域存贮254个字符和2个头字节。

通过定义保存在串中的字符的最大数量,能够减少字符串要求的内存。一个空串,即没有数据的串是最小的值。

简单表达式当作在串中的字符的最大数量。串中允许所有ASCII代码的字符,也能包含特殊字符,如控制字符和非打印字符。能够用句法$hh键入,hh当作用十六进制表示和ASCII字符的值(如:‘$0D$0AText’)。

声明字符串内存空间时,能够定义能存贮在串中的最大字符数。如果不指定,则建立长度为254的串。

例子(Example)

VAR
Text1: String [123];
Text2: String;
END_VAR

在变量"Text1"声明中的常量"123"当作在串中的最大字符数。对于变量"Text2",保留254字符的长度。

初始化字符串(Initializing Character Strings)

串变量,同其他变量一样,能够用常量字符串在功能块的参数声明中初始化。初始化函数的参数则不可能。

如果初始的串短于声明的最大长度,多余字符不被初始化。当在程序中处理变量时,当前占用的字符位置才作考虑。

子(Example)

x : STRING[7]:='Address';

如果要求串类型临时变量,例如缓冲结果,在他们首次使用之前,总必须在变量声明或赋值语句中用串常量初始化。

子(Example)

FUNCTION Test : STRING[45]
VAR_TEMP

x : STRING[45];
END_VAR
x := 'a';
x := concat (in1 := x, in2 := x);
Test := x;
END_FUNCTION

没有初始化(语句)x := 'a';,函数返回错误结果。

串操作函数

LEN

LEN函数(FC21)返回串的当前长度(有效字符个数)。空串('')长度为0。函数不报告错误。

例 LEN (S:= 'XYZ' )

CONCAT

CONCAT函数将最多32个串变量合并为一个串。如果结果串比输出参数的串要度,结果串将限定在最大长度……

当使用S7-SCL函数CONCAT时,隐式地在“IEC函数”库中调用FC2。

Example CONCAT (IN1:= 'Valve', IN2:= ' open')

DELETE

DELETE函数(FC 4)在一个串中从P指示的字符开始删除L个字符。如果L和或P等于0,或者如果P大于输入串的当前长度,返回输入的串。如果L和P之和大于输入串的长度,则串删除到结束位置。如果L和/或P是负数,输出一个空串。

Example: DELETE (IN:= 'Temperature ok', L:= 6, P:= 5)

REPLACE

REPLACE函数(FC31)用第二个串(IN2)置换第一个串中P指示的位置开始的L个字符。如果L=0,则返回第一个串。如果P为0或1,则从起始位置开始置换。如果P在第一个串长度之外,第二个串接到第一个串之后。如果P和/或L是负数,则返回空串。当结果串长于输出参数指定的变量,则限定到最大长度。

Example REPLACE (IN1:= 'Temperature', IN2:= ' high' L:= 6, P:= 5)

FIND

FIND函数(FC11)返回第二个串(IN2)在第一个串(IN1)中的位置。查找从左开始;报告首次出现的位置。如果第一个串中不包含第二个串,则返回0。此函数不报告错误。

Example FIND (IN1:= 'Processingstation', IN2:='station')

串比较函数

使用S7-SCL比较函数=, <>, <, >, <=和>=能够比较串。编译器包括了自动调用要求的函数。简单地列出下列函数提供全部的情况。

EQ_STRNG和NE_STRNG

EQ_STRNG (FC10)和NE_STRNG (FC29)函数比较两个串格式的变量的内容是否相等(FC10)或不相等(FC29),并返回比较结果。如果参数串S1与参数串S2相等(不相等),则返回信号状态“1”的值。此函数不报告错误。

GE_STRNG and LE_STRNG

GE_STRNG (FC13)和LE_STRNG (FC19)函数比较串格式的两个变量大于(小于)或等于,并返回比较结果。如果参数串S1大于(小于)或等于参数串S2,则返回信号状态“1”的值。从左开始用其ASCII代码比较字符(如'a'大于'A')。第一个不同的字符决定了比较结果。如果较长串的左边部分与较短串相同,则认为较长串大。此函数不报告错误。

GT_STRNG and LT_STRNG

GT_STRNG (FC15)和LT_STRNG (FC24)函数比较串格式的两个变量大于(小于),并返回比较结果。如果参数串S1大于(小于)参数串S2,则返回信号状态“1”的值。从左开始用其ASCII代码比较字符(如'a'大于'A')。第一个不同的字符决定了比较结果。如果较长串的左边部分与较短串相同,则认为较长串大。此函数不报告错误。

数据格式转换函数

INT_TO_STRING和STRING_TO_INT

函数INT_TO_STRING和STRING_TO_INT将一个INT格式变量转换为字符串或将字符串转换为INT变量。函数I_STRNG (FC16)和STRNG_I (FC38)被从提供的“IEC函数”库中隐式地使用。串用一个前置符号表述。如果在返回参数指定的变量太短,则不进行转换。

DINT_TO_STRING和STRING_TO_DINT

函数DINT_TO_STRING和STRING_TO_DINT将一个DINT格式的变量转换为字符串或字符串转换为DINT变量。函数DI_STRNG (FC5)和STRNG_DI (FC37)被从提供的“IEC函数”库中隐式地使用。串用一个前置符号表述。如果在返回参数指定的变量太短,则不进行转换。

REAL_TO_STRING and STRING_TO_REAL

函数REAL_TO_STRING和STRING_TO_REAL将一个实数格式的变量转换为字符串或字符串转换为实数变量。函数R_STRNG (FC30)和STRNG_R (FC39)被从提供的“IEC函数”库中隐式地使用。串必须有下列格式:

?v.nnnnnnnE?xx (?= 符号, v =小数点前的数字, n =小数点后的数字, x =指数数字)

如果串的长度小于14,或其不是上述格式构造,将不进行转换。

如果返回参数指定的变量太短或IN参数中包含一个无效浮点数,没有转换。

SCL 字符串处理举例:

信息文本放到一块(Putting together message texts)

//通过处理和存贮,将信息文本放到一块。

////////////////////////////////////////////////////////////////////
//块包含必要的信息文本和产生的最后20条信息
////////////////////////////////////////////////////////////////////

DATA_BLOCK Messagetexts

STRUCT
Index: int;
textbuffer: array [0..19] of string[34];
HW: array [1..5] of string[16]; // 5种不同设备
statuses: array [1..5] of string[12]; // 5种不同状态
END_STRUCT
BEGIN
Index :=0;
HW[1] := 'Motor ';
HW[2] := 'Valve ';
HW[3] := 'Press ';
HW[4] := 'Weldingstation ';
HW[5] := 'Burner ';
Statuses[1] := ' problem';
Statuses[2] := ' started';
Statuses[3] := ' temperature';
Statuses[4] := ' repaired';
Statuses[5] := ' maintained';
END_DATA_BLOCK

////////////////////////////////////////////////////////////////////
//函数将信息广西领先到一块,并输入到DB的信息文本中。信息文本存贮在一个环形缓冲区里。
//文本缓冲区的下一个空区索引也在DB信息文本内并被函数修正。
////////////////////////////////////////////////////////////////////

FUNCTION Textgenerator : bool
VAR_INPUT
unit: int;// 设备文本(名称)的索引
no: int;// 设备的ID号
status: int;
value: int;
END_VAR
VAR_TEMP
text : string[34];
i : int;
END_VAR
// 临时变量的初始化
text := '';
Textgenerator := true;
Case unit of
1..5 : case status of
1..5 : text := concat( in1 := Messagetexts.HW[unit],
in2 := right(l:=2,in:=I_STRNG(no)));
text := concat( in1 := text,
in2 := Messagetexts.statuses[status]);
if value <> 0 then
text := concat( in1 := text,
in2 := I_STRNG(value));
end_if;
else Textgenerator := false;
end_case;
else Textgenerator := false;
end_case;
i := Messagetexts.index;
Messagetexts.textbuffer[i] := text;
Messagetexts.index := (i+1) mod 20;
END_FUNCTION

////////////////////////////////////////////////////////////////////
//函数在%M10.0边沿触发时被循环程序调用,如果参数改变了,则输入一次信息。
////////////////////////////////////////////////////////////////////

Organization_block Cycle
Var_temp
Opsy_ifx : array [0..20] of byte;
error : BOOL;
End_var;

////////////////////////////////////////////////////////////////////
//下面的调用将信息"Motor 12 started"输入DB信息文本的文本缓冲区, %MW0为1,

//%IW2为12 及%MW2为2.
////////////////////////////////////////////////////////////////////

if %M10.0 <> %M10.1 then
error := Textgenerator (unit := word_to_int(%MW0),
no := word_to_int(%IW2),
status := word_to_int(%MW2),
value := 0);
%M10.1:=M10.0;
end_if;
end_organization_block


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4232

    浏览量

    61926
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13562

原文标题:数据格式转换函数

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    KIT_ATV_24GHZ_RADAR是否可以从网口读取雷达的原始回波数据数据格式是怎样的?

    请问有没有这款开发板的调试手册,是否可以从网口读取雷达的原始回波数据数据格式是怎样的?
    发表于 07-24 06:10

    态势数据有哪些格式

    智慧华盛恒辉态势数据格式可以因应用场景和数据来源的不同而有所差异。以下是一些常见的态势数据格式,并进行了分点表示和归纳: 智慧华盛恒辉态势数据
    的头像 发表于 06-24 17:44 193次阅读

    态势数据有哪些格式和内容呢

    智慧华盛恒辉态势数据格式和内容可以根据其应用领域和具体需求而有所不同。以下是关于态势数据格式和内容的清晰归纳: 智慧华盛恒辉数据格式 XML: 定义:一种用于编码文档的标记语言,用于
    的头像 发表于 06-11 16:57 246次阅读

    请问CAN数据域的数据格式该如何定义?以什么标准定义?

    最近需要实现上位机与下位机的CAN通讯,现在双方苦于不知该如何定义数据格式,尤其是传输浮点数据~~ 起初经过讨论直接根据个人主观意愿定义了双方的数据协议,,,其后,boss要求采用标准进行定义
    发表于 05-09 07:20

    请问TouchGFX支不支持rgb-16bit数据格式

    请教下,TouchGFX 支不支持 rgb-16bit 数据格式
    发表于 04-23 06:05

    边界矢量数据是什么格式

    形状点(vertex)构成的路径,每个点由其坐标和属性信息(如名称、类型等)组成。边界矢量数据使用点、线和面等几何要素来描述地理区域的边界信息。 常见的边界矢量数据格式包括Shapefile(SHP)、Keyhole Markup Language(KML)、Geogr
    的头像 发表于 02-25 15:16 830次阅读

    如何实现PIL和OpenCV之间图像数据转换呢?

    PIL图像数据格式转换成OpenCV图像数据格式
    的头像 发表于 02-25 13:43 973次阅读

    VTHD这个寄存器的数据格式是?3.21带符号格式是什么格式

    VTHD这个寄存器的数据格式是?3.21带符号格式是什么格式?没有找到相关说明,那位高人给兄弟指点下,非常感谢!
    发表于 12-27 07:56

    AD7177-2在32位模式下的数据格式是什么?

    你好! AD7177-2的datasheet没有给出32位模式时的数据输出格式,只是说28位数据附加了4位状态位,请问这32位数据是怎么样的格式
    发表于 12-19 06:57

    oracle的tochar函数怎么用

    Oracle数据库中的TO_CHAR函数是将数据转换为指定格式的字符串。它通常用于将日期、数字和其他数据
    的头像 发表于 12-05 16:48 2436次阅读

    清除vlookup的格式保留数据

    清除VLOOKUP的格式,保留数据是一项常见的任务,特别是在处理大量数据时。VLOOKUP函数是Excel中一个非常有用的函数,可以根据指定
    的头像 发表于 12-01 10:19 1.2w次阅读

    MEASURE输出文件的排版格式如何调整?

    Hspice可以通过.OPTION MEASFORM来指定排版格式,MEASFORM最大能到4,大于4后返回到MEASFORM=0。设置时选择自己喜欢的就行。我自己喜欢设置为:.OPTION MEASFORM=1,因为这样会输出符合EXCEL数据格式
    的头像 发表于 11-30 12:39 636次阅读
    MEASURE输出文件的排版<b class='flag-5'>格式</b>如何调整?

    如何通过DA转换接收MATLAB生成的数据

    通过matlab生成了一组随机数,有小数,现在想将这一组随机数存入单片机中,再通过10位的D/A转换成电压信号。 问:那我需要怎么修改这组随机数数据格式,使它能够被D/A接收呢?
    发表于 10-23 06:27

    行业巨头联手推动AI数据格式标准化,微软打造云时代开源应用平台

    大家好,欢迎收看河套IT WALK第119期。 今日的科技新闻聚焦于全球技术巨头的联手创新与开放合作。从行业领袖共同推动AI数据格式的标准化,到微软推出面向云时代的开源应用平台Radius,我们看到
    的头像 发表于 10-20 02:05 495次阅读
    行业巨头联手推动AI<b class='flag-5'>数据格式</b>标准化,微软打造云时代开源应用平台

    前处理时图片数据格式转换需要HWC转CHW和NCHW, 1684是否相关接口可以使用?

    前处理时图片数据格式转换需要HWC转CHW和NCHW, 1684是否相关接口可以使用?
    发表于 09-19 06:41