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

时间:2017-02-20 14:11:57

标签: asp.net-mvc asp.net-mvc-5 serial-port server-side

我正在尝试使用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));

    }

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

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。 这是关于串口发送速度的干扰和服务器接收(计算)速度! 您应该在“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);  

    }