Плату Е-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