使用c#

时间:2017-04-06 05:24:50

标签: c# .net serial-port

我想与使用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()。我可以用其他任何方式吗?

0 个答案:

没有答案