FP_ASCII_TO_HEX

ASCII -> 十六进制转换

如果触发器ENTRUE,则此FP指令会将s_Start中的十六进制ASCII HEX代码转换为十六进制字符。n_Chars指定要转换的字节数。结果存储在d中。

ASCII代码需要8位(1个字节)表示一个十六进制字符。转换时,数据长度将是ASCII代码源数据长度的一半。

参数

输入

s_Start (WORD, INT, UINT)

起始地址

n_Chars (INT, DINT, UINT, UDINT)

字节数

输出

d (WORD, DWORD)

转换字节

标注

ASCII代码的两个字符被转换为两个单字节的数字。在此过程中,高位字符和低位字符交换。四个字符作为一段数据进行转换。

表示十六进制字符的ASCII HEX代码:

十六进制字符

ASCII HEX代码

0123456789ABCDEF

16#30 16#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39 16#41 16#42 16#43 16#44 16#45 16#46

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果由n_Chars指定的字节数大于由s_Start指定的区域

  • 如果转换结果大于由d指定的数据区域

  • 如果n_Chars = 0

  • 如果指定0~F之外的ASCII字符

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果由n_Chars指定的字节数大于由s_Start指定的区域

  • 如果转换结果大于由d指定的数据区域

  • 如果n_Chars = 0

  • 如果指定0~F之外的ASCII字符

示例 有符号/无符号的16位数据:

偏移量

ASCII代码

十六进制当量

偏移量

转换的十六进制字符

s1_Start

0

16#4241

BA

Þ

d

0

16#CDAB

1

16#4443

DC

1

n_Chars

0

16#0004

2

1

3

示例 有符号/无符号的32位数据:

偏移量

ASCII代码

十六进制当量

偏移量

转换的十六进制字符

s1_Start

0

16#4241

BA

Þ

d

0

16#CDAB

1

16#4443

DC

1

n_Chars

0

16#0004

2

1

16#0000

3

2

4

示例 有符号/无符号的16位数据:

偏移量

ASCII代码

十六进制当量

偏移量

转换的十六进制字符

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

43

1

16#7856

2

16#3635

65

2

3

16#3837

87

3

n_Chars

0

16#0008

4

1

5

示例 有符号/无符号的16位数据,奇数个字符:

如果正在转换奇数个字符,将对最后转换字节的位位置0~3输入0。

偏移量

ASCII代码

十六进制当量

偏移量

转换的十六进制字符

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

43

1

16#7056

2

16#3635

65

2

3

16#3837

87

3

n_Chars

0

16#0007

4

1

5

示例

POU头

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wASCIIInput: WORD:=16#3031;
		wConversionResult: WORD:=0;
	END_VAR

POU本体

当变量bStart设置为TRUE时,执行此函数。

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_VARIN,,wASCIIInput,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_HEX!,,13,1,23,6,,?DEN?Ds_Start?Dn_Chars?AENO?Cd);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

If (bStart) then
    FP_ASCII_TO_HEX(s_Start := wASCIIInput, 
                    n_Chars := 2, 
                    d => wConversionResult);
End_if;

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