FP_BIN_TO_ASCII

二进制 -> ASCII转换

此FP指令将s2_BinaryData指定的区域中存储的16位/32位二进制数据转换为ASCII代码。转换方法由s1_Format的控制字符串指定。转换结果存储在d_AsciiData指定的区域中。

参数

输入

s1_Format (STRING)

引号中设置的控制和格式字符串

s2_BinaryData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

存储二进制数据的起始地址

n_Conversions (WORD, INT, UINT)

要转换的数字量:0~65535

n_AsciiDataStartPosition (INT)

ASCII数据中的起始位置:0~255

输出

d_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

存储ASCII数据的起始地址

控制代码s1_Format的每个数字的说明:

控制代码中的位置

描述

s1_Format

16位PLC

32位PLC

转换方向

     

+

正向(仅适用于带有说明符xX的十六进制数字)

'+%4X'

如果加号被省略:反(默认设置)

'%4X'

%

格式字符串说明符(必需)

 

填充格式

     

0

填充零

'%06x'

-

+

添加加号

'%+4d'

-

-

左对齐

'%-6d'

-

˽

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

'%˽4d'

-

#

对十六进制数插入0x

'%#4X'

-

始终对实数增加小数点

'%#8.0f'

-

8

ASCII数据元素的宽度

'%08d'

无宽度

  • FP_BIN_TO_ASCII:假定需要最小宽度

  • FP_ASCII_TO_BINFP_ASCII_CHECK:需要逗号分隔符

'%d,'

-

小数点之后的精确度

     

.5

小数点之后的任何数字

'%8.5f'

-

I

双长度说明符

例如:说明符i和l = Ii -> DINT

'+%4ld'

格式说明符

     

i

INT

'%10i'

u

UINT

'%10u'

-

d

INT

'%6d'

x

十六进制小写

'+%4x'

X

十六进制大写

'+%4X'

b

BCD

'+%5b'

-

f

浮点数

'+%-6.2f'

-

e

指数1.23e10

'+%9.3e'

-

E

指数大写,1.23E10

'+%9.3E'

-

g

浮点或指数

'+%12g'

-

G

浮点或指数大写

'+%9.3G'

-

  • 对于FP_BIN_TO_ASCII:任何字符串均可增加到转换,例如'PANA'

  • 对于FP_ASCII_TO_BINFP_ASCII_CHECK:仅允许使用逗号

'+%8dPANA'

-

适用于16位/32位PLC

