F250_BTOA

二进制 -> ASCII转换

将由s2_BinaryData指定的区域中存储的16位/32位二进制数据转换为ASCII代码。转换方法由n_ConversionMethod根据s1_Control的四个控制字符指定。转换结果存储在d_AsciiData指定的区域中。

参数

输入

s1_Control (STRING)

控制字符串

  1.  (1) D:转换为十进制ASCII数据

    H:转换为十六进制ASCII数据

  2.  (2) + 通常方向

    - 反方向

  3.  (3) 16:以16位(1字)为单位转换

    32:以32位(2字)为单位转换

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

存储二进制数据的起始区域

n_ConversionMethod (WORD, INT, UINT)

转换方法

  1.  (1) 每个转换单位的ASCII字符数
  2.  (2) 以ASCII字符为单位(8位)的偏移量
  3.  (3) 转换的16位(1字)或32位(2字)单位数

(详情请参阅下表说明)

输出

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

存储ASCII数据的起始区域

错误标志

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

  • 当格式为十进制时,在s1_Control中指定通常方向(+)。

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

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

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

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

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

  • 当格式为十进制时,在s1_Control中指定通常方向(+)。

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

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

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

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

转换方法说明,例如n_ConversionMethod = 16#0214

  1.  (1) 每个转换单位的ASCII字符数(具体限制请参阅注意)
  2.  (2) 注册内容(十六进制)
  3.  (3) 字符串(请参阅注意)
  4.  (4) 用于存储结果的以ASCII字符为单位(8位)的偏移量

    (X值不变)

  5.  (5) 用于转换的16位(1个字)或32位(2个字)单位数
  6.  (6) 注册内容(十六进制)
  7.  (7) 数值(十进制)
注释

关于每个转换单元的ASCII字符数(8位)

  • 当将16位二进制单元转换为十六进制ASCII数据时:

    范围:16#1~16#4

  • 当将32位二进制单元转换为十六进制ASCII数据时:

    范围:16#1~16#8

  • 当将二进制单元转换为十进制ASCII数据时:

    范围: 16#1~16#F

转换示例:

二进制数据

s1_ Con-trol

n_Con- version Method

结果ASCII数据

注释

数据类型

以16位字为单位的偏移量

十六进制值

D

D+1

D+2

D+3

INT, WORD

0

16#5678

16+H

16#204

'78'

'56'

'34'

'12'

通常方向。

2 x 4 ASCII字符。

1

16#1234

INT, WORD

0

16#5678

16-H

16#204

'78'

'56'

'12'

'34'

反方向。

2 x 4 ASCII字符。

1

16#1234

INT, WORD

0

16#0456

16+H

16#203

'56'

'42'

'31'

'$xx$xx'

通常方向。

2 x 3 ASCII字符。

1

16#0123

INT, WORD

0

16#0456

16-H

16#203

'45'

'61'

'23'

'$xx$xx'

反方向。

2 x 3 ASCII字符。

1

16#0123

DINT, DWORD

0

16#1234 5678

32+H

16#108

'78'

'56'

'34'

'12'

通常方向。

1 x 8 ASCII字符。

DINT, DWORD

0

16#1234 5678

32-H

16#108

'12'

'34'

'56'

'78'

反方向。

1 x 8 ASCII字符。

DINT, DWORD

0

16#00012345

32+H

16#105

'45'

'23'

'1$xx'

'$xx$xx'

通常方向。

1 x 5 ASCII字符。

DINT, DWORD

0

16#00012345

32-H

16#105

'12'

'34'

'5$xx'

'$xx$xx'

反方向。

1 x 5 ASCII字符。

'x'值不变。

示例

POU头

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

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

POU本体

bExecute设置为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 := 9 ;
        NETWORK_BODY
B(B_F,F250_BTOA!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_BinaryData?Dn_ConversionMethod?AENO?Cd_AsciiData);
B(B_VARIN,,'16-D',7,5,9,7,);
B(B_VARIN,,iArray1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iAscii1,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iAscii1: 'x1234 -56x',22,7,35,8,);
B(B_COMMENT,,Converts two 16-bit units to 2x4 decimal ASCII data. Offset = 1 ASCII character (8-bit).,2,1,35,3,);
L(1,5,3,5);
L(5,5,9,5);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

IF DF(bExecute) then
    F250_BTOA(s1_Control := '16-D', 
        s2_BinaryData := iArray1, 
        n_ConversionMethod := 16#214, 
        d_AsciiData => iAscii1);
END_IF;

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