我正在尝试使用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));
}
我的接收方法有问题。每次我的硬件发送字符串时,我都可以在我的索引视图中看到它们的最后一个字符。 我想知道如何创建一个接收方法来接收发布字符串的所有字符。
答案 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);
}