Example #1
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (hnd == null)
            {
                lpcie.Errs res;

                int idx = cbbSerialList.SelectedIndex;
                if (idx >= 0)
                {
                    /* создаем описатель модуля */
                    hnd = X502.Create(devrecs[idx].DevName);
                    /* устанавливаем связь по выбранному серийному номеру */
                    res = hnd.Open(devrecs[idx]);
                    if (res == lpcie.Errs.OK)
                    {
                        showDevInfo();
                    }
                    else
                    {
                        MessageBox.Show(X502.GetErrorString(res), "Ошибка открытия модуля", MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                        hnd = null;
                    }
                }
            }
            else
            {
                deviceClose();
            }

            updateControls();
        }
Example #2
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            /* настраиваем все параметры в соответствии с элементами управления */
            lpcie.Errs err = setupParams();


            /* разрешаем синхронный ввод АЦП */
            if (err == lpcie.Errs.OK)
            {
                err = hnd.StreamsEnable(X502.Streams.ADC);
            }
            /* разрешаем синхронный ввод с цифровых линий в зависимости от переключателя */
            if (err == lpcie.Errs.OK)
            {
                err = setSyncDinStream();
            }

            if (err != lpcie.Errs.OK)
            {
                MessageBox.Show(X502.GetErrorString(err), "Ошибка настройки параметров модуля",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                /* создаем новый поток для сбора в нем данных */
                thread        = new Thread(this.threadFunc);
                threadRunning = true;
                thread.Start();
                updateControls();
            }
        }
