小女子太笨,希望达人能够详细解答
大恩不言谢

解决方案 »

  1.   


    //串口打开: Comm1.StartComm 
    //串口关闭:Comm1.StopComm; 
    //串口接受数据: 
    procedure TFrmComm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; 
      BufferLength: Word); 
    var 
      i:integer; 
    begin 
      Viewstring:=''; 
      Move(buffer^,pchar(@rbuf)^,BufferLength); //将数据复制到rbuf处 
      for i:=4 to 10 do //根据协议解析数据 
      begin 
        Viewstring:=Viewstring+IntToStr(rbuf[i])+''; 
        Viewstring:='接收'+Viewstring; 
        Memo1.Lines.Add(Viewstring); 
        Memo1.Lines.Add(''); 
      end; 
      //Comm1.StopComm; 
    end; 
      

  2.   

    procedure TQConTC200.ComRevMSG(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
      i:Integer;
      iDetId:Integer;
      iRecNo,iTemp:Integer;
    begin
      move(buffer^,RBuf[0],BufferLength);
      //校验不正确,退出
      if not CheckOutRev then Exit;  iDetId := Ord(RBuf[2]); 按位拆分就是了。
    end;
      

  3.   

    constructor TQConBase.Create(sComName:String);
    begin
      //inherited Create(True);
      try
        //CoInitialize(nil);
        //CoInitializeEx(Nil,COINIT_MULTITHREADED);    FADOConnect := TADOConnection.Create(nil);
        FADOConnect := FDM.ADOConnect;
        //FADOConnect.ConnectionString := FDM.ADOConnect.ConnectionString;
        //FADOConnect.LoginPrompt := False;
        //FADOConnect.Open;    sName:=sComName;
        FTComm:=TComm.Create(nil);
        //FTComm:=aTComm;
        FTComm.CommName  := '\\.\'+sComName;  //解决超过十的串口问题
        FTComm.BaudRate  := 4800;
        FTComm.Inx_XonXoffFlow  := False;
        FTComm.Outx_XonXoffFlow := False;
        FTComm.ReadIntervalTimeout := 220;
        FTComm.StartComm;
      

  4.   

    P1F42发送:68 49 00 49 00 68 4A 01 00 03 00 F6 0C EC 01 01 02 05 0C 32 51 17 30 01 1C 16
       接收:68 6D 00 6D 00 68 88 01 00 03 00 F6 0C EC 01 01 02 05 01 EE EE EE EE EE EE EE EE 0C 05 00 17 20 01 3D 16
    分析:p1F42请求当日正向无功电能,数据格式见page51,费率数M=1.应答数据中,费率数=1,当日无功电能为负数,应答全部是0xEEEEEEEE。数据帧的格式都是协议里面定义好的,每个字节代表什么意思协议都规定死了!!!!