ASCII -> 二进制转换
将s2_AsciiData指定的区域中存储的ASCII代码转换为16位/32位二进制数据。转换方法由n_ConversionMethod根据s1_Control的四个控制字符指定。转换结果存储在d_BinaryData指定的区域中。
输入
控制字符串,例如 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)存储ASCII数据的起始区域
转换方法,例如 16#404
(详情请参阅下表说明)
输出
存储二进制数据的起始区域
如果由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数据的区域。
如果转换结果超过区域。
对于被逗号分隔的数据,请指定数字数据的最大值。十进制ASCII数据包括空格、符号以及小数点。数据范围受到控制字符串s1_Control的限制。
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头。
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
当bExecute设置为TRUE时,执行指令。它将2 x 4十进制ASCII字符转换为二进制数据。偏移量 = 0 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,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
IF DF(bExecute) then
F251_ATOB(s1_Control := 'D-16',
s2_AsciiData := iAscii1,
n_ConversionMethod := 16#214,
d_BinaryData => iArray2);
END_IF;