二进制 -> ASCII转换
将s2_BinaryData指定的区域中存储的16位/32位二进制数据转换为ASCII代码。转换方法由n_ConversionMethod根据s1_Control的四个控制字符指定。转换结果存储在d_AsciiData指定的区域中。
输入
控制字符串
H:转换为十六进制ASCII数据
- 反方向
32:以32位(2字)为单位转换
存储二进制数据的起始区域
转换方法
(详情请参阅下表说明)
输出
存储ASCII数据的起始区域
建议使用相应的FP7指令,来代替使用此F型指令:FP_BIN_TO_ASCII
如果由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数据的区域。
如果转换结果超过区域。
如果由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数据的区域。
如果转换结果超过区域。
(X值不变)
关于每个转换单元的ASCII字符数(8位)
当将16位二进制单元转换为十六进制ASCII数据时:
范围:16#1–16#4
当将32位二进制单元转换为十六进制ASCII数据时:
范围:16#1–16#8
当将二进制单元转换为十进制ASCII数据时:
范围:16#1–16#F
s1_ Control=16+H
, n_Conversion Method=16#204
通常方向。2 x 4 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#5678 |
'78' |
'56' |
'34' |
'12' |
1 |
16#1234 |
s1_ Control=16-H
, n_Conversion Method=16#204
反方向。2 x 4 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#5678 |
'78' |
'56' |
'12' |
'34' |
1 |
16#1234 |
s1_ Control=16+H
, n_Conversion Method=16#203
通常方向。2 x 3 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#0456 |
'56' |
'42' |
'31' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=16-H
, n_Conversion Method=16#203
反方向。2 x 3 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
INT、WORD |
0 |
16#0456 |
'45' |
'61' |
'23' |
'$xx$xx' |
1 |
16#0123 |
s1_ Control=32+H
, n_Conversion Method=16#108
通常方向。1 x 8 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#12345678 |
'78' |
'56' |
'34' |
'12' |
s1_ Control=32-H
, n_Conversion Method=16#108
反方向。1 x 8 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#12345678 |
'12' |
'34' |
'56' |
'78' |
s1_ Control=32+H
, n_Conversion Method=16#105
通常方向。1 x 5 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#00012345 |
'45' |
'23' |
'1$xx' |
'$xx$xx' |
s1_ Control=32-H
, n_Conversion Method=16#105
反方向。1 x 5 ASCII字符。
二进制数据 |
ASCII数据中的转换结果 |
|||||
---|---|---|---|---|---|---|
数据类型 |
以16位字为单位的偏移量 |
十六进制数 |
D |
D+1 |
D+2 |
D+3 |
DINT、DWORD |
0 |
16#00012345 |
'12' |
'34' |
'5$xx' |
'$xx$xx' |
'x'值不变。
所有用于编程此函数的输入和输出变量已在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
当bExecute设置为TRUE时,执行指令。它将两个16位单元转换为2 x 4十进制ASCII数据。偏移量 = 1 ASCII字符(8位)。
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
IF DF(bExecute) then
F250_BTOA(s1_Control := '16-D',
s2_BinaryData := iArray1,
n_ConversionMethod := 16#214,
d_AsciiData => iAscii1);
END_IF;