Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

E-502 постоянная ошибка -1004

Вы не вошли.

 Поиск | Регистрация | Вход 

09.03.2022 07:11:52
#1

Участник
Здесь с 19.11.2017
Сообщений: 7

E-502 постоянная ошибка -1004

Плату Е-502 уже использовали в двух подобных проектах. Прошивка 0.0.14
Все работало замечательно, но в новом проекте столкнулись со следующей проблемой - примерно
через 20-30 минут после включения, плата начинает выдавать ошибку  -1004 
Ioeaea Cortex-M4: Ia?auaiea e ?aaeno?o IEEN aa?ioei ioaao NACK при любом обращении к ней.
Сперва данная ошибка выдается не часто и запросы данных проходят, но с течением времени выдается
практически на каждый запрос и работа с данными прекращается.
Запросы все асинхронные. Опрос ChangeData 4 раза в секунду.


#region Подготовка запроса данных
            private void Prepare()
            {
                string path = AppDomain.CurrentDomain.BaseDirectory + "crashReport.txt";
                lpcie.Errs err = lpcie.Errs.OK;
                /* Устанавливаем кол-во логических каналов */
                hnd.LChannelCount = 6;

                /* Настраниваем таблицу логических каналов */
                for (uint i = 0; i < hnd.LChannelCount; i++)
                {
                    err = hnd.SetLChannel(i, i, X502.LchMode.COMM, X502.AdcRange.RANGE_10, 0);
                    if (err != lpcie.Errs.OK)
                    {
                        Flag = false;
                        ErrorString = X502.GetErrorString(err);
                        //ErrorString = Encoding.UTF8.GetString(Encoding.GetEncoding("ISO").GetBytes(ErrorString));
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Инициализация таблицы логических каналов " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }
                        hnd = null;
                        return;
                    }
                }

                /* Настраиваем источник частоты синхронизации и запуска сбора */
                if (err == lpcie.Errs.OK)
                {
                    hnd.SyncMode = X502.Sync.INTERNAL;
                    hnd.SyncStartMode = X502.Sync.INTERNAL;
                }

                double f_acq, f_lch;
                /* настраиваем частоту сбора с АЦП */
                if (err == lpcie.Errs.OK)
                {
                    f_acq = 2000;
                    f_lch = 0;
                    err = hnd.SetAdcFreq(ref f_acq, ref f_lch);
                }
                else
                {
                    Flag = false;
                    ErrorString = X502.GetErrorString(err);
                    //ErrorString = Encoding.UTF8.GetString(Encoding.GetEncoding("ISO").GetBytes(ErrorString));
                    using (StreamWriter w = File.AppendText(path))
                    {
                        w.WriteLine(DateTime.Now.ToString() + "  Инициализация. Настраиваем источник частоты синхронизации и запуска сбора  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                        w.Flush();
                    }
                    hnd = null;
                    return;
                }

                /* Записываем настройки в модуль */
                if (err == lpcie.Errs.OK) err = hnd.Configure(0);

                if (err == lpcie.Errs.OK)
                {
                    Flag = true;
                }
                else
                {
                    Flag = false;
                    ErrorString = X502.GetErrorString(err);
                    //ErrorString = Encoding.UTF8.GetString(Encoding.GetEncoding("ISO").GetBytes(ErrorString));
                    using (StreamWriter w = File.AppendText(path))
                    {
                        w.WriteLine(DateTime.Now.ToString() + "  Инициализация. Записываем настройки в модуль  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                        w.Flush();
                    }
                    hnd = null;
                    return;
                }
            }
            #endregion

            #region Init
            /// <summary>
            /// Настройка рабочих параметров модуля
            /// </summary>
            private void Init()
            {
                string path = AppDomain.CurrentDomain.BaseDirectory + "crashReport.txt";
                /* создаем запись, соответствующую заданному адресу */
                X502.DevRec rec = x502api.E502.MakeDevRecordByIpAddr(IPAddress.Parse(Adress), 0, 1000);
                if (rec != null)
                {
                    /* создание объекта */
                    hnd = X502.Create(rec.DevName);
                    /* станавливаем связь устанавливаем связь по созданной записи */
                    lpcie.Errs res = hnd.Open(rec);
                    if (res == lpcie.Errs.OK)
                    {
                        Flag = true;
                    }
                    else
                    {
                        Flag = false;
                        ErrorString = X502.GetErrorString(res);
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Инициализация  " + res.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }

                        hnd = null;
                        return;
                    }
                }

                Prepare();

            }
            #endregion

            #region ChangeData
            /// <summary>
            /// Асинхронный прием-передача данных
            /// </summary>
            public void ChangeData()
            {
                lpcie.Errs err = lpcie.Errs.OK;
                string path = AppDomain.CurrentDomain.BaseDirectory + "crashReport.txt";
                try
                {
                    Flag = true;
                    if (hnd == null)
                    {
                        Init();
                    }


                    /* Аналоговый вывод CH0 */
                    err = hnd.AsyncOutDac(X502.DacCh.CH1, Ch_OUT[0], X502.DacOutFlags.CALIBR |
                                                                        X502.DacOutFlags.VOLT);
                    if (err != lpcie.Errs.OK)
                    {
                        ErrorString = X502.GetErrorString(err);
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Аналоговый вывод CH0  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }
                        Flag = false;
                    }

                    /* Аналоговый вывод CH1 */
                    err = hnd.AsyncOutDac(X502.DacCh.CH2, Ch_OUT[1], X502.DacOutFlags.CALIBR |
                                                                        X502.DacOutFlags.VOLT);
                    if (err != lpcie.Errs.OK)
                    {
                        ErrorString = X502.GetErrorString(err);
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Аналоговый вывод CH1  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }
                        Flag = false;
                    }

                    Prepare();

                    /* Аналоговый ввод */
                    err = hnd.AsyncGetAdcFrame(X502.ProcFlags.VOLT, 2000, Ch_IN);
                    if (err != lpcie.Errs.OK)
                    {
                        ErrorString = X502.GetErrorString(err);
                        //ErrorString = Encoding.UTF8.GetString(Encoding.GetEncoding("ISO").GetBytes(ErrorString));
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Аналоговый ввод  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }
                        Flag = false;
                    }

                    /* Цифровой ввод 17 линий */
                    UInt32 din;
                    err = hnd.AsyncInDig(out din);
                    if (err != lpcie.Errs.OK)
                    {
                        ErrorString = X502.GetErrorString(err);
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Цифровой ввод  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }
                        Flag = false;
                    }
                    else
                    {
                        for (int i = 0; i < Bit_IN.Length; i++)
                        {
                            if ((din >> i & 1) == 1) Bit_IN[ i ] = true; else Bit_IN[ i ] = false;
                        }
                    }

                    /* Цифровой вывод 16 линий */
                    UInt32 val = 0;
                    for (int i = 0; i < Bit_OUT.Length; i++)
                    {
                        if (Bit_OUT [  i ])
                        {
                            val = val + (uint)(Math.Pow(2, i));
                        }
                    }
                    err = hnd.AsyncOutDig(val, 0);
                    if (err != lpcie.Errs.OK)
                    {
                        ErrorString = X502.GetErrorString(err);
                        using (StreamWriter w = File.AppendText(path))
                        {
                            w.WriteLine(DateTime.Now.ToString() + "  Цифровой вывод  " + err.ToString() + "  " + ErrorString + Environment.NewLine);
                            w.Flush();
                        }
                        Flag = false;
                    }
                }
                catch (Exception ex)
                {
                    //MessageBox.Show(ex.Message);
                }
            }
            #endregion

09.03.2022 13:01:47
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,291

Re: E-502 постоянная ошибка -1004

Попробуйте обновить прошивку ПЛИС модуля до версии 0.15 (через утилиту tools/lxfw-update из последнего SDK с сайта)

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск