usb-232 usb-485 收发端如果硬件匹配,则在逻辑上没有差别,你的问题看起来似乎是信号传输不可靠,但你又说串口助手没有问题,那就有些奇怪了

解决方案 »

  1.   

    我是使用modbus协议的主从方式的,从机接收到命令才响应,并回复相应的数据,同时,我使用定时器定时发送命令给从机,时间足够长。所以时序上应该不会有问题吧?那么冲突也就不可能了。所以想请您在说具体点
      

  2.   

    发送的数据应该是一样的,因为接收的单片机已经规定死了接收命令,我是可以接收到数据的,所以可以确定发送的数据是正确的问题就是出在我在窗口上显示的数据有时候是正确的,有时候是错误的。。单步调试发现接收到的数据长度又是正确的,就是数据从缓存取出数据就错了,,我使用了
    {
    m_ctrlComm.SetInputLen(0);
    m_ctrlComm.GetInput();
    }这个函数当做清除输入缓存的数据。这样保证下次接收不会有数据影响,所以想问问我这样可以清除吗?还是我的错误与缓存无关?希望您可以在帮帮我谢谢
      

  3.   

    m_ctrlComm.SetInputLen(0);
    这个是清除缓存区的指令,怎么能放在读数据之前?
      

  4.   

    预读缓存区用以清除残留数据,这个函数是放在每次显示完数据之后的这个不是我真正读取数据的函数,真正的读取放在
    if(2==m_ctrlComm.GetCommEvent()) { 
    Sleep(400); //延时加在这个位置
    //下面是对数据的处理
    variant_inp = m_ctrlComm.GetInput();
    safearray_inp = variant_inp;
    len = safearray_inp.GetOneDimSize();
    for(k = 0;k<len;k++)
    {
    safearray_inp.GetElement(&k,rxdata+k);   
    }
      

  5.   

    这个代码应该是放在OnComm里面把?这应该会有问题
    接收字节数到的时候可能或多次触发事件,前面数据被读走,最后一次读的数据就会不完整
      

  6.   

    这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点
      

  7.   

    这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点每接收一个字节就触发,就不用sleep,将每次接收的放入一个全局变量连接在一起。这样的问题是你不知道什么时候该结束实际上你可以按以下模式处理,而不在OnComm里接收发送
    sleep(n)//一般50-100即可
    接收
      

  8.   

    这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点每接收一个字节就触发,就不用sleep,将每次接收的放入一个全局变量连接在一起。这样的问题是你不知道什么时候该结束实际上你可以按以下模式处理,而不在OnComm里接收发送
    sleep(n)//一般50-100即可
    接收

    好的谢谢,,我试试。。现在我准备用API来写算了,,这个问题我是真心解决不了了。之前之所以使用sleep主要是在别人的电脑上面读不出正确数据,是因为当接收的字符超过8个,会多次调用中断函数,所以加了一个延时使接收完数据在处理。就解决了别人电脑上读出错误信息的问题。。非常感谢您的耐心指导。。谢谢
      

  9.   

    这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点每接收一个字节就触发,就不用sleep,将每次接收的放入一个全局变量连接在一起。这样的问题是你不知道什么时候该结束实际上你可以按以下模式处理,而不在OnComm里接收发送
    sleep(n)//一般50-100即可
    接收

    很感谢您的指导,我使用API从新编写了一下就没问题了