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 = ""; } } } } }
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); } } }
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); } } }
/* Функция, вызываемая по завершению потока сбора данных. * Так как она работает с интерфейсом, то при вызове из другого потока, * она планируется на выполнения в основном потоке, как и 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(); } }
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"); } } }
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; }
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(); }
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"); } } }
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); }