G
ghtghtmalone
Unregistered / Unconfirmed
GUEST, unregistred user!
问题:我从串口发送十六进制串
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 bd 24 0c 0d'
但我收到的却是十六进制串
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 3f 0c 0d'
'bd 24'变成了 '3f'
补充说明:如果用串口调试助手测试却发现结果正确。
部分代码如下:
函数说明:
Get_BccEnd(KeyStr):取得串的异或值和结束位'0d' 即得到串:
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 bd 24 0c 0d' ;
Rf_Key_Down():向串口发送串:
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 bd 24 0c 0d' ;
procedure TFrm_Key_Down.BTn_Load_KeyClick(Sender: TObject);
Var
iPOrt_RetState:integer;
KeyStr:Widestring;
Begin
Edit1.text:='139058150868';
KeyStr:='3c0e0171'+Edit1.Text+'0000'+'d1a8bd24';
Keystr:=get_BccEnd(Keystr);
iPOrt_RetState:=Rf_Key_Down(amsComm[Int_Com],keyStr);
End;
Function Get_BccEnd(BccStr:String):String;
Var
Xor_Int,i:Integer;
Bcc_Bit:String;
Begin
Xor_Int:=HexToStr(Copy(BccStr,1,2)) Xor HexToStr(Copy(BccStr,3,2));
fOR I:=3 TO Trunc(length(BccStr)/2) DO
Xor_Int:=xor_Int xor HexToStr(Copy(BccStr,2*i-1,2));
Bcc_Bit:=Inttohex(Xor_int,2);
If Length(Bcc_Bit)=1 Then
Bcc_Bit:='0'+Bcc_Bit;
Result:=BccStr+Bcc_Bit+'0D';
End;
Function Rf_Key_Down(MsComm:TMsComm;Var keyStr:Widestring):Integer;
Var
iPOrt_RetState,i:integer;
Hstr:string;
Begin
CurMSComm:=MSComm;
Hstr:=KeyStr;
For i:=1 to trunc((length(Hstr))/2) Do
Begin
Query_Card:=Chr(StrToIntDef('$'+Copy(HStr,i*2-1,2),10));
End;
CurMSComm.Output:=Query_Card[1]+Query_Card[2]+Query_Card[3]+Query_Card[4]+Query_Card[5]+Query_Card[6]+Query_Card[7]+Query_Card[8]+Query_Card[9]+Query_Card[10]+Query_Card[11]+Query_Card[12]+Query_Card[13]+Query_Card[14]+Query_Card[15]+Query_Card[16]+Query_Card[17]+Query_Card[18];
sleep(100);
End;
请问为什么会出现这种情况?如何解决!谢谢!欢迎各位提出意见和建议。
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 bd 24 0c 0d'
但我收到的却是十六进制串
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 3f 0c 0d'
'bd 24'变成了 '3f'
补充说明:如果用串口调试助手测试却发现结果正确。
部分代码如下:
函数说明:
Get_BccEnd(KeyStr):取得串的异或值和结束位'0d' 即得到串:
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 bd 24 0c 0d' ;
Rf_Key_Down():向串口发送串:
'3c 0e 01 71 13 90 58 15 08 68 00 00 d1 a8 bd 24 0c 0d' ;
procedure TFrm_Key_Down.BTn_Load_KeyClick(Sender: TObject);
Var
iPOrt_RetState:integer;
KeyStr:Widestring;
Begin
Edit1.text:='139058150868';
KeyStr:='3c0e0171'+Edit1.Text+'0000'+'d1a8bd24';
Keystr:=get_BccEnd(Keystr);
iPOrt_RetState:=Rf_Key_Down(amsComm[Int_Com],keyStr);
End;
Function Get_BccEnd(BccStr:String):String;
Var
Xor_Int,i:Integer;
Bcc_Bit:String;
Begin
Xor_Int:=HexToStr(Copy(BccStr,1,2)) Xor HexToStr(Copy(BccStr,3,2));
fOR I:=3 TO Trunc(length(BccStr)/2) DO
Xor_Int:=xor_Int xor HexToStr(Copy(BccStr,2*i-1,2));
Bcc_Bit:=Inttohex(Xor_int,2);
If Length(Bcc_Bit)=1 Then
Bcc_Bit:='0'+Bcc_Bit;
Result:=BccStr+Bcc_Bit+'0D';
End;
Function Rf_Key_Down(MsComm:TMsComm;Var keyStr:Widestring):Integer;
Var
iPOrt_RetState,i:integer;
Hstr:string;
Begin
CurMSComm:=MSComm;
Hstr:=KeyStr;
For i:=1 to trunc((length(Hstr))/2) Do
Begin
Query_Card:=Chr(StrToIntDef('$'+Copy(HStr,i*2-1,2),10));
End;
CurMSComm.Output:=Query_Card[1]+Query_Card[2]+Query_Card[3]+Query_Card[4]+Query_Card[5]+Query_Card[6]+Query_Card[7]+Query_Card[8]+Query_Card[9]+Query_Card[10]+Query_Card[11]+Query_Card[12]+Query_Card[13]+Query_Card[14]+Query_Card[15]+Query_Card[16]+Query_Card[17]+Query_Card[18];
sleep(100);
End;
请问为什么会出现这种情况?如何解决!谢谢!欢迎各位提出意见和建议。