数据格式转换函数

字符串数据类型 定义(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


华硕ROG游戏手机4现身Geekbench:搭载骁龙888芯片
电子测试设备已经成为了汽车工程师必不可少的工具
柔性电子与人工智能技术在智能制造领域的应用及发展
中国联通VR业务规划的两个方向
借助AI识别网关实现高空坠物监测预警
数据格式转换函数
完全可扩展的软件开发套件提供TI TI处理器产品组合的简化开发
VR/AR技术的挑战和三大应用方向
华为下一代数据中心助力打造绿色低碳“数字能源之都”
供应/回收AgilentE3645A可编程直流电源Agile
新能源汽车产业链投资路线图(十大金股)
台积电计划年内大幅扩大招聘规模,预计招聘近9000名新员工
有锁版的HTC 10/One M9将在未来的两周内更新Android 7.0
充电桩开始变成一门好生意了吗?
为了清掉Fire平板的显示面板库存?amazon Echo Show拆解
三星S8最新消息汇总 移植苹果的3D Touch叫这个名?
便携产品充电电路旁路元件的选择
DRAM产业供过于求加剧下,大部分交易已改为月结价
青岛芯恩将逐步引进相关联上下游半导体产业公司 逐步打造北方最具规模的半导体产业集群
LED光源性能的六大重要指标及其关系