FP_FORMAT_STRING

将格式化数据写入结果字符串

此指令将Data1(可扩展为Data16)处指定的格式化数据写入由控制字符串sFormat指定的格式化字符串。

输入

sFormat (STRING)

具有定义如何创建格式化字符串的格式说明符的控制字符串

  • 包含如何创建字符串的定义的字符串变量或字符常量(最多256个字符)。

  • 控制字符串由文本、格式说明符(%d%e等)、换行代码(\n)和制表符代码(\t)组成。

  • 格式化字符串最多可包含4096个字符。如果超出4096个字符,将会发生操作错误。

  • 最多可为格式说明符指定16位数字。如果超出16位数字,将会发生操作错误。

  • 1段数据转换后的最大字符数为32个,不包括%s%S。如果超出32个字符,将会发生操作错误。

  • 所有未识别为格式说明符的字符串都将被视为要格式化的文本。

Data1 (INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL, STRING)

要格式化的数据

  • 要写入格式化字符串的变量数据。

  • 按照控制字符串中指定的顺序排列变量数据。

输出

结果 (STRING)

包含ASCII格式数据的格式化字符串。

标注

  • Data1输入最多可扩展到16个输入。

  • Data1..DataN输入的数量必须与sFormat处指定的输入字符串中的格式说明符的数量相同。

  • DataN输入的数据类型必须对应于sFormat中的格式说明符(请参阅下表)。

sFormat控制字符串的说明和示例

sFormat:例如%+12.5d,

使用下面所示格式的字符串数据来指定格式化字符串的类型、字符数和精确度。还可根据要转换的数据类型,选择各种选项(如插入符号或空格)。

示例中的位置

描述

sFormat

二进制数据

ASCII数据中的转换结果

注释

0

零填充

'%05d'

100

'00100'

指定字符数时,可以通过在此位置向控制字符串sFormat添加零(0)来使用零填充。

+

添加加号

'%+4d'

100

'+100'

宽度四个字符,十进制值,+号添加

-

左对齐

'%-6d'

100

'100'

宽度六个字符,十进制值,左对齐

(空格)添加空格代替加号

'%4d'

100

'100'

宽度四个字符,十进制值,填充空格

#

对十六进制数插入0x

'%#4X'

100

'0X64'

宽度四个字符,以0X开头的十六进制格式的数值

始终对实数增加小数点

'%#8.0f'

123.45678

'123.'

宽度八个字符,浮点数,四个前导空格

12

ASCII数据元素的宽度(带或不带逗号)

当宽度小于该值所需的字符数时,会发生操作错误。请参考“错误标志”。

'%012d'

100

'000000000100'

宽度12个字符,带九个前导零

无宽度:

'%d,'

100

'100,'

未指定宽度,增加逗号

小数点之后的精确度

.5

小数点之后的任何数字

'%8.3f'

123.45599

'123.456'

宽度八个字符,小数点之后三个字符精确度

12.5

用[n.m]、[n]或[.m]指定字符总数(n)和精确度字符数(m)。精确度的字符数(m)根据转换数据的类型变化。

d , Ld, i , Li, u ,Lu, x , Lx , b, Lb

表示数字字符串中的字符数。

f, Lf, e, Le, E, LE

表示小数点后的字符数。

g, Lg, G, LG

表示有效数字的数量。

要转换的数据类型

'%06d'

100

'100'

d , i , u , x , X , b:数字字符串中的字符数

f:小数点后的字符数。

g:有效数字的数量。

d

有符号整数®十进制ASCII

'%6d'

100

'000100'

宽度六个字符,十进制值,带三个前导零

u

无符号整数®十进制ASCII

'%10u'

-100

'100'

宽度10个字符,七个前导空格,无符号整数

x

无符号整数®十六进制ASCII

'%4x'

16#12A

'12a'

宽度四个字符,小写十六进制数

X

十六进制大写

'%4X'

16#12A

'12A'

宽度四个字符,大写十六进制数

b

BCD整数®十六进制ASCII

'%5b'

16#123

'123'

宽度五个字符,BCD数据

f

浮点实数®浮点ASCII

'%-6.2f'

1.2345

'1.23'

宽度六个字符,左对齐,精确到小数点之后的两位数字

e

浮点实数®指数表示法ASCII

'%9.3e'

1234.5678

'1.235e+03'

宽度9个字符,精确到小数点之后的3位数字,指数小写

E

指数大写,1.23E10

'%9.3E'

1234.5678

