23. 使用FB_FormatString快速高效将数据格式化到指定字符串变量

程序中存在需要拼接多个字符串与数值数据时,反复嵌套与调用CONCAT函数可以完成拼接功能,如此会要求使用者组织多个CONCAT函数来完成多次拼接的动作费时费力,而TwinCAT utilities库中提供了完成该任务更加快速高效的功能块FB_FormatString


该功能块可用于将最多10个参数转换为字符串,并根据格式规范对其进行格式化,并且格式化功能块在一个PLC周期内完成(与函数类似),输出字符串在FB被调用后立即可用。

以下为占位符说明:

占位符中存在四个参数:[标志][宽度][精度][类型]。占位符的识别从“%”开始,到[类型]结束,同时使用四个参数的情况:%[标志] [宽度]. [精度] [类型]


1.类型

类型是必需的参数,类型包含一个ASCII字符,指定相关参数是否被解释为字符串、整数或浮点数等。

类型

参数类型

输出

b, B

BYTE, WORD, DWORD, REAL, SINT, INT, DINT, USINT, UINT, UDINT

二进制字符串

o, O

BYTE, WORD, DWORD, REAL, SINT, INT, DINT, USINT, UINT, UDINT

八进制字符串

u, U

BYTE, WORD, DWORD, SINT, INT, DINT, USINT, UINT, UDINT

不带符号的十进制字符串

c, C

BYTE, USINT

单字节(ASCII)字符

f, F

REAL, LREAL

浮点数字符串

d, D

BYTE, WORD, DWORD, SINT, INT, DINT, USINT, UINT, UDINT

十进制字符串(带负号)

s, S

STRING

字符串

X

BYTE, WORD, DWORD, REAL, SINT, INT, DINT, USINT, UINT, UDINT

十六进制字符串(大写)

x

BYTE, WORD, DWORD, REAL, SINT, INT, DINT, USINT, UINT, UDINT

十六进制字符串(小写)




2.精度

精度字段从(.)后开始,包含一个无符号十进制数。如果点的后面没有数值,则使用默认的精度值。

类型适配

作用

默认

BBOOUUXX, d, D

指定在输出字符串中输出多少个十进制字符(数字);

如果数字长度大于精度值,则从左边开始用零填充字符串;

★输出的字符串不会被截断。

1(无补充,完整输出为止)

c, C

无意义

输出一个字符

f, F

精度字段参数指定了小数点的位数。

参数值总是被四舍五入到相应的小数位数。

默认:6小数点位

s, S

精度字段参数指定从参数字符串中输出多少个字符。

超过精度值的字符不会被输出(具有截断效果)

完整输出

可为精度字段输入星号(*),然后通过一个参数提供所需的值



3.宽度

宽度字段包含一个无符号的十进制数值,指定输出字符串中输出的最小字符数,宽度值大于数值长度时根据对齐标志空格将被附加到输出字符串的左边或右边,直到达到所需宽度。


也可以为宽度字段参数输入一个星号(*)。然后通过一个参数提供所需的值。




4.标志

标志符

作用

作用范围

默认

-

左对齐

可与所有类型结合使用

右对齐

+

正数输出正号

只与f, F, d,D结合使用

只输出负号

0

产生的字符串将从左边开始填充零

只与fFsS结合使用

空格填充

' '

正值前有一个空格

只与fFdD结合使用

无空格

#

实现IEC或标准C的前缀。

IEC前缀:2#8#16#(默认)

C前缀:00x0X

只与b, B, o, O, x, X结合使用

GLOBAL_FORMAT_HASH_PREFIX_TYPE:= HASHPREFIX_STDC;启用C前缀类型

没有前缀。




2025.6.18 云龙 供稿