///
/// 发送数据到串口并等待接收数据
///
/// 要发送的命令
/// 等待时间
/// 返回接收到的数据
public ProcessSerialPortValue Send(string comm, int timeout = 1000)
{
// 将命令转换为字节数组
byte[] senBuf = System.Text.Encoding.Default.GetBytes(comm);
// 接收数据的缓冲区
byte[] recBuf = new byte[1024];
// 接收数据的长度
int recLen = 0;
try
{
// 清空发送缓冲区和接收缓冲区
serialPort.DiscardOutBuffer();
serialPort.DiscardInBuffer();
// 发送命令
serialPort.Write(senBuf, 0, senBuf.Length);
// 等待一段时间,让数据传输完成
Thread.Sleep(50);
// 循环读取接收缓冲区的数据
while (true)
{
// 读取缓冲区中的数据
int len = serialPort.Read(recBuf, recLen, serialPort.BytesToRead);
// 如果没有数据可读,退出循环
if (len == 0)
{
break;
}
// 更新接收到的数据长度
recLen += len;
// 更新等待时间
timeout--;
// 如果等待时间已经用完,退出循环
if (timeout < 0)
break;
}
}
catch (Exception ex)
{
// 发生异常,不做处理
}
// 将接收到的数据转换为字符串并返回
return new ProcessSerialPortValue(Encoding.Default.GetString(recBuf, 0, recLen));
}