接收了别人的一个程序,要添加一部分功能,他以前的串口通信部分用的是MSCOMM控件,我新添加的准备用SPcomm控件,这样会产生冲突吗

解决方案 »

  1.   

    顺便问一下将 senddata 放在哪里才能把数据完整的送进数据库
    数据库格式
    systime    Surface1_1    Surface1_2    Surface1_3....unit Unit1;    procedure FormShow(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure senddata;//发送数据到数据库    procedure send1;//发送命令到串口
        procedure send2;
        procedure send3;
        procedure send4;
        procedure send5;
     
        procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
        procedure Button1Click(Sender: TObject);//接受  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      Viewstring:string;
      Viewstring2:string;
      i:integer;
      abuf:array[1..4] of byte;  //水位查询命令数组 01   频率
      bbuf:array[1..4] of byte;  //水位查询命令数组 02   温度
      cbuf:array[1..4] of byte;  //水位查询命令数组 03   频率
      dbuf:array[1..4] of byte;  //水位查询命令数组 04   温度
     
       Current1_1, Current1_2, Current1_3,       // 渗压频率
     ..
      Current4_1, Current4_2, Current4_3: real;
       Surface1_1, Surface1_2, Surface1_3,    //断面渗压
     ..
       Surface4_1, Surface4_2, Surface4_3: real;
       x:string;
    z:string;
    s:string;
    a:string;
    b:string;implementation{$R *.dfm}
    //打开串口
    procedure TForm1.FormShow(Sender: TObject);
    begin
    comm1.StartComm;
    end;
    //关闭串口procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    comm1.StopComm;
    end;
    //发送数据
    //自定义的发送过程
    procedure Tform1.send1;
    var
    i:integer;
    commflg:boolean;
    begin
    viewstring:='';
    commflg:=true;
    for i:=1 to 4 do
    begin
    if not Form1.comm1.writecommdata(@abuf[i],1) then
    begin
    commflg:=false;
    break;
    end;sleep(2); {发送时字节间的延时}
    viewstring:=viewstring+inttohex(abuf[i],2)+' ';
    end;
    viewstring:='发送'+viewstring;
    memo1.lines.add(viewstring);
    if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);end;
    //自定义的发送过程
    procedure Tform1.send2;
    var
    i:integer;
    commflg:boolean;
    begin
    viewstring:='';
    commflg:=true;
    for i:=1 to 4 do
    begin
    if not Form1.comm1.writecommdata(@bbuf[i],1) then
    begin
    commflg:=false;
    break;
    end;
    sleep(2); {发送时字节间的延时}
    viewstring:=viewstring+inttohex(bbuf[i],2)+' ';
    end;
    viewstring:='发送'+viewstring;
    memo3.lines.add(viewstring);
    if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
    end;procedure Tform1.senddata3;
    var
    begin
    end;
    procedure Tform1.senddata4;
    varbegin
    end;//接收过程
    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
    var
    i:integer;
    y:integer;
    systime:Tdatetime;
    beginviewstring:='';
    move(buffer^,pchar(@rbuf)^,bufferlength);
    for i:=1 to bufferlength doviewstring:=viewstring+inttohex(rbuf[i],2)+' ';
    s:=inttohex(rbuf[3],2);
    a:='01';
    b:='02';
    c:='03';
    d:='04';
    e:='05';
    f:='06';
    g:='07';
    h:='08';
    if s=a then
    begin
    Current1_1:=strtoint('$'+inttohex(rbuf[3],2))*2;   //将字符串转换成整形再进行计算
    viewstring:='Current1_1 '+viewstring+'systime';
    memo2.lines.add(viewstring);
    memo2.Lines.add(z);
    end
    else   if s=b then
    begin
    Current1_2:=strtoint('$'+inttohex(rbuf[3],2))*2;   
    viewstring:='Current1_2 '+viewstring;
    memo4.lines.add(viewstring);end
    else   if s=c then
    begin
    Current1_3:=strtoint('$'+inttohex(rbuf[3],2))*2;  
    viewstring:='Current1_3 '+viewstring;
    memo6.lines.add(viewstring);end
    ....
    else
    begin
        messagedlg('发送失败!',mterror,[mbyes],0);
    end;
         //senddata;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    abuf[1]:=byte($31);
    abuf[2]:=byte($13);
    abuf[3]:=byte($01);
    abuf[4]:=byte($45);bbuf[1]:=byte($31);
    bbuf[2]:=byte($13);
    bbuf[3]:=byte($02);
    bbuf[4]:=byte($46);
    ....
    senddata1;{调用发送函数}
    sleep(2000);
    senddata2;
    sleep(2000);
    senddata3;
    .....end;procedure Tform1.senddata;begin
    try
        with ADOStoredProc1 do
        begin
          Parameters.Clear;
          Parameters.Refresh;
          Parameters.ParamByName('@systime').Value := now;
          Surface1_1 := Current1_1;
          Surface1_2 := Current1_2;
          Surface1_3 := Current1_3;
         ...
         
          Parameters.ParamByName('@Surface1_1').Value := Surface1_1;
          Parameters.ParamByName('@Surface1_2').Value := Surface1_2;
          Parameters.ParamByName('@Surface1_3').Value := Surface1_3;
        ..      ExecProc;
              end;  except
      // RzStatusPane1.Caption := '未能将数据送SQL Server数据库,采集失败,请重新采集!'
        end;
    end;end.