PC与单片机通讯,单片机测试数据上报到PC,由PC端负责数据的处理和显示。控件用了COMPORT和TPAsy4 中的TAPDCOMPORT控件,都会出现以下问题:
1。程序运行的过程中(串口发送和接受数据),我随便点击任务条上其他的程序或者本程序,随意点击一段时间后(就是狂点任务条上程序),回到本程序后会发现串口没有工作了,没有发送和接受数据了,请问是什么问题?
2。程序运行中,自动连续测试,发现有时连续测试了一百多个、几十个之后串口死掉,请问是什么问题?如何解决啊?

解决方案 »

  1.   

    1..由于你的程序失去了焦点..所以才接收不到数据了..
       可以在程序里用一个Timer定时发送和接收数据...2..建议你用多线程做..
      

  2.   

    to  maming2003,
    我用的是控件的事件:代码如下:
    主要是这个事件:
    procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
    var
      block:array[0..19] of byte;//接收
      block2:array[0..19] of byte;//发送
    begin
     ApdComPort1.GetBlock(block,Count);
     case block[0] of
     $A1:begin
         ...处理数据
         ApdComPort1.PutBlock(block2,size of block2);// 发送确认信息
         imge1.canvas.textout('1111');//用图形显示
         end;
     $A2:begin
         ...
         end;
      ......
     end;
         
    end;
    我的就是在这个事件里面处理的,没有用到线程,如用线程有无例子可以参考???谢谢!!!
      

  3.   

    好像  COMPORT和TPAsy4 中的TAPDCOMPORT控件  都是用线程来发送和接收数据的,是不是???
    如果是,那么第一个问题 程序会不会失去了焦点??
      

  4.   

    可以试试COMPORT和TPAsy4 中的TAPDCOMPORT控件  不过要想程序不失去焦点..应该很难了.
      

  5.   

    狂点任务条上程序 好像会把 串口通讯程序的串口接收和发送延时,这样数据就不对了,如:发送和接收的信息如下:C8 字头的数据包要接收 10 个。
    接收:C801945D (接收的数据包)
    发送:06  (确认信息)
    接收:C8014D16
    发送:06
    接收:C8014C15
    发送:06
    接收:C8014C15C8014C15C8014C15C8014C15C8014C15C8014C15C8014C15C8014C15C8014C15 (错误了,不知道是不是PC这里来不及发应?)
    接收:C8014E17
    发送:06