Получение ответа от сом порта

276
16 августа 2017, 15:56

Настраиваю порт, отправляю запрос. Для обработки ответа использую событие data received. Проблема в том, что ответ приходит не корректный, либо не полный, либо его совсем нет. В чем причина? Без события приходит корректный ответ с таймером в 30-50 мск. А Если использовать событие то ответ не полный.

public void SendRequestPort_K()
{    
    if (portKDD.IsOpen)
    {                  
         threadK = new Thread(new ParameterizedThreadStart(_WritePortK));
         portKDD.DiscardInBuffer();
         portKDD.DiscardInBuffer();
         portKDD.DataReceived += 
         new SerialDataReceivedEventHandler(portKDD_DataReceived);
         threadK.Start(_numberK);
         while (!threadK.IsAlive) ;
    }
}
public void SetSettingPort()
{       
    portKDD = new SerialPort();
    portKDD.PortName = "COM3";
    portKDD.BaudRate = 19200;
    portKDD.DataBits = 8;
    portKDD.Handshake = Handshake.None;
    portKDD.Parity = Parity.None;
    portKDD.StopBits = StopBits.One;
}
private void _WritePortK(object _numberK)
{       
    portKDD.DiscardInBuffer();
    portKDD.DiscardOutBuffer();  
    int numberK = Int32.Parse(_numberK.ToString());
    int lengthByte = 0;
    Request Request = new Request();
    Request.CreatePack_0x03_0х04("000", K[numberK], 0 , 0x04, new byte[] { 0x00, 0x00 }, new byte[] { 0x00, 0x02 }); //формирую запрос
    portKDD.Write(Request.pack.ToArray(), 0, 
    Request.pack.ToArray().Length);// идет запрос 1 4 0 0 0 2 crc1 crc2
    Thread.Sleep(30);
    //int flag = portKDD.BytesToRead; 
    //if (flag != 0)
    //{    
           byte[] _bytes = new byte[100];
           lengthByte = portKDD.Read(_bytes, 0, 100);
    //}
    numberK++;
    if(number<31)
        _WritePortK(numberK)
    else    
        threadK.Abort();
}
void portKDD_DataReceived(object sender, SerialDataReceivedEventArgs e)
{      
     //int flag = portKDD.BytesToRead; 
     //if (flag != 0)
     //{
           //byte[] _bytes = new byte[100];
           //lengthByte = portKDD.Read(_bytes, 0, 100);
     //}
     //portKDD.DiscardInBuffer();
     //portKDD.DiscardInBuffer();
}
READ ALSO
Расположение ключей и значений Request.Params

Расположение ключей и значений Request.Params

Есть в проекте вот такая вот строчка

260
Путь к папке для хранения файлов приложения. Xamarin Android

Путь к папке для хранения файлов приложения. Xamarin Android

Я знаю, что у андройд приложений есть папка, к которой имеет доступ только само приложение и системаОна удаляется вместе с приложением

465
Кнопка UncheckAll в заголовке datagridcheckboxcolumn

Кнопка UncheckAll в заголовке datagridcheckboxcolumn

Как сделать кнопку в заголовке datagridcheckboxcolumn которая убирает все галочки в колонке?

205
Проверить есть ли запись в MySQL

Проверить есть ли запись в MySQL

Подскажите пожалуйста, как проверить есть ли конкретное значение в базе данных MySQL? Нужно реализовать метод на C# с проверкойНапример, есть...

232