'1.235E+03'

宽度9个字符,精确到小数点之后的3位数字,指数大写

g

浮点实数®浮点ASCII或指数表示法ASCII

'%12g'

1234.5678

'1234.57'

宽度12个字符,浮点数

G

浮点或指数大写

'%#9.3G'

1234

'1.E+03'

宽度九个字符,精确到小数点之后的三个字符

s

字符串®ASCII

'%10s'

abcdef

'abcdef'

字符串数据(指定字符数)

S

字符串®ASCII大写

'%-10S'

abcDEF

'abcDEF'

字符串数据区分大小写

控制字符串sFormat的转换数据

控制字符串

转换前的二进制数据

转换后的ASCII数据

示例

'%d''%i'

16位数据(有符号整数)

十进制ASCII数据

'%d' , '%5d' , '%+5d"

'%-5d' , '%05d' , '%10.5d' , '%d,' , '% d'

'%Ld''%Li'

32位数据(有符号整数)

'%u'

16位数据(无符号整数)

'%u' , '%5u' , '%+5u'

'%-5u' , '%05u' , '%10.5u' , '%u,'

'%Lu'

32位数据(无符号整数)

'%x'

16位数据

十六进制ASCII数据(正/反方向)

'%x' , '%5x' , '%-5x'

'%05x' , '%10.5x' , '%x,' , '%#x' , '%X'

'%Lx'

32位数据

'%b'

16位BCD数据

'%b' , '%5b' , '%-5b'

'%05b' , '%10.5b' , '%b,'

'%Lb'

32位BCD数据

'%f'

32位单精度实数数据

浮点ASCII数据

'%f' , '%5.2f' , '%+5.2f'

'%-5.2f' , '%05.2f' , '%f,' , '%#f' , '% f'

'%Lf'

64位双精度实数数据

'%e'

32位单精度实数数据

指数表示法ASCII数据

'%e' , '%5.2e' , '%+5.2e'

'%-5.2e' , '%05.2e' ,'%e,'

'%#5.2e' , '% e' , '%E'

'%Le'

64位双精度实数数据

'%LE'

64位双精度长实数数据

'%#5.2E' , '% E' , '%E'

'%g'

32位单精度实数数据

指数表示法ASCII数据或浮点ASCII数据(以相关表示法中较短者为准)

'%g' , '%5.2g' , '%+5.2g'

'%-5.2g' , '%05.2g' ,'%g," '%#5.2g' , '%G'

'%Lg'

64位双精度实数数据

'%LG'

64位双精度长实数数据

'%-5.2G' , '%05.2G' ,'%G," '%#5.2G' , '%G'

'%s'

字符串数据

字符串数据(指定字符数)

'%s' , '%5s' , '%-5s' , '%-05s'

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果由sFormat指定的控制字符串中有错误。

  • 当格式为十进制时,如果在sFormat中指定正方向(+)。

  • 如果转换结果超过区域。

  • 指定了比ASCII码所需要的文字长度小的值时

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果由sFormat指定的控制字符串中有错误。

  • 当格式为十进制时,如果在sFormat中指定正方向(+)。

  • 如果转换结果超过区域。

  • 指定了比ASCII码所需要的文字长度小的值时

示例

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。

	VAR
		bFormat: BOOL:=FALSE;
		sFormatString: STRING[50]:='Current Value: %6d [Min: %6d, Max: %6d]';
		sFormattedString: STRING[50]:='';
		iCurrentValue: INT:=815;
		iMin: INT:=-16756;
		iMax: INT:=23456;	END_VAR

LD本体

当变量bStartFALSE变为TRUE时,执行此函数。

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_CONTACT,,bFormat,7,1,9,3,);
B(B_F,E_FP_FORMAT_STRING-3!,,25,0,36,7,,?DEN?dsFormat?dData1?dData2?dData3?AENO?c);
B(B_VARIN,,sFormatString,23,2,25,4,);
B(B_VAROUT,,sFormattedString,36,2,38,4,);
B(B_VARIN,,iCurrentValue,23,3,25,5,);
B(B_VARIN,,iMin,23,4,25,6,);
B(B_VARIN,,iMax,23,5,25,7,);
L(1,0,1,7);
L(1,2,7,2);
L(9,2,25,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

if (bFormat) then
    sFormattedString := FP_FORMAT_STRING(sFormatString,
                                         iCurrentValue, iMin, iMax);
end_if;

最后更新日期: 此页面上的反馈松下热线