F251_ATOB

ASCII -> 二进制转换

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

参数

输入

s1_Control (STRING)

控制字符串,例如 D-16

  • D 转换十进制ASCII数据
  • H 转换十六进制ASCII数据
  • + 通常方向
  • - 反方向
  • 16 将ASCII数据转换为16位数据,-32,768至+32,767(16#0至16#FFFF)
  • 32 将ASCII数据转换为32位数据 -2,147,483,648至+2,147,483,647(16#0至16#FFFFFFFF)
s2_AsciiData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

存储ASCII数据的起始区域

n_ConversionMethod (WORD, INT, UINT)

转换方法,例如 16#404

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

(详情请参阅下表说明)

输出

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

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

错误标志

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数据的区域。

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

转换方法说明,例如ASCII数据'0123456789012'n_ConversionMethod = 16#0413

对于被逗号分隔的数据,请指定数字数据的最大值。十进制ASCII数据包括空格、符号以及小数点。数据范围受到控制字符串s1_Control的限制。

  1.  (1) 每个转换单位的ASCII字符数
  2.  (2) 注册内容(十六进制)
  3.  (3) 字符串
  4.  (4) 用于存储结果的以ASCII字符为单位(8位)的偏移量
  5.  (5) 用于转换的16位(1个字)或32位(2个字)单位数

ASCII数据'0123456789ABCDEF'的转换示例

n_Conversion 方法

s1_ Control

ASCII数据

二进制数据

注释

数据类型

偏移量1)

十六进制值

 

H+16

16#404

D:'01'

D+1:'23'

D+2:'45'

D+3:'67'

D+4:'89'

D+5:'AB'

D+6:'CD'

D+7:'EF'

INT, WORD

0

16#2301

通常方向

4 x 4 ASCII字符

1

16#6745

2

16#AB89

3

16#EFCD

H-16

16#404

INT, WORD

0

6#0123

反方向

4 x 4 ASCII字符

1

16#4567

2

16#89AB

3

16#CDEF

H+16

16#403

INT, WORD

0

16#*201

通常方向

3 x 4 ASCII字符

1

16#*534

2

16#*867

3

16#*B9A

H-16

16#403

INT, WORD

0

16#*012

反方向

3 x 4 ASCII字符

1

16#*345

2

16#*678

3

6#*9AB

H+32

16#208

DINT, DWORD

0

16#67452301

通常方向

8 x 2 ASCII字符

2

16#EFCDAB89

H-32

16#208

DINT, WORD

0

16#01234567

反方向

8 x 2 ASCII字符

2

16#89ABCDEF

H+32

16#205

DINT, DWORD

0

16#***42301

通常方向

5 x 2 ASCII字符

2

16#***97856

H-32

16#205

DINT, DWORD

0

16#***01234

反方向

5 x 2 ASCII字符

2

16#***56789

1) 16位字单元中的偏移量

*其他字符变为'0'。

示例

POU头

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

	VAR
		bExecute: BOOL:=FALSE;
		iArray2: ARRAY [0..1] OF INT:=[2(0)];
			(*Begin ASCII: _1,23,04,-5,6_*)
		iAscii1: ARRAY [0..4] OF WORD:=[5(16#FFFF)];
	END_VAR

POU本体

bExecute设置为TRUE时,执行指令。它将2 x 4十进制ASCII字符转换为二进制数据。偏移量 = 0 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,F251_ATOB!,Instance,9,3,21,9,,?DEN?Ds1_Control?Ds2_AsciiData?Dn_ConversionMethod?AENO?Cd_BinaryData);
B(B_VARIN,,'D-16',7,5,9,7,);
B(B_VARIN,,iAscii1,7,6,9,8,);
B(B_VARIN,,16#214,7,7,9,9,);
B(B_VAROUT,,iArray2,21,5,23,7,);
B(B_CONTACT,,bExecute,3,4,5,6,R);
B(B_COMMENT,,Result iArray2: [1234~-56],22,7,35,8,);
B(B_COMMENT,,Converts 2x4 decimal ASCII data to binary data. Offset = 1 ASCII character (8-bit).,2,1,35,2,);
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
    F251_ATOB(s1_Control := 'D-16', 
    s2_AsciiData := iAscii1, 
    n_ConversionMethod := 16#214, 
    d_BinaryData => iArray2);
END_IF;

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