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)
阅读(1085) | 评论(0) | 转发(0) |