2017-02-20 7 views
1

Я пытаюсь разработать программу с asp.net mvc 5, которая отправляет и принимает команды из последовательного порта на стороне сервера. На самом деле, у меня есть часть оборудования, которое подключено к серверу, и я хочу отправить команду на это оборудование и получить ответ от этого.Как отправлять и получать данные из последовательного порта для серверной части в asp.net mvc

Это метод я использую для передачи данных:

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

Я думаю, что ... я так близок к Ответу. Я работаю над этой статьей https://web.archive.org/web/20130709121945/http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_- in-C_2300 _-. NET.aspx –

+0

Держитесь за ответ от меня позже сегодня. – Snoopy

ответ

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); 

    }