Пример #1
0
        /* Функция синхронного сбора данных. Выполняется в отдельном потоке */
        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);
        }
Пример #2
0
        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);
        }