Метод библиотеки FTD2XX_NET FTDI.Read

177
08 ноября 2018, 07:00

Уже 3-й день бьюсь над проблемой чтения данных с устройства используя библиотеку FTD2XX_NET. Суть проблему, что чтение выполняется только один раз. При попытке записать - считать еще раз буфер чтения равен 0. Как произвести циклически операции чтения - записи.

            myFtdiDevice.Close(); // закрываем, ели друг забыли закрыть
            // Открываем порт 
            ftStatus = myFtdiDevice.OpenBySerialNumber(SerialN);
            if (ftStatus != FTDI.FT_STATUS.FT_OK)
              {
                  MessageBox.Show("Не могу открыть прибор (error " + ftStatus.ToString() + ")", "Соединение", MessageBoxButtons.OK, MessageBoxIcon.Error);
              }
          else
          {
            ftStatus = myFtdiDevice.SetTimeouts(100, 100);
            ftStatus = myFtdiDevice.SetBaudRate(250000);
            ftStatus = myFtdiDevice.SetDataCharacteristics(FTDI.FT_DATA_BITS.FT_BITS_8, FTDI.FT_STOP_BITS.FT_STOP_BITS_2, FTDI.FT_PARITY.FT_PARITY_NONE);
            //ftStatus = myFtdiDevice.Purge(FTDI.FT_PURGE.FT_PURGE_RX);
            myFtdiDevice.SetDTR(false);
            myFtdiDevice.SetRTS(false);
            const UInt32 numBytesToRead = 1;
            UInt32 numBytesAvailable = 0;
            UInt32 numBytesRead = 0;
            //  MessageBox.Show("Соеденились с прибором:  " + ftdiDeviceList[ind].SerialNumber.ToString(), "Соединение", MessageBoxButtons.OK, MessageBoxIcon.Information);
            // Чтение даты
            UInt32 NumBytesWriten = 8;
            // Читаем размер журнала
            writeFTDI[0] = 0x80;
              writeFTDI[1] = 0xD2;
              writeFTDI[2] = 0x00;
              writeFTDI[3] = 0x00;
              writeFTDI[4] = 0x00;
              writeFTDI[5] = 0x00;
              writeFTDI[6] = 0x00;
              writeFTDI[7] = (byte)(writeFTDI[1] ^ writeFTDI[2] ^ writeFTDI[3] ^ writeFTDI[4] ^ writeFTDI[5] ^ writeFTDI[6] ^ writeFTDI[7] ^ writeFTDI[0]);
              ftStatus =  myFtdiDevice.Write(writeFTDI, 8,ref NumBytesWriten);
             System.Threading.Thread.Sleep(100);

              // Wait until the desired number of bytes have been received.
               numBytesAvailable = 0;
              while (numBytesAvailable < numBytesToRead)
              {
                  ftStatus = myFtdiDevice.GetRxBytesAvailable(ref numBytesAvailable);
              }
             numBytesRead = 0;
            byte[] buffer = new byte[numBytesAvailable];
            ftStatus = myFtdiDevice.Read(buffer, numBytesAvailable, ref numBytesRead);
            myFtdiDevice.Purge(FTDI.FT_PURGE.FT_PURGE_TX);
            System.Threading.Thread.Sleep(100);
            int timestamp = ret(buffer[3], buffer[4], buffer[5], buffer[6]) + 10800;
            string date = (new DateTime(2010, 1, 1, 0, 0, 0, 0)).AddSeconds(timestamp).ToString("dd/MM/yyyy HH:mm:ss");
            label1.Text = "Текущая дата прибора " + date;
            System.Threading.Thread.Sleep(100);

Следующие запись-чтение уже не срабатывают. На порт данные уходят, но ничего не приходит

            // Читаем размер журнала
            writeFTDI[0] = 0x80;
            writeFTDI[1] = 0xD5;
            writeFTDI[2] = 0x00;
            writeFTDI[3] = 0x00;
            writeFTDI[4] = 0x00;
            writeFTDI[5] = 0x00;
            writeFTDI[6] = 0x00;
            writeFTDI[7] = (byte)(writeFTDI[1] ^ writeFTDI[2] ^ writeFTDI[3] ^ writeFTDI[4] ^ writeFTDI[5] ^ writeFTDI[6] ^ writeFTDI[7] ^ writeFTDI[0]);
            ftStatus = myFtdiDevice.Write(writeFTDI, 8, ref NumBytesWriten);
            myFtdiDevice.Purge(FTDI.FT_PURGE.FT_PURGE_RX);
            System.Threading.Thread.Sleep(100);
            // Wait until the desired number of bytes have been received.
            numBytesAvailable = 0;
            while (numBytesAvailable < numBytesToRead)
            {
                ftStatus = myFtdiDevice.GetRxBytesAvailable(ref numBytesAvailable);
            }
           buffer = new byte[numBytesAvailable];
            numBytesRead = 0;
            buffer = new byte[numBytesAvailable];
            // Note that the Read method is overloaded, so can read string or byte array data
            ftStatus = myFtdiDevice.Read(buffer, numBytesAvailable, ref numBytesRead);
            System.Threading.Thread.Sleep(100);
            int k = ret(buffer[3], buffer[4], buffer[5], buffer[6]);
            label2.Text = k.ToString("X");
            myFtdiDevice.Close();
        }
READ ALSO
Вывести файл из ресурсов в папку на C# [дубликат]

Вывести файл из ресурсов в папку на C# [дубликат]

На данный вопрос уже ответили:

196
Проблемы при подключении кода для Unity

Проблемы при подключении кода для Unity

Хотел просто написать код для Unity Но появилась проблема и вот что мне говорит VisualStudio:

235
Ошибка ajax error-datatables warning: table id -example

Ошибка ajax error-datatables warning: table id -example

я совсем зеленый и мне нужно помощьМне нужно с помощью json сформировать datatable из нескольких структур данных

270