我想与使用RS232-USB端口的机器进行串口通信。 我正在使用串口类。我对这个概念很新。在我的第一台机器接口中,我只需要执行serialport.readLine(从机器获取读数,而不需要发送ACK / NAK)。但对于新的机器界面,文档说明了以下内容:
The following is an example of the RA500 communication:
Computer :<05h 31h 0dh>
RA500 :1st line of information
Computer :<06h 0dh>
RA500 :2nd line of information
Computer :<06h 0dh>
RA500 :”EOF”<0dh>
我从中理解的是,我必须在阅读之前写下来。这就是我在我的代码中所做的事情:
ACK = "06 0d"; NAK = "15 0d"; str = "05 31 0d";
while (count <= 5)
{
rx = ComPortDataReceived(str);
if (!string.IsNullOrEmpty(rx))
{
str = ACK;
returnReading += rx;
}
else if (string.IsNullOrEmpty(rx)) str = NAK;
count++;
}
private string ComPortDataReceived(string str)
{
string Rx = string.Empty;
string exceptionMessage = string.Empty;
try
{
byte[] bytes = str.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
comPort.Write(bytes, 0, bytes.Length);
Rx = comPort.ReadExisting();
PEHRsLibrary.writeTextFile(DateTime.Now + " RxString :" + Rx);
return Rx;
}
catch(Exception e){}
当我使用此代码时,我收到空字符串作为响应。但是如果我只使用comPort.ReadExisting()而不使用comPort.Write我会收到一个包含所有读数的字符串,但问题是它只提供一行信息而dosnt给出第二或第三行读数。
当我尝试在Write()之后使用comPort.ReadLine()时,我收到超时异常。
我不知道在这种情况下我做错了什么。我在收到第一线但未收到第二线后写ACk。接下来我将尝试将read()作为字节,然后将其转换为字符串而不是使用ReadExisting()。我可以用其他任何方式吗?