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数据的起始地址

16位PLC的控制字符串s1_Format的说明和示例

s1_Format:例如+%08lX

示例中的位置

描述

s1_Format

二进制数据

ASCII数据中的转换结果

注释

+

正(仅限十六进制数)

'+%4X'

16#B2A

'2AB'

正方向(仅适用于说明符xX

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

'%4X'

16#B2A

'B2A'

反方向

%

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

填充格式

0

填充零

'%06x'

16#100

'000100'

宽度六个字符,十进制值,带三个前导零(不允许用于说明符id,必需用于说明符xX

8

ASCII数据元素的宽度

'%06d'

100

'100'

宽度六个字符,包含三个前导空格

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

  • 说明符dldili之前,1–15

  • 说明符X之前,1–4

  • 说明符lX之前,1–8

I

双长度说明符

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

'+%4Id'

100

'100'

宽度四个字符,对于转换结果需要DINTDWORD

格式说明符

i

INT

'%6i'

-100

'-100'

宽度六个字符,三个前导空格,带符号整数

d

INT

'%6d'

100

'000100'

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

X

十六进制大写

'%4X'

16#12A

'12A'

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

32位PLC的控制字符串s1_Format的说明和示例

s1_Format:例如+%#12.5lxBCD

示例中的位置

描述

s1_Format

二进制数据

ASCII数据中的转换结果

注释

+

正(仅限十六进制数)

'+%4X'

16#B2A

'2AB'

正方向(仅适用于说明符xXb

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

'%4X'

16#B2A

'B2A'

反方向

%

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

填充格式

0

填充零

'%06d'

100

'000100'

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

+

添加加号

'%+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个字符,带九个前导零

无宽度:

  • FP_BIN_TO_ASCII:假定需要最小宽度

  • FP_ASCII_TO_BINFP_ASCII_CHECK:需要逗号分隔符

'%d,'

100

100,

未指定宽度,增加逗号

小数点之后的精确度

.5

小数点之后的任何数字

'%8.3f'

123.45599

'123.456'

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

双长度说明符

I

加倍说明符的长度

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

'+%4Iu'

100

'100'

宽度四个字符,对于转换结果需要DINTDWORD

格式说明符

i

INT

'%10i'

-100

'-100'

宽度10个字符,六个前导空格,带符号整数

u

UINT1)

'%10u'

-100

'100'

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

d

INT

'%6d'

100

'000100'

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

x

十六进制小写

'%4x'

16#12A

'12a'

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

X

十六进制大写1)

'%4X'

16#12A

'12A'

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

b

BCD

'%5b'

16#123

'123'

宽度五个字符,BCD数据

f

浮点

'%-6.2f'

1.2345

'1.23'

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

e

指数1.23e10

'%9.3e'

1234.5678

'1.235e+03'

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

E

指数大写,1.23E10 1)

'%9.3E'

1234.5678

'1.235E+03'

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

g

浮点或指数1)

'%12g'

1234.5678

'1234.57'

宽度12个字符,浮点数

G

浮点或指数大写1)

'%#9.3G'

1234

'1.E+03'

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

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

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

'%8dPANA'

100

'100PANA'

宽度八个字符,十进制数,增加'PANA'

1) FP指令FP_ASCII_TO_BINFP_ASCII_CHECK不区分大小写

错误标志

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;

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