mscomm有一个收发数据属性,设为16进制收发便可,如下:
procedure TFormMain.ReadCommByte();
var
vTmp:variant;
CodeSize:Integer;
Code:Byte;
begin
StatusBar1.Panels[1].Text:='';
CodeSize:=MsCommCall.InBufferCount;
if CodeSize>0 then begin
vTmp:=VarArrayCreate([0,CodeSize-1],varByte);
vTmp:=MsCommCall.Input;
Code:=vTmp[CodeSize-1];
end
else begin
Code:=C_None;
end;
AThreadCall.SetBackCode(Code);
case Code of
C_Idle:StatusBar1.Panels[0].Text:=Translate('C_Idle','Idle');
C_Succ:StatusBar1.Panels[0].Text:=Translate('C_Succ','Succ');
C_Err:StatusBar1.Panels[0].Text:=Translate('C_Err','Err');
C_None:StatusBar1.Panels[0].Text:=Translate('C_None','None');
else StatusBar1.Panels[0].Text:=Translate('C_Unk','UnkCode %xH',[Code]);
end;
end;
procedure TFormMain.SendIdleCode();
var
vTmp:variant;
begin
if not MsCommCall.PortOpen then begin
AddLog(Translate('IdleError','Comm closed when send idle code!'),false);
exit;
end;
vTmp:=VarArrayCreate([0,0],varByte);
vTmp[0]:=Byte(0);//the code is 0x00h
MsCommCall.Output:=vTmp;
StatusBar1.Panels[1].Text:=Translate('Idle','Idle');
end;
procedure TFormMain.ReadCommByte();
var
vTmp:variant;
CodeSize:Integer;
Code:Byte;
begin
StatusBar1.Panels[1].Text:='';
CodeSize:=MsCommCall.InBufferCount;
if CodeSize>0 then begin
vTmp:=VarArrayCreate([0,CodeSize-1],varByte);
vTmp:=MsCommCall.Input;
Code:=vTmp[CodeSize-1];
end
else begin
Code:=C_None;
end;
AThreadCall.SetBackCode(Code);
case Code of
C_Idle:StatusBar1.Panels[0].Text:=Translate('C_Idle','Idle');
C_Succ:StatusBar1.Panels[0].Text:=Translate('C_Succ','Succ');
C_Err:StatusBar1.Panels[0].Text:=Translate('C_Err','Err');
C_None:StatusBar1.Panels[0].Text:=Translate('C_None','None');
else StatusBar1.Panels[0].Text:=Translate('C_Unk','UnkCode %xH',[Code]);
end;
end;
procedure TFormMain.SendIdleCode();
var
vTmp:variant;
begin
if not MsCommCall.PortOpen then begin
AddLog(Translate('IdleError','Comm closed when send idle code!'),false);
exit;
end;
vTmp:=VarArrayCreate([0,0],varByte);
vTmp[0]:=Byte(0);//the code is 0x00h
MsCommCall.Output:=vTmp;
StatusBar1.Panels[1].Text:=Translate('Idle','Idle');
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货