将格式化数据写入结果字符串
此指令将Data1(可扩展为Data16)处指定的格式化数据写入由控制字符串sFormat指定的格式化字符串。
输入
具有定义如何创建格式化字符串的格式说明符的控制字符串
包含如何创建字符串的定义的字符串变量或字符常量(最多256个字符)。
控制字符串由文本、格式说明符(%d、%e等)、换行代码(\n)和制表符代码(\t)组成。
格式化字符串最多可包含4096个字符。如果超出4096个字符,将会发生操作错误。
最多可为格式说明符指定16位数字。如果超出16位数字,将会发生操作错误。
1段数据转换后的最大字符数为32个,不包括%s和%S。如果超出32个字符,将会发生操作错误。
所有未识别为格式说明符的字符串都将被视为要格式化的文本。
要格式化的数据
要写入格式化字符串的变量数据。
按照控制字符串中指定的顺序排列变量数据。
输出
包含ASCII格式数据的格式化字符串。
Data1输入最多可扩展到16个输入。
Data1..DataN输入的数量必须与sFormat处指定的输入字符串中的格式说明符的数量相同。
DataN输入的数据类型必须对应于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' |
字符串数据区分大小写 |
控制字符串 |
转换前的二进制数据 |
转换后的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' |
如果由sFormat指定的控制字符串中有错误。
当格式为十进制时,如果在sFormat中指定正方向(+)。
如果转换结果超过区域。
指定了比ASCII码所需要的文字长度小的值时
如果由sFormat指定的控制字符串中有错误。
当格式为十进制时,如果在sFormat中指定正方向(+)。
如果转换结果超过区域。
指定了比ASCII码所需要的文字长度小的值时
所有用于编程此函数的输入和输出变量已在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
当变量bStart从FALSE变为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
if (bFormat) then
sFormattedString := FP_FORMAT_STRING(sFormatString,
iCurrentValue, iMin, iMax);
end_if;