/* Функция синхронного сбора данных. Выполняется в отдельном потоке */ private void threadFunc() { reqStop = false; /* запускаем синхронные потоки ввода-вывода*/ lpcie.Errs err = hnd.StreamsStart(); if (err == lpcie.Errs.OK) { /* выполняем прием пока не произойдет ошибка или * не будет запроса на останов от основного приложения */ while (!reqStop && (err == lpcie.Errs.OK)) { /* принимаем данные синхронного ввода */ Int32 rcv_size = hnd.Recv(rcv_buf, RECV_BUF_SIZE, RECV_TOUT); /* значение меньше нуля означает ошибку... */ if (rcv_size < 0) { err = (lpcie.Errs)rcv_size; } else if (rcv_size > 0) { /* если больше нуля - значит приняли новые данные */ dinSize = RECV_BUF_SIZE; adcSize = RECV_BUF_SIZE; /* получаем номер лог. какнала, соответствующий первому * отсчету АЦП, так как до этого могли обработать * некратное количество кадров */ firstLch = hnd.NextExpectedLchNum; /* разбираем данные на синхронный ввод и отсчеты АЦП и * переводим АЦП в Вольты */ err = hnd.ProcessData(rcv_buf, (uint)rcv_size, X502.ProcFlags.VOLT, adcData, ref adcSize, dinData, ref dinSize); if (err == lpcie.Errs.OK) { /* обновляем значения элементов управления */ UpdateData(); } } } /* по выходу из цикла отсанавливаем поток. * Чтобы не сбросить код ошибки (если вышли по ошибке) * результат останова сохраняем в отдельную переменную */ lpcie.Errs stop_err = hnd.StreamsStop(); if (err == lpcie.Errs.OK) { err = stop_err; } } /* завершаем поток */ finishThread(err); }
public double[] Read() { uint count = hnd.RecvReadyCount; count /= CurrentSensors; count *= CurrentSensors; SetRawSize(count); int rcv_size = hnd.Recv(rawi, count, RECV_TOUT); if (rcv_size < 0) { if (CheckError((lpcie.Errs)rcv_size)) { return(null); } } if (rcv_size != (int)count) { LastError = "Размер полученный не равен размеру запрошенному"; return(null); } // переводим АЦП в Вольты uint count1 = count; if (CheckError(hnd.ProcessAdcData(rawi, raw, ref count1, L502.ProcFlags.VOLT))) { return(null); } if (count != count1) { LastError = "Размер преобразование полученный не равен размеру запрошенному"; return(null); } int sensor = 0; double[] values = new double[count]; for (int i = 0; i < count; i++) { values[i] = raw[i] * VoltPercent[sensor]; //if (curr_test >= 300000 && curr_test < 300000+40) // values[i] = 100; //else // values[i] = 0; //values[i] = curr_test / 10000; //curr_test++; sensor++; if (sensor == CurrentSensors) { sensor = 0; } } return(values); }