C++爱好者 - 网友留言

1103阅读 0评论2008-12-17 3JTwF2T
分类:

Victor: 你好!
   我在多机通讯时遇到些问题,请指教!
1.下面程序中:有 delay_ms() 的语句都不能省略, 特别在 commSelectAddress 时,若省掉delay_ms
  则 Mark,Space效验位根本不能够更改过来, 请问这是为什么?
2.  我想发送 1000 个字节数据到串口,等待回应 num 个字节, 回应不对? 请问该如何做才好?
3. 在发送完 1000 个字节后, 固定延时很讨厌的, 时间总要人为调节, 为何不能省掉延时直接去等待串口的回应?
  有更好的办法吗?

部分程序如下:

//全局定义缓从区
unsigned char inbuf[8192]; //收到的字节数不会超过串口缓存的容量, 所以分配一个缓存容量相同的Buf
unsigned char outbuf[8192];

//发送 1000 个字节数据到串口,等待回应 num 个字节
int __fastcall TSDIAppForm::SnedDataToComm(int num)
{
    long t0ms;

    if (commSelectAddress(Address)) {  //多机通讯选择地址
       YbCommDevice1->Write(outbuf, 1000);
       delay_ms(2000);

       t0ms = GetTickCount();
       for (; (GetTickCount()-t0ms)            count = YbCommDevice1->Read(inbuf, num);
            if (count==num) break;      //收到 num 个字节后退出
        Application->ProcessMessages() ;
       }
    }
}

int __fastcall TSDIAppForm::commSelectAddress(Byte &Address)
{
    if (!setCommParity(ptMarkParity)) return 0;
    delay_ms(50);
    YbCommDevice1->Write(&Address,1);
    delay_ms(50);
    if (!setCommParity(ptSpaceParity)) return 0;
    return 1;
}


int delay_ms(unsigned long time)
{
    long t0ms = GetTickCount();
    for (; (GetTickCount()-t0ms)        Application->ProcessMessages() ;
    }
}



--------------------next---------------------

上一篇:C++爱好者 - 网友留言
下一篇:C++爱好者 - 网友留言