static private byte[] Write(ref SerialPort comPort, byte[] data, int timeOut, int returnLength,ref string error)
{
try
{
comPort.DiscardInBuffer();//清除串口接收缓冲区数据,避免外界干扰数据被提取
comPort.Write(data, 0, data.Length);
for (int a = 0; a < timeOut; a++)
{
if (comPort.BytesToRead == returnLength)
{
byte[] buf = new byte[returnLength];
comPort.Read(buf, 0, returnLength);
return buf;
}
Thread.Sleep(1);
}
error = "数据响应超时.";
return null;
}
catch(Exception e)
{
error = e.Message;
return NullByte;
}
}
这是我项目中的代码,没有做任何修改
comPort 串口对象
data 要发送的数据
timeOut 读取超时时间(单位毫秒)
returnLength 返回数据的长度(因为已经知道要返回数据的长度,所以判断长度,如果不知道返回的长度,可以只设置它的超时参数)
error 异常信息
希望能够帮到你
加个定时器 设置通讯超时时间。如果超时无数据返回 就再发命令
定义一个int count = 0;
发送命令后count ++;
读取count就知道发送多少此命令了。
加个循环判断