本人笔记本电脑用的是虚拟串口软件虚拟的串口 1端口发送 2端口接收 数据接收不了 但能发送  接收程序如下
procedure TMain_form.MSComm1Comm(Sender: TObject);
begin
  if  MSComm1.CommEvent=2   then
  begin
  recstr:=MSComm1.Input;
  for Tempindex:=0 to  (Linecount-1) do
      begin
      Line[Tempindex].Line_tab_id :=strtoint(copy(Recstr,Tempindex*8+1,3));
      line[Tempindex].Line_DY := strtoint(copy(Recstr,Tempindex*8+5,3));
      if line[Tempindex].Line_DY>=245 then
         begin
         data_form.AddBj_tab.Active :=false;
         data_form.AddBj_tab.SQL.Text :='insert into BJ_tab(sj,XL_Tab_ID,DY,BJXX)values('+#39+formatdatetime('yyyy-mm-dd hh:mm:ss',TempDatetime)+#39+','+inttostr(line[Tempindex].Line_tab_id)+','+inttostr(line[Tempindex].Line_DY)+','+#39+'电压越上限'+#39+')';
         data_form.AddBj_tab.ExecSQL;
         end
         else
         if line[Tempindex].Line_DY<=190 then
            begin
            data_form.AddBj_tab.Active :=false;
            data_form.AddBj_tab.SQL.Text :='insert into BJ_tab(sj,XL_Tab_ID,DY,BJXX)values('+#39+formatdatetime('yyyy-mm-dd hh:mm:ss',TempDatetime)+#39+','+inttostr(line[Tempindex].Line_tab_id)+','+inttostr(line[Tempindex].Line_DY)+','+#39+'电压越下限'+#39+')';
            data_form.AddBj_tab.ExecSQL;
            end;
      end;
  Memo1.Lines.Add('接收数据:'+copy(recstr,1,length(recstr)-1));
  end;
end;procedure TMain_form.N1com11Click(Sender: TObject);
begin
if MSComm1.PortOpen then MSComm1.PortOpen := false;//关闭端口
MSComm1.CommPort := 2;//设置端口2
MSComm1.InBufferSize := 256;//设置接收缓冲区为256个字节
MSComm1.OutBufferSize := 256;//设置发送缓冲区为256个字节
MSComm1.Settings := '9600,n,8,1';//9600波特率,无校验,8位数据位,1位停止位
MSComm1.InputLen := 0;//读取缓冲区全部内容(32个字节)
MSComm1.InBufferCount := 0;// 清除接收缓冲区
MSComm1.OutBufferCount:=0;// 清除发送缓冲区
MSComm1.RThreshold := 64;//设置接收32个字节产生OnComm 事件
MSComm1.InputMode := comInputModeText;//文本方式
N1com11.Checked :=true;
comstr:='COM2';
end; 

解决方案 »

  1.   

    试了 接收没问题  
    我的程序包括两部分 一个串口发送部分  一个接收并显示分析部分。  串口发送部分运行正常 ,用com1 发送 的时候 ,下载的一个串口调试软件用com2能接收到数据。但一用自己写的程序接收时就出现错误了,是不是代码写的有问题? 可是编译了 也没提示错误啊。
      

  2.   

    你上面那一段是什么程序if MSComm1.PortOpen then MSComm1.PortOpen := false;//关闭端口
    语法不对也就算了。下面也没打开串口,在下面加上试下
    MSComm1.PortOpen then MSComm1.PortOpen := Open
      

  3.   

    MSComm1.PortOpen then MSComm1.PortOpen := Open
    [/Quote]这个语法不对吧? 上面那段程序使用Memo显示接收到的数据 并将异常数据存入数据库报警
      

  4.   

    建议你换个控件,用spcomm试一下.
    我用MSCOMM也是碰到这个错误,但用API写的一个测试程序就没问题.
      

  5.   

    直接采用线程用WINAPI控制串口,要好过这些控件啊。