FP_ASCII_TO_BIN

ASCII -> 二进制转换

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

注释

FP指令FP_ASCII_TO_BINFP_ASCII_CHECK不区分大小写

参数

输入

s1_Format (STRING)

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

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

存储ASCII数据的起始地址

n_Conversions (WORD, INT, UINT)

要转换的数字量:0~65535

n_AsciiDataStartPosition (INT)

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

输出

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

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

控制代码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'以正方向转换宽度为四个字符的大写ASCII(适用于16位/32位PLC)

    ASCII数据

    二进制数据中的转换结果

    '˽12A'

    16#12A (以十六进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽B2A'

    16#B2A (以十六进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '000100'

    16#100 (以十六进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '+100 ˽ ˽'

    100(以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '100˽ ˽ ˽'

    100 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽100'

    100 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽ ˽ ˽ ˽123.'

    123.45678 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽123.456'

    123.45599 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽ ˽ ˽ ˽ ˽ ˽ ˽100'

    -100 (以十进制格式显示)

  • 示例:'%06d'转换宽度为六个字符、带三个前导空格的ASCII(适用于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'转换宽度为四个字符的ASCII值,转换结果需要DINTDWORD(适用于16位/32位PLC)

    ASCII数据

    二进制数据中的转换结果

    '˽100'

    100 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽ ˽ ˽-100'

    -100 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '000100'

    100 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽12A'

    16#12A (以十六进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽123'

    16#123 (以十六进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '1.23˽'

    1.2345 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '1.235e+03'

    1234.5678 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '1.235E+03'

    1234.5678 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽ ˽ ˽ ˽ ˽1234.57'

    1234.5678 (以十进制格式显示)

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

    ASCII数据

    二进制数据中的转换结果

    '˽ ˽ ˽1.E+03'

    1234 (以十进制格式显示)

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

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

    ASCII数据

    二进制数据中的转换结果

    '˽ ˽ ˽ ˽ ˽100PANA'

    100 (以十进制格式显示)

错误标志

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;
		sExample1: STRING[32]:='*1234,5678,';
		arrayValuesExample1: ARRAY [0..1] OF UINT:=[2(0)];
	END_VAR

POU本体

bStart设置为TRUE时,执行指令。它将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 := 8 ;
        NETWORK_BODY
B(B_VARIN,,'%d~',26,2,28,4,);
B(B_VARIN,,2,26,4,28,6,);
B(B_VARIN,,1,26,5,28,7,);
B(B_VAROUT,,arrayValuesExample1,41,2,43,4,);
B(B_F,Adr_Of_VarOffs_I!,,14,2,23,6,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sExample1,12,3,14,5,);
B(B_VARIN,,2,12,4,14,6,);
B(B_F,FP_ASCII_TO_BIN!,,28,0,41,7,,?DEN?hs1_Format?ds2_AsciiData?dn_Conversions?dn_AsciiDataStartPosition?AENO?cd_BinaryData);
B(B_CONTACT,,bStart,5,1,7,3,);
L(23,4,28,4);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

If (bStart) then
    FP_ASCII_TO_BIN(s1_Format := '%d,',
                s2_AsciiData := Adr_Of_VarOffs(Var := sExample1, Offs := 2),
                n_Conversions := 2, 
                n_AsciiDataStartPosition := 1,
                d_BinaryData => arrayValuesExample1);
End_if;

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