请问串口通信中如何发出16进制字符?(100)

  • 主题发起人 主题发起人 snowdog
  • 开始时间 开始时间
S

snowdog

Unregistered / Unconfirmed
GUEST, unregistred user!
例如我和设备通信,想发出控制字符030300010003H,在串口通信中怎么发出,谢谢。另:如果想保持一个窗口始终最大化,该添加什么程序,谢谢。
 
哎,根据你的通讯协议:例如 mscomm.output:=chr(27)+'AG';// 开始命林, 看你的通讯协议// tms:=0303 0001 0003; // 必须是双字节 hilo Hi-- Lo-- Hi-- Lo------- // 记得永远先发低部分(low),再发高部分(high)tms:=chr($03)+chr($00); // 0003tms:=tms+chr($01)+Chr($00); // 0001 0003tms:=tms+chr($03)+Char($03); // 0303 0001 0003mscomm.output:=tms;mscomm.output:=校验码; // 结素命林, 看你的通讯协议
 
up,这个主要是看你的通信协议是什么格式的,要求你发送的数据格式,头几个字符是命令接受的,中间是数据,最后是校验位。先低后高。
 
给一段我用过的代码,串口组件是MSComm://命令设置相当于你的 03 03 00 01 00 03procedure COMM_REQB;var COMM_REQBbuff : array[0..6] of byte; xx :byte; loopi:integer;begin xx:=0; COMM_REQBbuff[0] :=$02; COMM_REQBbuff[1] :=$00; COMM_REQBbuff[2] :=$03; COMM_REQBbuff[3] :=$05; COMM_REQBbuff[4] :=$00; COMM_REQBbuff[5] :=$00; for loopi:= 0 to 5 do begin xx := xx xor COMM_REQBbuff[loopi]; end; COMM_REQBbuff[6] :=xx; FillChar(ApduSendDataBuff, High(ApduSendDataBuff), 0); //StrCopy(@ApduSendDataBuff, @COMM_REQBbuff); for loopi := 0 to 6 do begin ApduSendDataBuff[loopi] := COMM_REQBbuff[loopi]; end; XorLen := 6;end;//数据送串口函数function serialsend(mscomm:TMSComm):Integer;var //errmessage:string; recvlen:Integer; i: integer; reData:array of Variant; restr: string; StrSend: string; TxBuff: OleVariant;beginif mscomm.PortOpen = false then mscomm.PortOpen := True; try StrSend := ''; //重置它的大小,为0~n,int为n的类型。 //varByte为TxBuff每一个元素的类型。 TxBuff := VarArrayCreate([0, 255],varByte); //填充元素其中ApduSendDataBuff为你定义的一个固定数组,其中有你要发的数据 StrSend := ''; for i := 0 to XorLen do begin TxBuff := ApduSendDataBuff; StrSend := StrSend + IntToHex(ApduSendDataBuff, 2) + ' '; end; WriteLog('发送命令:' + StrSend); mscomm.Output:=TxBuff;//发送数据 XorLen := 0; FillChar(ApduRecvDataBuff, High(ApduRecvDataBuff) + 1, 0); FillChar(ApduSendDataBuff, High(ApduSendDataBuff) + 1, 0); Sleep(300); if mscomm.InBufferCount > 0 then begin redata := mscomm.Input; // 接收数据 for i := 0 to vararrayhighbound(redata,1) do begin ApduRecvDataBuff := Integer(redata); restr := restr + IntToHex(Integer(redata), 2) + ' '; end; WriteLog('接收数据:' + restr); end else begin WriteLog('接收数据:' + restr); Result := 0; Exit; end; XorLen := 0;
 
function HexStrTostr(HexStr: string): string;var I: integer;begin HexStr := trim(HexStr); setlength(Result, Length(HexStr) div 2); for I := 1 to Length(HexStr) div 2 do begin Result := char(strtoint('$' + copy(HexStr, I * 2 - 1, 2))); end;end;//ApdComPortvars : string;begins := '030300010003'; s := Hexstrtostr(s);ApdComPort.Output := s;end;//Spcommvars : string;begins := '030300010003'; s := Hexstrtostr(s); Comm.WriteCommData(@s[1], Length(s));end;//mscommvars : string;begins := '030300010003'; s := Hexstrtostr(s);mscomm.output:=s;end;
 
谢谢各位的热心帮助
 

Similar threads

回复
0
查看
848
不得闲
D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
后退
顶部