• 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;

  • 相关阅读:
    如何查看微信公众号的历史文章(微信订阅号查看历史消息)
    微信服务号有福啦 每月可以微信群发4次
    欲提高微信图文转化率 需学点如何吊胃口
    只需按一下空格键就可以标注 不用众里寻他千百度
    如何让你的微信图文转化率达到300%
    是智能手机推动windows xp系统停止服务吗
    响应式js幻灯片代码一枚
    微信公众平台回复链接可以直接访问,但不能是锚文字链接<a>标签
    如何用腾讯电脑管家备份微信聊天记录
    android版微信5.2.1更新 支持微信聊天记录备份到电脑上
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/5478233.html
Copyright © 2020-2023  润新知