控制字符串s1_Format的示例

  • 示例:'+%4X'将二进制值以正方向转换为宽度为四个字符的大写值(适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    16#12A

    '˽12A'

  • 示例:'%4X'将二进制值以反方向转换为宽度为四个字符的大写值(适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    16#B2A

    '˽B2A'

  • 示例:'%06d'将二进制值转换为宽度为六个字符、十进制值、带三个前导零的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    16#100

    '000100'

  • 示例:'%+4d'将二进制值转换为宽度为四个字符、十进制值、添加+号的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '+100 ˽ ˽'

  • 示例:'%-6d'将二进制值转换为宽度为六个字符、左对齐的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '100˽ ˽ ˽'

  • 示例:'%˽4d'将二进制值转换为宽度为四个字符、带一个前导空格的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '˽100'

  • 示例:'%#8.0f'将二进制值转换为宽度为八个字符、类型为浮点数、带四个前导空格的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    123.45678

    '˽ ˽ ˽ ˽123.'

  • 示例:'%8.3f'将二进制值转换为宽度为八个字符、精确到小数点之后三个字符的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    123.45599

    '˽123.456'

  • 示例:'+%10u'将二进制值转换为宽度为10个字符、带七个前导空格、格式为无符号整数的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    -100

    '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

  • 示例:'%06d'将二进制值转换为宽度为六个字符、带三个前导空格的值(适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '˽ ˽ ˽100'

    说明符之前的值的允许范围:

    说明符dldili之前,1–15

    说明符X之前,1–4

    说明符lX之前,1–8

    如果未指定宽度,则增加逗号,例如'%d,' (适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '100,'

    • FP_BIN_TO_ASCII:假定需要最小宽度

    • FP_ASCII_TO_BINFP_ASCII_CHECK:需要逗号分隔符

  • 示例:'+%4ld'将二进制值转换为宽度为四个字符的值,转换结果需要DINTDWORD(适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '˽100'

  • 示例: '+%6i'将二进制值以正方向转换为宽度为六个字符、带三个前导空格、格式为有符号整数的值 (适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    -100

    '˽ ˽ ˽-100'

  • 示例:'+%6d'将二进制值以正方向转换为宽度为六个字符、带三个前导零的值(适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '000100'

  • 示例:'+%4X'将二进制值以正方向转换为宽度为四个字符、十六进制的大写值(适用于16位/32位PLC)

    二进制数据

    ASCII数据中的转换结果

    16#12A

    '˽12A'

  • 示例:'+%5b'将二进制值转换为宽度为五个字符、类型为BCD数据的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    16#123

    '˽123'

  • 示例:'+%-6.2f'将二进制值转换为宽度为六个字符、左对齐、精确到小数点之后两位数字的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    1.2345

    '1.23˽'

  • 示例:'+%9.3e'将二进制值转换为宽度为9个字符、精确到小数点之后的3位数字、指数小写的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    1234.5678

    '1.235e+03'

  • 示例:'1.235E+03'将二进制值转换为宽度为9个字符、精确到小数点之后的3位数字、指数大写的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    1234.5678

    '1.235E+03'

  • 示例:'+%12g'将二进制值转换为宽度为12个字符、类型为浮点数的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    1234.5678

    '˽ ˽ ˽ ˽ ˽1234.57'

  • 示例:'+%9.3G'将二进制值转换为宽度为九个字符、精确到小数点之后的三个字符、类型为浮点数、指数大写的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    1234

    '˽ ˽ ˽1.E+03'

  • 对于FP_BIN_TO_ASCII:任何字符串可增加到转换

    示例:'+%8dPANA'将二进制值转换为宽度为八个字符、十进制、增加'PANA'的值(适用于32位PLC)

    二进制数据

    ASCII数据中的转换结果

    100

    '˽ ˽ ˽ ˽ ˽100PANA'

错误标志

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

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

  • 当由s1_Format指定十六进制格式时,如果由n_Conversions指定的每个转换单元的ASCII字符数超过4(对于16位数据)或8(对于32位数据)。

  • 如果在n_Conversions中对要转换的16位或32位(1或2个字)单元数指定0。

  • 如果由n_Conversions指定的要转换的16位或32位十进制数的数量超过存储ASCII数据的区域。

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

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

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

  • 当由s1_Format指定十六进制格式时,如果由n_Conversions指定的每个转换单元的ASCII字符数超过4(对于16位数据)或8(对于32位数据)。

  • 如果在n_Conversions中对要转换的16位或32位(1或2个字)单元数指定0。

  • 如果由n_Conversions指定的要转换的16位或32位十进制数的数量超过存储ASCII数据的区域。

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

示例

POU头

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

	VAR
		bStart: BOOL:=FALSE;
		iArray1: ARRAY [0..1] OF INT:=[1234,-56];
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

POU本体

当变量bStartFALSE变为TRUE时,执行此函数。它将两个16位单元转换为2 x 4十进制ASCII数据。偏移量 = 1 ASCII字符(8位)。

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_VARIN,,'%4d',10,5,12,7,);
B(B_VARIN,,iArray1,10,6,12,8,);
B(B_VARIN,,2,10,7,12,9,);
B(B_VAROUT,,iAscii1,25,5,27,7,);
B(B_CONTACT,,bStart,7,4,9,6,R);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,5,1,38,3,);
B(B_F,FP_BIN_TO_ASCII!,,12,3,25,10,,?DEN?hs1_Format?ds2_BinaryData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_AsciiData);
B(B_VARIN,,1,10,8,12,10,);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',28,8,41,9,);
L(9,5,12,5);
L(1,5,7,5);
L(1,0,1,10);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF DF(bStart) then
    FP_BIN_TO_ASCII(s1_Format := '%4d', 
        s2_BinaryData := iArray1, 
        n_Conversions := 2, 
        d_AsciiData => iAscii1);
END_IF;

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