zoukankan      html  css  js  c++  java
  • Delphi 之前解析串口数据

    //串口接收数据
    procedure TfrmClientMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
    BufferLength: Word);
    var
    i:integer;
    ss,ffnn:string;
    rbuf:array of byte;
    begin
    //setlength(rbuf,0);
    memo1.Lines.Add('长度:'+inttostr(bufferlength));
    setlength(rbuf,BufferLength);
    move(buffer^,pchar(rbuf)^,BufferLength);
    ss:='接收:';
    for i:=0 to bufferlength-1 do
    begin
    ss:=ss+inttohex(rbuf[i],2)+' '; //接受数据
    //showmessage(ss);
    end;
    memo1.Lines.Add(ss);
    //showmessage(inttohex(rbuf[1],1));
    if inttohex(rbuf[1],2)='43' then
    begin
    DataStream:=TMemoryStream.Create;
    DataAll:=0;
    PkAll:=0;
    PkNo:=0;
    RadioNo1:='';
    SayAddr; //发送读收音机编号命令
    end;
    if inttohex(rbuf[1],2)='A1' then
    begin
    GetRadioNo(rbuf); //读收音机编号
    SayDataAll; //发送读数据总量命令
    end;
    if inttohex(rbuf[1],2)='A4' then
    begin
    GetDataAll(rbuf); //读数据总量
    if dataall=0 then
    begin
    memo1.Lines.Add('卡的内容为空,请拔卡!');
    end else
    begin
    SayPkNo; //发送第0个数据包号
    end;

    end;
    if inttohex(rbuf[1],2)='D4' then
    begin
    GetPk(rbuf); //接收数据包
    if PkNo=PkAll then //当最后一个包接收完毕
    begin
    memo1.Lines.Add('总数据量:'+inttostr(DataAll)+'流的大小:'+inttostr(datastream.size));
    if DataAll=DataStream.Size then
    begin
    ffnn:=SaveFileName;
    DataStream.SaveToFile(SourceFileDir+ffnn); //写文件
    DataStream.Free;
    AScanSThread:=TScanSThread.CreateIt(ffnn);
    //SayFormat; //发送格式化命令
    end else
    begin
    DataStream:=TMemoryStream.Create;
    DataAll:=0;
    PkAll:=0;
    PkNo:=0;
    RadioNo1:='';
    SayAddr; //重新在进行一遍
    end;
    end else
    begin
    SayPkNo; //发送读取下一个包命令
    end;
    end;
    end;

    procedure TfrmClientMain.GetRadioNo(buf:array of byte);
    var
    i:integer;
    begin
    RadioNo1:=BytetoStrings(buf[2])+BytetoStrings(buf[3])+BytetoStrings(buf[4])+BytetoStrings(buf[5]);
    memo1.Lines.Add('收音机编号:'+RadioNo1);
    end;

    procedure TfrmClientMain.SayDataAll;
    var
    sbuf:array[1..7] of byte;
    begin
    sbuf[1]:=byte($35);
    sbuf[2]:=byte($A4); {命令号}
    sbuf[3]:=byte($00);
    sbuf[4]:=byte($00);
    sbuf[5]:=byte($00);
    sbuf[6]:=byte($00);
    sbuf[7]:=byte($58);
    senddata(sbuf);{调用发送函数}
    end;


    procedure TfrmClientMain.GetDataAll(buf:array of byte); //取得数据
    var
    s:string;
    begin
    //showmessage('###@@@!!!:'+inttohex(buf[3],2));
    s:=inttohex(buf[2],2)+inttohex(buf[3],2);//+inttohex(buf[4],2); 根据090810ctc-r-100新协议修改
    DataAll:=strtoint(HexStrToDecStr(s));
    memo1.Lines.Add('数据总量:'+inttostr(dataall));
    if (dataall mod 128)=0 then
    begin
    pkall:=DataAll div 128;
    end else
    begin
    pkall:=DataAll div 128+1;
    end;
    memo1.Lines.Add('包数:'+inttostr(pkall));
    end;

  • 相关阅读:
    nsight system
    unity 拿到管线权限的解决方案
    Erlang cowboy 入门参考
    [Erlang]Mnesia分布式应用
    erlang浅谈
    erlang 中带下划线变量的使用
    erlang 符号相关基本语法
    Erlang与ActionScript3采用JSON格式进行Socket通讯
    Erlang游戏开发-协议
    Erlang之IO编程
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/5478233.html
Copyright © 2011-2022 走看看