Example #3
0
 private void button10_Click(object sender, EventArgs e)
 {
     if (hnd != null)
     {
         if (out16 == false)
         {
             state_outputs = state_outputs + 32768;
             lpcie.Errs err = hnd.AsyncOutDig(state_outputs, 0);
             if (err != lpcie.Errs.OK)
             {
                 MessageBox.Show(X502.GetErrorString(err), "Ошибка асинхронного вывода на цифровой выход №16",
                                 MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
             out16 = true;
             button10.BackColor = Color.Lime;
         }
         else
         {
             state_outputs = state_outputs - 32768;
             lpcie.Errs err = hnd.AsyncOutDig(state_outputs, 0);
             if (err != lpcie.Errs.OK)
             {
                 MessageBox.Show(X502.GetErrorString(err), "Ошибка асинхронного вывода на цифровой выход №16",
                                 MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
             out16 = false;
             button10.BackColor = Color.Silver;
         }
     }
 }
Example #4
0
        private void deviceClose()
        {
            if (hnd != null)
            {
                //останов сбора данных
                if (threadRunning)
                {
                    reqStop = true;

                    /* ожидаем завершения потока. Так как
                     * поток работает с GUI и планирует выполнение части
                     * функций в основном потоке, то мы не можем сдесь просто
                     * сделать Join, вызываем Application.DoEvents(), чтобы
                     * в нем обработать запланированные UpdateData()/finishThread() */
                    while (threadRunning)
                    {
                        Application.DoEvents();
                    }
                }

                // закрытие связи с модулем
                hnd.Close();
                // память освободится диспетчером мусора, т.к. нет больше ссылок
                hnd = null;
            }
        }
Example #5
0
 public void Dispose()
 {
     if (hnd == null)
     {
         return;
     }
     hnd.Close();
     // память освободится диспетчером мусора, т.к. нет больше ссылок
     hnd = null;
 }
Example #6
0
 private void deviceClose()
 {
     if (hnd != null)
     {
         // закрытие связи с модулем
         hnd.Close();
         // память освободится диспетчером мусора, т.к. нет больше ссылок
         hnd = null;
     }
 }
Example #7
0
 private void btnAsyncDigOut_Click(object sender, EventArgs e)
 {
     if (hnd != null)
     {
         UInt32     val = Convert.ToUInt32(edtAsyncDigOut.Text, 16);
         lpcie.Errs err = hnd.AsyncOutDig(val, 0);
         if (err != lpcie.Errs.OK)
         {
             MessageBox.Show(X502.GetErrorString(err), "Ошибка асинхронного вывода на цифровые линии",
                             MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
Example #8
0
        private void btnAsyncAdcFrame_Click(object sender, EventArgs e)
        {
            if (hnd != null)
            {
                /* устанавливаем параметры модуля */
                lpcie.Errs err = setupParams();

                if (err != lpcie.Errs.OK)
                {
                    MessageBox.Show(X502.GetErrorString(err), "Ошибка настройки параметров АЦП",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (err == lpcie.Errs.OK)
                {
                    UInt32 lch_cnt = hnd.LChannelCount;

                    /* Создаем массив для приема количества отсчетов, равному количеству
                     * логических каналов */
                    double[] adc_data = new double[lch_cnt];
                    err = hnd.AsyncGetAdcFrame(X502.ProcFlags.VOLT, 1000, adc_data);
                    if (err != lpcie.Errs.OK)
                    {
                        MessageBox.Show(X502.GetErrorString(err), "Ошибка приема кадра АЦП",
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        /* выводим результат */
                        edtLCh1_Result.Text = adc_data[0].ToString("F7");
                        if (lch_cnt >= 2)
                        {
                            edtLCh2_Result.Text = adc_data[1].ToString("F7");
                        }
                        else
                        {
                            edtLCh2_Result.Text = "";
                        }

                        if (lch_cnt >= 3)
                        {
                            edtLCh3_Result.Text = adc_data[2].ToString("F7");
                        }
                        else
                        {
                            edtLCh3_Result.Text = "";
                        }
                    }
                }
            }
        }
Example #9
0
 private void btnAsyncDac2_Click(object sender, EventArgs e)
 {
     if (hnd != null)
     {
         double     val = Convert.ToDouble(edtAsyncDac2.Text);;
         lpcie.Errs err = hnd.AsyncOutDac(X502.DacCh.CH2, val, X502.DacOutFlags.CALIBR |
                                          X502.DacOutFlags.VOLT);
         if (err != lpcie.Errs.OK)
         {
             MessageBox.Show(X502.GetErrorString(err), "Ошибка вывода на ЦАП",
                             MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
Example #10
0
        private void btnSetAdcFreq_Click(object sender, EventArgs e)
        {
            if (hnd != null)
            {
                hnd.LChannelCount = Convert.ToUInt32(cbbLChCnt.Text);

                lpcie.Errs err = setAdcFreq();
                if (err != lpcie.Errs.OK)
                {
                    MessageBox.Show(X502.GetErrorString(err), "Ошибка установки частоты сбора",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Example #11
0
 /* Функция, вызываемая по завершению потока сбора данных.
  * Так как она работает с интерфейсом, то при вызове из другого потока,
  * она планируется на выполнения в основном потоке, как и UpdateData */
 private void finishThread(lpcie.Errs err)
 {
     if (this.InvokeRequired)
     {
         this.Invoke(new finishThreadDelegate(this.finishThread), err);
     }
     else
     {
         if (err != lpcie.Errs.OK)
         {
             MessageBox.Show(X502.GetErrorString(err), "Сбор данных завершен с ошибкой",
                             MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         threadRunning = false;
         updateControls();
     }
 }
Example #12
0
 private void btnAsyncDigIn_Click(object sender, EventArgs e)
 {
     if (hnd != null)
     {
         UInt32     din;
         lpcie.Errs err = hnd.AsyncInDig(out din);
         if (err != lpcie.Errs.OK)
         {
             MessageBox.Show(X502.GetErrorString(err), "Ошибка асинхронного ввода с цифровых линий",
                             MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         else
         {
             edtAsyncDigIn.Text = din.ToString("X5");
         }
     }
 }
Example #13
0
        public LCard502E(LCard502Pars _pars, DOnPr _OnPr = null)
        {
            if (_OnPr != null)
            {
                OnPr += _OnPr;
            }

            LastError = null;
            IPAddress addr = FirstIp();

            if (addr == null)
            {
                throw (new Exception("LCard502E.LCard502E: Ошибка: Устройство не найдено"));
            }
            /* создаем запись, соответствующую заданному адресу */
            X502.DevRec rec = E502.MakeDevRecordByIpAddr(addr, 0, 5000);
            /* создание объекта */
            hnd = X502.Create(rec.DevName);
            /* станавливаем связь устанавливаем связь по созданной записи */
            lpcie.Errs res = hnd.Open(rec);
            if (res != lpcie.Errs.OK)
            {
                throw (new Exception(string.Format("Ошибка открытия модуля: {0}", X502.GetErrorString(res))));
            }

            //return;
            ///* создаем описатель модуля */
            //hnd = new L502();

            //string serial = FindSerial(_pars.DevNum);
            //if (serial == null)
            //    throw (new Exception("LCard502.LCard502: Ошибка: Устройство не найдено: " + _pars.DevNum.ToString()));
            //pr("LCard502 create");
            ////            lpcie.Errs res;
            ///* устанавливаем связь по выбранному серийному номеру */
            //lpcie.Errs res = hnd.Open(serial);
            //if (res != 0)
            //    throw (new Exception(L502.GetErrorString(res) + " Ошибка открытия модуля"));
            ///* получаем информацию о модуле */
            //L502.Info devinfo = hnd.DevInfo;
        }
Example #14
0
 private void btnOpenByIP_Click(object sender, EventArgs e)
 {
     /* создаем запись, соответствующую заданному адресу */
     X502.DevRec rec = E502.MakeDevRecordByIpAddr(IPAddress.Parse(edtIpAddr.Text), 0, 5000);
     if (rec != null)
     {
         /* создание объекта */
         hnd = X502.Create(rec.DevName);
         /* станавливаем связь устанавливаем связь по созданной записи */
         lpcie.Errs res = hnd.Open(rec);
         if (res == lpcie.Errs.OK)
         {
             showDevInfo();
         }
         else
         {
             MessageBox.Show(X502.GetErrorString(res), "Ошибка открытия модуля", MessageBoxButtons.OK,
                             MessageBoxIcon.Error);
             hnd = null;
         }
     }
     updateControls();
 }
Example #15
0
        static void Main(string[] args)
        {
            /* функции для поиска представлены в виде методов отдельного класса EthSvcBrowser */
            E502.EthSvcBrowser sb = new E502.EthSvcBrowser();
            /* запуск поиска сервисов */
            lpcie.Errs err = sb.Start();
            if (err != lpcie.Errs.OK)
            {
                Console.WriteLine("Ошибка запуска поиска устройств в сети {0}: {1}", err, X502.GetErrorString(err));
            }
            else
            {
                bool end = false;
                Console.WriteLine("Запущен поиск устройств в локальной сети. Для останова нажмите любую клавишу");

                while (!end && (err == lpcie.Errs.OK))
                {
                    E502.EthSvcEvent svc_evt;

                    /* Метод EthSvcRecord предоставляет доступ ко функциям для работы с описателем сервиса.
                     * В отличие от С не нужно освобождать память вручную, т.к. освобождение выполняется
                     * в деструкторе */
                    E502.EthSvcRecord svc_rec;
                    err = sb.GetEvent(out svc_rec, out svc_evt, 300);
                    if (err != lpcie.Errs.OK)
                    {
                        Console.WriteLine("Ошибка получения записи о найденном устройстве {0}: {1}", err, X502.GetErrorString(err));
                    }
                    else if (svc_evt != E502.EthSvcEvent.NONE)
                    {
                        /* Адрес мы можем получить только для присутствующего устройства */
                        if ((svc_evt == E502.EthSvcEvent.ADD) || (svc_evt == E502.EthSvcEvent.CHANGED))
                        {
                            IPAddress  addr;
                            lpcie.Errs cur_err = svc_rec.ResolveIPv4Addr(out addr, 2000);
                            if (cur_err != lpcie.Errs.OK)
                            {
                                Console.WriteLine("Ошибка получения IP-адреса устройтсва {0}: {1}", cur_err, X502.GetErrorString(cur_err));
                            }
                            else
                            {
                                Console.WriteLine("{0}: {1}, S/N: {2}, Адрес = {3}", svc_evt == E502.EthSvcEvent.ADD ?
                                                  "Новое устройтсво" : "Изм. параметров", svc_rec.InstanceName, svc_rec.DevSerial, addr.ToString());
                            }
                        }
                        else if (svc_evt == E502.EthSvcEvent.REMOVE)
                        {
                            Console.WriteLine("Устройство отключено: {0}, S/N: {1}", svc_rec.InstanceName, svc_rec.DevSerial);
                        }
                    }

                    /* вход по нажатию клавиши */
                    if (Console.KeyAvailable)
                    {
                        end = true;
                    }
                }

                lpcie.Errs stop_err = sb.Stop();
                if (stop_err != lpcie.Errs.OK)
                {
                    Console.WriteLine("Ошибка останова поиска сервисов {0}: {1}", stop_err, X502.GetErrorString(stop_err));
                }
                else
                {
                    Console.WriteLine("Останов поиска сервисов выполнен успешно!\n");
                }
            }
        }
Example #16
0
        IPAddress FirstIp()
        {
            E502.EthSvcBrowser sb  = new E502.EthSvcBrowser();
            lpcie.Errs         err = sb.Start();
            if (err != lpcie.Errs.OK)
            {
                throw (new Exception(string.Format("Ошибка запуска поиска устройств в сети {0}: {1}", err, X502.GetErrorString(err))));
            }
            IPAddress addr = null;

            for (int i = 0; i < 10; i++)
            {
                //while (err == lpcie.Errs.OK)
                //{
                E502.EthSvcEvent svc_evt;

                /* Метод EthSvcRecord предоставляет доступ ко функциям для работы с описателем сервиса.
                 * В отличие от С не нужно освобождать память вручную, т.к. освобождение выполняется
                 * в деструкторе */
                E502.EthSvcRecord svc_rec;
                err = sb.GetEvent(out svc_rec, out svc_evt, 300);
                if (err != lpcie.Errs.OK)
                {
                    throw (new Exception(string.Format("Ошибка получения записи о найденном устройстве {0}: {1}", err, X502.GetErrorString(err))));
                }
                if (svc_evt == E502.EthSvcEvent.NONE)
                {
                    continue;
                }
                if (svc_evt == E502.EthSvcEvent.REMOVE)
                {
                    pr(string.Format("Устройство отключено: {0}, S/N: {1}", svc_rec.InstanceName, svc_rec.DevSerial));
                    continue;
                }
                /* Адрес мы можем получить только для присутствующего устройства */
                if ((svc_evt == E502.EthSvcEvent.ADD) || (svc_evt == E502.EthSvcEvent.CHANGED))
                {
                    lpcie.Errs cur_err = svc_rec.ResolveIPv4Addr(out addr, 2000);
                    if (cur_err != lpcie.Errs.OK)
                    {
                        throw (new Exception(string.Format("Ошибка получения IP-адреса устройтсва {0}: {1}", err, X502.GetErrorString(err))));
                    }
                    pr(string.Format("{0}: {1}, S/N: {2}, Адрес = {3}",
                                     svc_evt == E502.EthSvcEvent.ADD ? "Плата" : "Изм. параметров",
                                     svc_rec.InstanceName, svc_rec.DevSerial,
                                     addr.ToString()));
                    break;
                }
            }
            lpcie.Errs stop_err = sb.Stop();
            if (stop_err != lpcie.Errs.OK)
            {
                throw (new Exception(string.Format("Ошибка останова поиска сервисов {0}: {1}", stop_err, X502.GetErrorString(stop_err))));
            }
            return(addr);
        }