Уже 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();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотел просто написать код для Unity Но появилась проблема и вот что мне говорит VisualStudio:
я совсем зеленый и мне нужно помощьМне нужно с помощью json сформировать datatable из нескольких структур данных