程序中存在需要拼接多个字符串与数值数据时,反复嵌套与调用CONCAT函数可以完成拼接功能,如此会要求使用者组织多个CONCAT函数来完成多次拼接的动作费时费力,而TwinCAT utilities库中提供了完成该任务更加快速高效的功能块FB_FormatString:
该功能块可用于将最多10个参数转换为字符串,并根据格式规范对其进行格式化,并且格式化功能块在一个PLC周期内完成(与函数类似),输出字符串在FB被调用后立即可用。
以下为占位符说明:
占位符中存在四个参数:[标志]、[宽度]、[精度]、[类型]。占位符的识别从“%”开始,到[类型]结束,同时使用四个参数的情况:%[标志] [宽度]. [精度] [类型]
类型 | 参数类型 | 输出 |
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 | 十六进制字符串(小写) |
精度字段从(.)后开始,包含一个无符号十进制数。如果点的后面没有数值,则使用默认的精度值。
类型适配 |
作用 |
默认 |
B,B,O,O,U,U,X,X, d, D |
指定在输出字符串中输出多少个十进制字符(数字); 如果数字长度大于精度值,则从左边开始用零填充字符串; ★输出的字符串不会被截断。 |
1(无补充,完整输出为止) |
c, C |
无意义 |
输出一个字符 |
f, F |
精度字段参数指定了小数点的位数。 参数值总是被四舍五入到相应的小数位数。 |
默认:6小数点位 |
s, S |
精度字段参数指定从参数字符串中输出多少个字符。 超过精度值的字符不会被输出(具有截断效果) |
完整输出 |
可为精度字段输入星号(*),然后通过一个参数提供所需的值 |
|
3.宽度
标志符 |
作用 |
作用范围 |
默认 |
- |
左对齐 |
可与所有类型结合使用 |
右对齐 |
+ |
正数输出正号 |
只与f, F, d,D结合使用 |
只输出负号 |
0 |
产生的字符串将从左边开始填充零 |
只与f、F、s、S结合使用 |
空格填充 |
' ' |
正值前有一个空格 |
只与f、F、d、D结合使用 |
无空格 |
# |
实现IEC或标准C的前缀。 IEC前缀:2#,8#,16#(默认) C前缀:0,0x,0X |
只与b, B, o, O, x, X结合使用 GLOBAL_FORMAT_HASH_PREFIX_TYPE:= HASHPREFIX_STDC;启用C前缀类型 |
没有前缀。 |
2025.6.18 云龙 供稿