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

    文章

    4406

    浏览量

    66841
  • 数据类型
    +关注

    关注

    0

    文章

    237

    浏览量

    14108

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电能质量在线监测装置支持哪些数据格式的离线查看?

    电能质量在线监测装置支持的离线数据格式主要分为 标准格式 和 通用格式 两大类,其中标准格式是行业主流,通用格式则方便日常
    的头像 发表于 12-05 17:19 959次阅读
    电能质量在线监测装置支持哪些<b class='flag-5'>数据格式</b>的离线查看?

    飞凌嵌入式ElfBoard-标准IO接口之格式化输入

    格式化输入用于从不同输入源中获取数据并根据格式化字符串format转换为对应的格式代码并存储在对应的类型中。
    发表于 11-12 08:35

    广成科技蓝牙转CAN模块的作用和应用场景

    接收到蓝牙设备发送的数据时,会将其转换为CAN总线数据格式,发送到CAN总线上,实现两者之间的数据双向转换
    的头像 发表于 09-29 11:05 665次阅读

    浅谈电子工程师困惑多年的EDA行业的标准格式

    数据格式还是非常丰富的。比如*.dxf,*.step,*.prt,*.stl......格式特点STEP(.STP/.STEP)ISO标准,支持精确几何,装配结
    的头像 发表于 08-23 12:34 487次阅读
    浅谈电子工程师困惑多年的EDA行业的标准<b class='flag-5'>格式</b>

    可Pin to Pin替代CL-CS4344的国产立体声数模转换芯片-MS4344

    MS4344是一款立体声数模转换芯片,内含插值滤波器、multi bit数模转换器、输出模拟滤波器。MS4344支持大部分的音频数据格式
    的头像 发表于 05-09 09:22 591次阅读
    可Pin to Pin替代CL-CS4344的国产立体声数模<b class='flag-5'>转换</b>芯片-MS4344

    LPC55S28修改音频数据格式后USB Aduio类异常的原因?

    您好 NXP 前辈,我已经更改了 LPC55S28 官方 SDK 上的 USB 音频数据格式。 我的主要问题是修改音频流格式类型描述符。 我的想法是将 USB Aduio 每个通道的数据字节数从 2
    发表于 03-20 07:33

    用FPGA配置TVP5150,把PAL制标准视频转换成BT656数据格式,能否把数据流直接给SAA7121?

    用FPGA配置TVP5150,把PAL制标准视频转换成BT656数据格式,请问能否把数据流直接给SAA7121这样的编码芯片,我这么做的,但是出来的图像是红色的,是不是寄存器没配置对?还是其他什么原因?
    发表于 02-11 07:14

    西门子TIA Portal中函数FC和函数块FB的相互转换

    描述 本文将介绍在西门子 TIA Portal 中使用 Add-In 插件实现函数 FC 和函数块 FB 的相互转换的方法和步骤。 第1步: 添加 PLC 设备。 选择西门子 CPU 1214C
    的头像 发表于 01-15 10:07 3038次阅读
    西门子TIA Portal中<b class='flag-5'>函数</b>FC和<b class='flag-5'>函数</b>块FB的相互<b class='flag-5'>转换</b>

    使用RDATAC指令后,ADS131E04传送的数据格式以及内容是怎样的?

    请问使用RDATAC指令后,ADS131E04传送的数据格式以及内容是怎样的,数据手册是按照ADS131E08为例来说明有27个BYTE,不知道ADS131E04是不是只用15个BYTE?
    发表于 01-10 07:19

    是否还可以使用DS90CR288/287转换成LVDS--TTL/CMOS使用?

    现在有遇到这样的问题 ,之前TTL/CMOS 转LVDS---LVDS 转TTL/CMOS 都是使用BT601/BT1120的数据格式,请问TTL/CMOS数据是 图像传感器直接出来的RAW
    发表于 01-10 06:15

    ADS1298R将每一信号都以12位的位压缩格式进行存储并传输,会不会对ADS1298采集的数据造成大的影响?

    ADS1298R采集的数据是24位的,我现在需要按照MIT-BIH 的数据格式:将每一信号都是以12位的位压缩格式(即“212”格式)进行存储并传输的。我想问一下TI这样做会不会对A
    发表于 01-02 06:16

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

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

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

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

    请问TVP5158分辨率D1与HalfD1是如何转换的?

    数据格式之间到底是如何转换的呢。比如说我要将D1分辨率的数据变成HalfD1的分辨率,其中可以从手册中看出是将D1格式数据行中的像素点去掉
    发表于 12-23 06:31

    API接口有哪些常见的安全问题

    定义:API是一种软件接口,它规定了软件组件之间的通信方式,使得不同的应用程序能够按照预定义的规则相互通信和交换数据。 既然是接口,那就涉及到数据格式。API接口支持多种数据格式,其中JSON
    的头像 发表于 12-15 09:54 1082次阅读
    API接口有哪些常见的安全问题