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

    文章

    4331

    浏览量

    62597
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13623

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

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

收藏 人收藏

    评论

    相关推荐

    ads1158读取数据,得到的数据格式是什么样的啊?

    = SPDR; return data; } 想请教一下,其他两种读数据,得到的数据格式是什么样的啊?
    发表于 12-24 08:28

    LMH0341如何转换出的LVDS数据格式

    LMH0341转换出的LVDS数据格式有具体参考资料吗?我想用DM8168去作为主处理器外加LVDS转RGB去实现。
    发表于 12-23 07:31

    FP8数据格式在大型模型训练中的应用

    本文主要介绍了 FP8 数据格式在大型模型训练中的应用、挑战及最佳实践,展示了 FP8 在提升训练速度和效率方面的潜力和实际效果。
    的头像 发表于 11-19 14:54 276次阅读
    FP8<b class='flag-5'>数据格式</b>在大型模型训练中的应用

    ADC3561转换成什么数据格式便于高速实时通过WIFI发送?

    5MHz的16位采样率,LVDS格式数据输出,使用串口转WIFI模块受限于串口波特率无法实现实时发送,请问转换成什么数据格式便于高速实时通过WIFI发送
    发表于 11-18 08:06

    PCM2707的S/PDIF输出的数据格式是什么?

    我想问一下PCM2707的S/PDIF输出的数据格式是什么? 在网上查到的资料说是S/PDIF是用来传输数字信号的,可以传输PCM形式的信号,那是不是就是说带有S/PDIF输出的声卡(比如说
    发表于 11-07 06:33

    请问AIC3106怎么设置成单声道32位数据格式

    AIC3106 怎样设置成单声道 32位数据格式
    发表于 11-04 08:17

    SRC4192能否支持输入TDM格式音频数据,输出I2S,进行数据格式转换

    SRC4192这款芯片能否支持输入TDM格式音频数据,输出I2S,进行数据格式转换。在我看TI这款芯片的datasheet时候管脚描述如下: 我理解是可以TDM输入的,可是后面关于输
    发表于 10-25 11:41

    请问TLV320AIC3268的ADC转换后的数据格式是什么样的?

    我在使用TLV320AIC3268,但是不知道ADC转换后的数据格式是什么样的?比如是二进制补码吗?转后的数据与输入的模拟信号的电压值有什么关系?
    发表于 10-14 07:48

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

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

    态势数据有哪些格式

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

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

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

    请问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 1229次阅读

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

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