【发布时间】:2015-10-27 15:18:56
【问题描述】:
我被难住了。脸色发青——不行。
我正在尝试与一个设备建立串行通信,该设备每 1 秒连续发送 2 个不同的数据块(一个接一个)。第一个块以“PID”开头,第二个块以“H18”结尾。
我只需要每 5 秒阅读一次。
我的问题有两个:
- 我不知道/控制什么时候开始读取并且经常在块中间开始。
- 我无法控制开始和结束周期,以确保我获得完整的两个块,因为我需要两个块。
两个块总共大约 200 个字符,开头没有 /r,各个项目之间有 /r/n。
我已尝试进行两次后续读取,但均未成功。尝试使用 StartsWith 和 EndsWith 进行游戏,但无法识别?代码已经遍布整个节目,但这里是我目前工作的基础:
static void DataReceivedHandlerbat(object sender, SerialDataReceivedEventArgs e)
{
var batm = sender as SerialPort;
if ((batm != null) && (!_gotResponse))
{
while (stringb.Length < 200)
{
byte[] buffer = new byte[batm.BytesToRead];
int numRead = batm.Read(buffer, 0, buffer.Length);
stringb.Append(System.Text.Encoding.ASCII.GetString(buffer));
// if (stringb.S == 0)
//{
// _gotResponse = true;
// break;
//}
}
}
}
和
/// Obtain Battery string
SerialPort batm = new SerialPort();
batm.PortName = "com4";
batm.BaudRate = 19200;
batm.DataBits = 8;
batm.Parity = Parity.None;
batm.StopBits = StopBits.One;
batm.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandlerbat);
batm.Open();
//batm.ReadExisting();
int timeoutMsb;
timeoutMsb = 1000;
var startTimeb = DateTime.Now;
while (!_gotResponse && ((DateTime.Now - startTimeb).TotalMilliseconds < timeoutMsb))
{
Thread.Sleep(20);
}
batm.Close();
_gotResponse = false;
//Build Battery String
String bat = stringb.ToString();
请帮助我 - 我对 C# 还很陌生,并且为此苦苦挣扎了 4 天?
【问题讨论】:
标签: c# .net serial-port