asp.net mvc 如何从服务器端的串口发送和接收数据

How to send and receive data from serial port for server side in asp.net mvc

我正在尝试使用 asp.net mvc 5 开发一个程序,该程序从服务器端的串行端口发送和接收命令。实际上,我有一个连接到服务器的硬件,我想向这个硬件发送命令并从中获得响应。

这是我用来发送数据的方法:

public static void SendData(string data )
{
    SerialPort port = new SerialPort(
    "COM5", 9600, Parity.None, 8, StopBits.One);


    port.Open();


    port.Write(data);




    port.Close();
}

这是我的接收方法:

public static void ReceiveData()
    {
        if (port != null && port.IsOpen)
            port.Close();
        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);


        port.Open();


    }
    public static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        int dataLength = port.BytesToRead;
        byte[] data = new byte[dataLength];
        int nbrDataRead = port.Read(data, 0, dataLength);
        if (nbrDataRead == 0)
            return;


        Taxi.Controllers.ReceiveController.Decision(System.Text.Encoding.UTF8.GetString(data));

    }

我的接收方法有问题。每次我的硬件发送字符串时,我只能在索引视图中看到它们的最后一个字符。 我想知道如何创建一个接收方法来接收发布字符串的所有字符。

我终于找到了答案。 这是关于串口发送速度和服务器接收(计算)速度的干扰! 您应该在 "port_DataReceived" 方法的第一行设置睡眠时间,如您所见:

public static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {

        Thread.Sleep(TimeSpan.FromMilliseconds(100));
        int dataLength = port.BytesToRead;
        char[] result = new char[dataLength];

        for (int len = 0; len < result.Length;)
        {


            len += port.Read(result, len, result.Length - len);
        }
        string send = "";
        for (int i = 0; i < result.Length; i++)
        {
            send += result[i];
        }

        Taxi.Controllers.ReceiveController.Decision(send);  

    }