Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Что-то несколько не до конца понял, Вы пишите, что LTR Manager может подключаться, а из приложения нет. Но на скрине как раз LTR Manager не может подключиться к крейту, список крейтов пуст. В этом случае как раз логична ошибка, что крейт не найден, т.к. LTR Manager не смог с ним соединиться.
Если действительно проблема в том, что к самому крейту LTR Manager не может подключится по Ethernet, но может по USB, то проверьте при подключившись по USB версию прошивки крейта (выводится в информации о крейте при его выделении в LTR Manager), если версия 2.0.0.0, то в ней возможна проблема, что если с крейтом соединение закрыто некорректно (это не относится к вызову функций работы с модулями, а например если физически кабель был отключен или если комп например был выключен нештатным образом), то крейт не давал установить новое соединение. В этом случае Вы можете подключить крейт по USB и обновить прошивку модуля через LTR Manager (по Ethernet обновление не работает к сожалению). Арихив с прошивками - https://www.lcard.ru/download/ltreu-fw-3.0.0.13.zip. Для духместного (вроде он у Вас был до этого на скринах) нужен файл, начинающийся с ltr031 (ltr030 - для 8/16 местного). Для обновления достаточно подключить крейт по USB и нажать на него правой кнопкой мыши и выбрать обновить прошивку крейта и указать файл, после чего пересбросить весь крейт.
Добрый вечер!
Я обновила прошивку до 3.0.0.13. Проверила, работу своего ПО с одного ПК (ПО подключается к крейтам без ошибок, считываются данные).
Затем то же ПО запустила на другом ПК и в результате ошибки при выполнении команды LTR22Open "Указанный крейт не найден", при этом LTR Manager подключается без ошибок.
Помогает только команда "Сброс крейта" через LTR Manager (но требует подключения через USB), но в дальнейшем я не смогу так подключаться, а работать только по сети.
Программным способом нашла команды сброса только модулей, а не крейта.
Как я могу поочередно работать с крейтом с разных ПК?
Даже LTRManager не может подключиться.
Еще раз проверила - LTRManager может подключаться, а из моего приложения нет, на команду LTR22_Open ответ: Указанный крейт не найден. Сбросить крейт по сети не получается.
Добрый вечер!
Возникает необходимость с одного ПК поочередно подключаться к разным модулям. Вроде отключаюсь всегда корректно
LTR22_Close(module1);
LTR22_Close(module2);
LTR_Close(hcrate);
Но при попытке соединится с новым модулем (с которым уже были соединения ранее) возникают ошибки:
LTR22Open = Указанный крейт не найден
Даже LTRManager не может подключиться.
Помогает только подключиться к модулю через провод и выполнить в LTRManager сброс крейта. Но данный способ мне не подходит.
Пытаюсь выполнить LTR_ResetModule, но возникает ошибка при выполнении данной команды: -14 (Указанный крейт не найден)
hcrate = new TLTR();
int rez_crate = LTR_Init(hcrate);
if(rez_crate != 0)
cout << "!!! ERROR crate LTR_Init = " << LTR22_GetErrorString(rez_crate) << endl;
int resopen = LTR_OpenSvcControl(hcrate, 0x7f000001, 11111);
cout << "LTR_OpenSvcControl = " << resopen << endl;
int rezcrate = LTR_ResetModule(hcrate, LTR_CRATE_IFACE_TCPIP, "", 1, 0);
cout << "LTR_ResetModule 1 = " << rezcrate << endl;
rezcrate = LTR_ResetModule(hcrate, LTR_CRATE_IFACE_TCPIP, "", 2, 0);
cout << "LTR_ResetModule 2 = " << rezcrate << endl;
вывод:
LTR_OpenSvcControl = 0
LTR_ResetModule 1 = -14
LTR_ResetModule 2 = -14
Как можно сбросить крейт по сети?
Спасибо вам, сотрудники поддержки LCard!
Вы быстро и подробно отвечаете на вопросы!
Обняла
У Вас i = recvd; похоже должно быть на уровень выше по скобкам, т.е. сейчас он у Вас к циклу относится и по сути Вы всегда выходите из цикла при i = 0.
Т.е. как только выполнится if (last_tstmp[module_num] != (tstmp[recvd-1] & 0xFFFF)) вы заходите в цикл и сразу выходите, не сбросив flag_out и ничего не обработав, т.е. Вы пропускаете данные от реальной метки до конца блока приема и сохраняете только следующий блок, отчего и идет пропажа начала сигнала.Я бы вообще явно сделал выход из цикла по флагу:
for (int i = 0; (i < recvd) && flag_out; ++i)
без всяких i = recvdа BLOCK_RX_CH_WORDS_CNT у Вас равно 32000?
Да, Вы правы!
Пока нет возможности протестировать с источником данных, но похоже в том и закралась ошибка. Спасибо!!!
Да, BLOCK_RX_CH_WORDS_CNT равно 32000.
У меня еще вопрос. Как посчитать сколько мне сохранять точек, если, допустим, мне нужны данные только за первую секунду? Есть какой-то параметр наподобие "Частота опроса", зная который я могу рассчитать требуемое число точек?
Спасибо, за подробный ответ
Наконец-то получилось протестировать ПО с источником данных (генератор импульсов).
В LGraph2 фиксируется сигнал с быстрым ростом значения от 0 до 5, а затем медленный спад до 0.
Мое ПО фиксирует только кусок сигнала (медленный спад).
Т.е. данные, которые фиксируются сразу после "Спад сигнала на разъёме SYNC" я не могу получить.
В какую сторону смотреть?
hcrate = new TLTR();
module1 = new TLTR22(); // создаем структуру в памяти
//memset(module1,0,sizeof(TLTR22));
LTR22_Init(module1);
module2 = new TLTR22(); // создаем структуру в памяти
//memset(module2,0,sizeof(TLTR22));
LTR22_Init(module2);
module1->Channel.saddr = 0x7f000001; //127.0.0.1
module1->Channel.sport = 11111;
module1->Channel.csn[0] = '6';
module1->Channel.csn[1] = 'T';
module1->Channel.csn[2] = '7';
module1->Channel.csn[3] = '6';
module1->Channel.csn[4] = '9';
module1->Channel.csn[5] = '6';
module1->Channel.csn[6] = '5';
module1->Channel.csn[7] = '1';
module1->Channel.cc = 1;
module2->Channel.saddr = 0x7f000001; //127.0.0.1
module2->Channel.sport = 11111;
module2->Channel.csn[0] = '6';
module2->Channel.csn[1] = 'T';
module2->Channel.csn[2] = '7';
module2->Channel.csn[3] = '6';
module2->Channel.csn[4] = '9';
module2->Channel.csn[5] = '6';
module2->Channel.csn[6] = '5';
module2->Channel.csn[7] = '1';
module2->Channel.cc = 2;
DataModul1 = new double[32000*4];
DataModul2 = new double[32000];
int rez1=LTR22_Close(module1);
int rez2=LTR22_Close(module2);
rez1=LTR22_Open(module1, module1->Channel.saddr, module1->Channel.sport, module1->Channel.csn, module1->Channel.cc);
rez2=LTR22_Open(module2, module2->Channel.saddr, module2->Channel.sport, module2->Channel.csn, module2->Channel.cc);
//modul1
rez1 = LTR22_SwitchMeasureADCZero(module1, false);
rez1 = LTR22_SwitchACDCState(module1, true);
rez1 = LTR22_SetADCChannel(module1,0,true);
rez1 = LTR22_SetADCChannel(module1,1,true);
rez1 = LTR22_SetADCChannel(module1,2,true);
rez1 = LTR22_SetADCChannel(module1,3,true);
rez1 = LTR22_SetFreq(module1,true, 2);
rez1=LTR22_SetADCRange(module1, 0, 4); // +-10B
rez1=LTR22_SetADCRange(module1, 1, 4);
rez1=LTR22_SetADCRange(module1, 2, 4);
rez1=LTR22_SetADCRange(module1, 3, 4);
rez1=LTR22_GetConfig(module1);
//modul2
rez2 = LTR22_SwitchMeasureADCZero(module2, false);
rez2 = LTR22_SwitchACDCState(module2, true);
rez2 = LTR22_SetADCChannel(module2,0,true);
rez2 = LTR22_SetADCChannel(module2,1,false);
rez2 = LTR22_SetADCChannel(module2,2,false);
rez2 = LTR22_SetADCChannel(module2,3,false);
rez2 = LTR22_SetFreq(module2,true, 2);
rez2=LTR22_SetADCRange(module2, 0, 4);
rez2=LTR22_GetConfig(module2);
//crate
rez_crate = LTR_Init(hcrate);
rez_crate = LTR_OpenCrate(hcrate, 0x7f000001, 11111, 2, "");
// старт сбора данных
rez = LTR22_StartADC(module1, false);
rez = LTR22_StartADC(module2, false);
rez_crate = LTR_StartSecondMark(hcrate, LTR_MARK_EXT_DIGIN1_FALL);//по спаду DIGIN1
//в отдельном потоке для каждого модуля
// старт сбора данных
bool flag_out = true;
int module_en_ch_cnt = 4; /* кол-во разрешенных каналов в модуле */
int module_num = 0;/* номер модуля, 0 или 1 */
DWORD rbuf[4*BLOCK_RX_CH_WORDS_CNT];
DWORD tstmp[4*BLOCK_RX_CH_WORDS_CNT];
double *proc_buf = new double[4*BLOCK_RX_CH_WORDS_CNT];
DWORD last_tstmp[2]; /* сохранение tstmp для отслеживания изменения по каждому модулю. Нужно сохранять, т.к. может изменится на границе блоков! */
bool last_tstmp_valid[2] = {false, false}; /* признак, что инициализировали значение last_tstmp */
double pt;
//byte OverflowFlags[4];
byte *OverflowFlags = new byte[4];
while (flag_out)
{
//возвращает количество полученных данных
int recvd = LTR22_Recv(dev_ConnectLcard->module1, rbuf, tstmp, module_en_ch_cnt * BLOCK_RX_CH_WORDS_CNT, 2000);
cout << "количество полученных данных MODUL 1 = " << recvd << endl;
if (recvd > 0)
{
/* если еще значение метки не инициализировано, то иницизируем первым принятым значением */
if (!last_tstmp_valid[module_num])
{
cout << " init metka " << endl;
last_tstmp[module_num] = tstmp[0] & 0xFFFF; /* используем только младшие 16 бит - метку СЕКУНДА без учета метки СТАРТ */
last_tstmp_valid[module_num] = true;
}
/* обработка данных */
rez = LTR22_ProcessData(dev_ConnectLcard->module1, rbuf, proc_buf, recvd, true, true, OverflowFlags);
if(rez != 0) cout << "!!! ERROR MODUL 1 LTR22_ProcessData = " << LTR22_GetErrorString(rez) << endl;
/* быстрая проверка, изменилась ли метка, сравнивая метку на конец блока с последней действительной. */
if (last_tstmp[module_num] != (tstmp[recvd-1] & 0xFFFF))
{
/* ищем момент изменения метки - для простоты примера просто проходим по всем элементам без каких-то ускоренных поисков */
for (int i = 0; i < recvd; ++i)
{
if (last_tstmp[module_num] != (tstmp[i] & 0xFFFF))
{
flag_out = false;
cout << "количество полученных данных MODUL 1 = " << recvd << endl;
last_tstmp[module_num] = tstmp[i] & 0xFFFF;
/* обновляем последнее значение метки */
/* метка изменилась на i-ом элементе */
/* полчаем позицию в массиве на канал после обработки */
int proc_ch_pos = (i / module_en_ch_cnt);
cout << "!!!!!!! proc_ch_pos = " << proc_ch_pos << endl;
for (int ch_num = 0; ch_num < module_en_ch_cnt; ++ch_num)
{
/* для каждого канала получаем точку за изменением метки времени.
если нужно более одной точки то можем пройтись по позиции с proc_ch_pos до proc_ch_pos + N,
но должны учитывать, что следующие точки могут выйти за границу блока,
принятого в этот раз. Тогда нужно ставить флаг для модуля, что обработать еще сколько-то
точек из следующего блока */
for(int point = 0; point<32000-proc_ch_pos; point++)
{
pt = proc_buf[recvd/module_en_ch_cnt * ch_num + proc_ch_pos + point];
/* сохраняем полученную точку или обрабатываем другим требуемым образом */
dev_ConnectLcard->DataModul1[32000*ch_num + point] = pt;
}
}
}
i = recvd;
}
}
}
}
//в основном потоке
rez = LTR_StopSecondMark(hcrate); /* останов меток (может быть и после останова модулей) */
rez = LTR22_StopADC(module1); /* останов сбора*/
rez = LTR22_ClearBuffer(module1,true); /* очистка буфера */
rez = LTR22_StopADC(module2); // останов сбора
rez = LTR22_ClearBuffer(module2,true); // очистка буфера
rez1=LTR22_Close(module1);
rez2=LTR22_Close(module2);
rez_crate = LTR_Close(hcrate);
Доброй ночи!
Продолжаю задавать вопросы
Подскажите, сколько максимум значений можно считать в функции LTR22_Recv ?
Убрала memset, добавила LTR22_Init. Теперь при ProcessData (... true, true...) выводятся не нулевые значения, а уже обработанные
Но все равно сохраняется ситуация:
LTR22_SetADCRange(module1, 1, 4) // +-10В
результат: -0.3562
LTR22_SetADCRange(module1, 1, 0) // +-1В
результат: -0.035219
LTR22_SetADCRange(module1, 1, 5) // +-3В
результат: -0.1211
Пока нет возможности работать с оборудованием, сигналы не подключены. Возможно у вас при отсутствии реальных сигналов имитируются разные сигналы в зависимости от параметров в LTR22_SetADCRange?
По ProcessData, Вы нигде к целому числу значение не приводите, что оно становится явно 0 вместо -0,35? Ну и на всякий случай, не изменяете значения в ADCCalibration[][].UserCalibScale ?
На самом деле значение равно 0.0 , т.е. не целое.
ADCCalibration[][].UserCalibScale не использую
А от какого канала это данные в качестве результата? Номер канала в LTR22_SetADCRange идет от 0, т.е. LTR22_SetADCRange(module1, 1, 4) устанавливает диапазон для 2-го канала.
Да, все верно, для второго канала
Что-то у меня не сходится...
Во-первых, если я в ProcessData передаю true, true, то на выходе всегда нулевые значения.
Во-вторых, пробую подставлять разные значения в функцию LTR22_SetADCRange, и выходит не соответствие:
LTR22_SetADCRange(module1, 1, 4) // +-10В
результат: -1167.16 -1167.16*10/32767 = -0.3562
LTR22_SetADCRange(module1, 1, 0) // +-1В
результат: -1154.02 -1154.02*1/32767 = -0.035219
LTR22_SetADCRange(module1, 1, 5) // +-3В
результат: -1322.89 -1167.16*3/32767 = -0.1211
По идее значения должны быть одинаковыми...
Добрый вечер!
Правильно ли я поняла:
если мы ожидаем значения +-10В, то
LTR22_SetADCRange(module1, 1, 4);
...
Обрабатываем данные
LTR22_ProcessData(dev_ConnectLcard->module1, rbuf, proc_buf, recvd, true, false, NULL);
...
определяем нужную точку и получаем значение в Вольтах, как pt*10/32767
Спасибо за скорый и столь подробный ответ!
Буду тестировать.
Добрый вечер!
Задача такая:
При наступлении события "Спад сигнала на разъёме SYNC" фиксировать на 4х каналах модуля 1 и 1ом канале модуля 2 значения напряжений.
Т.е. мне подходит "Механизм синхронизации данных по меткам".
Правильно ли я поняла механизм действий?
после всех инициализаций выполняю
LTR_StartSecondMark(hcrate, LTR_MARK_EXT_DIGIN1_FALL);//по спаду DIGIN1
LTR22_Recv(module1, rbuf1, tstamp, 1000, 5000); //получаю данные
LTR22_Recv(module2, rbuf2, tstamp, 1000, 5000); //разделить на два потока???
LTR_StopSecondMark(hcrate);
Событие "Спад сигнала на разъёме SYNC" должен быть на этапе выполнения функций LTR22_Recv?
Добрый вечер!
Собран следующий макет:
- к четырем каналам модуля 1 подключен генератор с импульсами амплитудой 4В и длительностью основания 3 секунды
- каналу 1 модуля 2 подключено постоянное напряжение 4В
- в качестве синхросигнала подается импульс от генератора ипульса с длительностью 10 мс с периодом раз в 3 секунды
- на крейте установлен режим генерации метки "Старт" по спаду сигнала DIGIN1 (LTR_MakeStartMark(hcrate, 2)).
В LTR Manager видно, что увеличивается количество метки "Старт" так же с периодом раз в 3 секунды.
При попытке провести фазировку модулей с периодом ожидания 10 секунд (LTR22_SyncPhaze(module, 10000)) выдается ошибка "Нет ответа на переданную команду".
Так же при попытке считать данные. Выполняю TR22_StartADC(module,true), жду 10 секунд, пытаюсь считать данные LTR22_Recv(module, rbuf1, NULL, 1000, 500), ответ равен 0, т.е. данные не получены.
Оба модуля работают в режиме Slave.
Код прилагаю. Для чистоты кода убрала все проверки, все команды отрабатывают без ошибок. В чем может быть причина? Что упускаю?
TLTR * hcrate;
TLTR22 * module1;
TLTR22 * module2;
hcrate = new TLTR();
module1 = new TLTR22();
memset(module1,0,sizeof(TLTR22));
module2 = new TLTR22();
memset(module2,0,sizeof(TLTR22));
module1->Channel.saddr = 0x7f000001; //127.0.0.1
module1->Channel.sport = 11111;
module1->Channel.csn[0] = '6';
module1->Channel.csn[1] = 'T';
module1->Channel.csn[2] = '7';
module1->Channel.csn[3] = '6';
module1->Channel.csn[4] = '9';
module1->Channel.csn[5] = '6';
module1->Channel.csn[6] = '5';
module1->Channel.csn[7] = '1';
module1->Channel.cc = 1;
module2->Channel.saddr = 0x7f000001; //127.0.0.1
module2->Channel.sport = 11111;
module2->Channel.csn[0] = '6';
module2->Channel.csn[1] = 'T';
module2->Channel.csn[2] = '7';
module2->Channel.csn[3] = '6';
module2->Channel.csn[4] = '9';
module2->Channel.csn[5] = '6';
module2->Channel.csn[6] = '5';
module2->Channel.csn[7] = '1';
module2->Channel.cc = 2;
//блок 1 начало
LTR_Init(hcrate);
LTR_OpenCrate(hcrate, 0x7f000001, 11111, 2, "");
LTR_MakeStartMark(hcrate, 2);// LTR_MARK_EXIT_DIGIN1_FALL);
LTR22_Open(module1, module1->Channel.saddr, module1->Channel.sport, module1->Channel.csn, module1->Channel.cc);
LTR22_Open(module2, module2->Channel.saddr, module2->Channel.sport, module2->Channel.csn, module2->Channel.cc);
LTR22_SwitchACDCState(module1, true);
LTR22_SetADCChannel(module1,0,true);
LTR22_SetADCChannel(module1,1,true);
LTR22_SetADCChannel(module1,2,true);
LTR22_SetADCChannel(module1,3,true);
LTR22_SetFreq(module1,false, 1); // тестировали в этими значениями, но потом посчитали что должны быть "true, 2"
LTR22_SetADCRange(module1, 0, 4);
LTR22_SetADCRange(module1, 1, 4);
LTR22_SetADCRange(module1, 2, 4);
LTR22_SetADCRange(module1, 3, 4);
LTR22_GetConfig(module1);
LTR22_SwitchACDCState(module2, true);
LTR22_SetADCChannel(module2,0,true);
LTR22_SetADCChannel(module2,1,false);
LTR22_SetADCChannel(module2,2,false);
LTR22_SetADCChannel(module2,3,false);
LTR22_SetFreq(module2,false, 1); // тестировали в этими значениями, но потом посчитали что должны быть "true, 2"
LTR22_SetADCRange(module2, 0, 4);
LTR22_GetConfig(module2);
//блок 1 конец
//по команде оператора одновременно создаются 2 потока для фазировки модулей
//поток 1
LTR22_SetSyncPriority(dev_ConnectLcard->module1, false); //- режим slave
rez = LTR22_SyncPhaze(dev_ConnectLcard->module1, 10000);
cout << "!!! ERROR 1 LTR22_SyncPhaze = " << LTR22_GetErrorString(rez) << endl;
//ответ через 10 секунд "Нет ответа на переданную команду"
//поток 2
LTR22_SetSyncPriority(dev_ConnectLcard->module2, false); //- режим slave
rez = LTR22_SyncPhaze(dev_ConnectLcard->module2, 10000);
cout << "!!! ERROR 2 LTR22_SyncPhaze = " << LTR22_GetErrorString(rez) << endl;
//ответ через 10 секунд "Нет ответа на переданную команду"
//после завершения потоков 1 и 2:
LTR22_Close(module1);
LTR22_Close(module2);
LTR_Close(hcrate);
//по команде оператора запускается сбор данных
//повторяется блок 1
LTR22_SetSyncPriority(dev_ConnectLcard->module1, false); //- режим slave
LTR22_SetSyncPriority(dev_ConnectLcard->module2, false); //- режим slave
LTR22_StartADC(dev_ConnectLcard->module1,true);
LTR22_StartADC(dev_ConnectLcard->module2,true);
usleep(10000000);
DWORD rbuf1[1000];
double *rbuf1_ = new double[4000];
DWORD rbuf2[1000];
double *rbuf2_ = new double[1000];
number_values_1 = LTR22_Recv(dev_ConnectLcard->module1, rbuf1, NULL, 1000, 500);
cout << "rez 1 LTR22_Recv Количество полученных значений = " << number_values_1 << endl;
//ответ Количество полученных значений = 0
number_values_2 = LTR22_Recv(dev_ConnectLcard->module2, rbuf2, NULL, 1000, 500);
cout << "rez 2 LTR22_Recv Количество полученных значений = " << number_values_2 << endl;
//ответ Количество полученных значений = 0
LTR22_StopADC(dev_ConnectLcard->module1);
LTR22_StopADC(dev_ConnectLcard->module2);
LTR22_ClearBuffer(dev_ConnectLcard->module1,true); //true/false - ожиданте отклика
LTR22_ClearBuffer(dev_ConnectLcard->module2,true); //true/false - ожиданте отклика
if(number_values_1 == 1000 && number_values_2 == 1000)
{
LTR22_ProcessData(dev_ConnectLcard->module1, rbuf1, rbuf1_, 1000, false, false, NULL);
LTR22_ProcessData(dev_ConnectLcard->module2, rbuf2, rbuf2_, 1000, false, false, NULL);
}
delete[] rbuf1_;
delete[] rbuf2_;
LTR22_Close(module1);
LTR22_Close(module2);
LTR_Close(hcrate);
delete module1;
delete module2;
delete hcrate;
Подскажите, пожалуйста, как часто нужно выполнять команду LTR22_SyncPhaze ?
Перед каждым синхроимпульсом старта или достаточно после выключения/включения питания?
Скриншот был из Windows. Компьютер один.
Отключилась в Windows, запустила в Linux LTR Manager, настроила, отключила/включила питание модуля и все заработало - спасибо
На AstraLinux я адрес 192.168.1.2 прописываю в файле /etc/ltrd/congig.xml:
config.xml конечно же
Картинка не вставилась...
Спасибо, библиотеки прописала - код скомпилился.
Но результат функции LTR22_Open = -14 (LTR_ERROR_INVALID_CRATE - Указанный крейт не найден)
В Windows LTR Manager видит подключение модуля с IP-192.168.1.2 с двумя крейтами.
[img]file:///home/Lcard/1.jpg[/img]
На AstraLinux я адрес 192.168.1.2 прописываю в файле /etc/ltrd/congig.xml:
<ltrsrv_config>
<log>
<level> 3 </level>
</log>
<crate_ip_entries>
<ip autocon="1"> 192.168.1.2 </ip>
</crate_ip_entries>
<intf_eth_params>
<intf_check_time> 1000 </intf_check_time>
<crate_poll_time> 15000 </crate_poll_time>
<crate_conection_timeout> 5000 </crate_conection_timeout>
<crate_ctlcmd_timeout> 5000 </crate_ctlcmd_timeout>
</intf_eth_params>
</ltrsrv_config>
Код программы:
TLTR22* module = new TLTR22();
memset(module,0,sizeof(TLTR22));
int res=0;
module->Channel.saddr = 0x7f000001; //127.0.0.1 сетевой адрес сервера
module->Channel.sport = 11111;
module->Channel.csn[0] = '6';
module->Channel.csn[1] = 'T';
module->Channel.csn[2] = '7';
module->Channel.csn[3] = '6';
module->Channel.csn[4] = '9';
module->Channel.csn[5] = '6';
module->Channel.csn[6] = '5';
module->Channel.csn[7] = '1';
module->Channel.cc = 1;
res=LTR22_Open(module, module->Channel.saddr, module->Channel.sport, module->Channel.csn, module->Channel.cc);
Результат -14
При этом узел 192.168.1.2 пингуется
Спасибо.
Установлены все пакеты из http://download.opensuse.org/repositori … _10/amd64/
Написан мини код.
#include <ltr22api.h>
TLTR22 * module = new TLTR22();
int rez = LTR22_Init(module);
При компиляции возникает ошибка:
undefined reference to `LTR22_Init'
В Makefail указанна ссылка на каталог с файлом ltr22api.h
INC_DIR_USER= -I . \
-I /usr/local/include/modbus \
-I /usr/include/ltr/include
В чем может быть проблема?
Если в коде оставить только строку:
TLTR22 * module = new TLTR22();
то компилиться.
Добрый день!
В перечне возможных ОС для работы с Lcard указана Astra Linux. Но переходя по ссылке с дистрибутивами http://download.opensuse.org/repositories/home:/l-card/ раздел с данной ОС не нахожу. Прошу помощи
Если важно: LTR-EU-2-5 LTR22
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск