串口既需要监控,又需要写数据,然后我想写数据的时候,必须使串口停掉。我是这样写的
Mscomm.enable=false;
mscomm.enable=true;.
mscomm.output="发送的指令";
发现这样写后,串口很容易延时,有时候反应不过来,我要点好几下才有反应,
该怎么样解决这个串口延时通信的问题呢

解决方案 »

  1.   

    为什么使用SPCOMM,就能解决这个问题呢?
    呵呵
      

  2.   

    我知道与控件无关,觉得是通信方面的延时问题呵呵,比如通信的时候有点不顺畅啊,我现在监控和写数据是通过对MSCOMM.ENABLE的FALSE和TRUE来实现的,总觉得这样的方法很笨啊,,你觉得呢
      

  3.   

    那你觉得我这样写是没什么问题吗?
    我是用于对硬件的寄存器的数据实时监控啊,比如我软件一起动的时候,我就要发送“RD”指令去实时读取,只要不操作,发生了onComm时间,根据指令标识符,如果指令标识符是“RD”的话,我就又再一次发送“RD”指令去读寄存器里面的数据。如果我要进行操作了,我就要写一个“WD”指令相关的命令发给串口,因为串口独占性的原因。我就首先把MSCOMM.enable=false;Mscomm.enable=true;然后再写Mscomm.output=WR相关发送指令。然后我再oncomm事件里面进行判断,如果指令符是“WD”就提示收到命令,有时候“WR”写一次就能提示了,有时候要写好几次才提示收到,就是这么回事啊,这是为什么呢?
    这是发送过程:
          OutPutStr:='@00WR00200100';
         OutPutStr:=OutPutStr+CalBcc(OutPutStr)+'*'+Chr(13);
         form1.MsComm.Enabled :=False;
         Form1.MsComm.Enabled :=True;
         Form1.MsComm.Output :=OutPutStr;
         CommandStr:='WR';这是MSCOMM接收过程
        if CommandStr='WR' then
        begin
        Mscomm.Enabled :=False;
        MsComm.Enabled :=True;
        Mscomm.Output := '@00RD01460006'+CalBcc('@00RD01460006')+'*'+chr(13);
        CommandStr:='RD';
        end;只要一处理完,“WR“这个操作就立刻再次读寄存器里面的数值
      

  4.   

    本身的PLC软件上面就是可以实时监控和往里面写数据,不过写数据的我仔细观察了一下,他也是把串口的读数据过程停掉的
      

  5.   

    "WR"接收指令,忘记写一句:showmessage'收到数据';了,呵呵