各位大侠,我在做一个485的项目,遇到一个问题,请有实际经验的兄台给予指点
上位机与下位机是主从式通讯方式,下位机由三块仪表构成,上位机采用轮询发送下位机地址的方式,地址的发送放在了一个时间间隔为2000ms的timer定时器内,具体思路上首先发送1#号机地址,然后执行一个延时函数500ms等待(这段时间间隔用来处理串口的serialPort_DataReceived事件以及UI的更新),之后再发送2#机地址,执行延时函数,……。我程序大体是这样写的,但是在调试的时候 刚运行可以收到1#号仪表的数据,之后就再收不到数了,我怀疑是不是在执行500ms延时函数的时候阻塞了线程,才导致这样,不知道这个怀疑对不对,我的上位机采用C#编写,定时器及延时函数如下:请高手给予指导。
private void timerDraw_Tick(object sender, EventArgs e)
{
if (!serialPort.IsOpen)
{
openPort();
}
string strCMD = "020300040001C5F8";//1号机地址
SendAsHex(strCMD);//十六进制发送
delayMs(500);//延时500ms
string strCMD2 = "030300040001C429";//2号机地址
SendAsHex(strCMD2);
delayMs(500);
string strCMD2 = "030300040001C429";//3号机地址
SendAsHex(strCMD2);
delayMs(500);
}
通信 485 轮询
private static void delayMs(int DelayTime)
{
int time = Environment.TickCount;
while (true)
{
if (Environment.TickCount - time >= DelayTime)
{
break;
}
Application.DoEvents();
//Thread.Sleep(10);
}
}