Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Добрый день, у нас в понедельник сдача установки, а старых крейтов больше нет ....
А какой именно у Вас DEVICE_ADDRESS?
#define DEVICE_ADRESS 1 // адрес ведомого устройства(ПЛК)
#define PACKET_SIZE 8 // Размер пакета в байтах
я все таки не могу понять, почему мы можем читать регистры в которых лежат значения температур, а регистры состояний при чтении получаем ошибку -4023
Замена библиотек на новые не помогла, исправление в коде расчета CRC тоже, ошибка прежняя -4023
ситуация следующая, если использовать только старые библиотеки то ltr43 работает, ltr11 при конфигурации выдает ошибку, но дальше работает (подозреваю что с дефолтной конфигурацией).
если заменить только ltr11api.dll то приложение падает молча, если подкинуть еще ltrapi.dll падает с Abnormal program termination
так что от вас требуется починить либо ltr11api.dll для нового ltr11, либо в новых библиотеках починить ltr43api.dll
серийники крейтов
новый 6T777689
старый 6T769623
Т.е. если заменить только библиотеку ltr11api и ltrapi, но не заменять билиотеку ltr43api, то работает и на новом крейте с новым модулем?
Это еще не проверили, в процессе.
А если с новым крейтом на 2.0.0.0 и новым модулем и новой билиотекой?
нет, старый крейт проверяли со старыми либами
И старый модуль в новом крейте заработал у Вас тогда именно с новой библиотекой?
судя по всему тоже со старыми либами проверяли, только сейчас обратил внимание что в логе LTR11 не инициализировался в новом крейте
И можете написать серийные номера старого и новго LTR43 и крейта?
сейчас как дозвонюсь до своих, попрошу чтобы сделали.
Кажется картина начала вырисовываться, сейчас к новому крейту подключились в старой версии программы со старыми библиотеками, в итоге LTR11 ожидаемо не запустилась, а LTR43 заработала. Так что проблема в библиотеке похоже ...
по экспериментам, нашли вчера старый крейт с прошивкой 2.0, что самое интересное, так это то что новая плата ltr43 в старом крейте работает, но и старая плата ltr43 в новом крейте работает, но если вернуть новую плату ltr43 обратно в новый крейт не работает. Вы там черной магией занимаетесь ?
А библиотеку Вы тоже обновили на последнюю как и с LTR11?
конечно же
@ Алексей L Card, вы можете чаще одного раза в день отвечать, просто у нас уже достаточно критическая ситуация, и старых крейтов больше нет, чтобы следующую отгрузку прикрыть. Может нам с Вами в ТГ или Максе списаться, чтобы более оперативно можно было общаться?
Да, все тесты на одном пк и одной установке, меняем только крейт. Про замену модуля в крейте даже не подумал. Сейчас проблематично будет сделать, ибо был только один старый крейт, он позавчера уехал с установкой заказчику, было принято такое решение чтобы заказ не срывать. Но сейчас подумаем, что может удастся что-то придумать.
EnableModbusWork это просто флаг блокировки запуска/инициализации Modbus пока не выполнены все условия.
И какая версия прошивки второго крейта (отображается в LTR Manger, на скрине у Вас 3.0.0.17 - это на сколько я понимаю новый?)
да это новый, у нас остались только они.
спасибо, попробуем
может его прошить надо, но на сайте прошивка только версии 2.0, а на гите не нашел прошивок
Новый: версия 2.2. дата прошивки: 03.03.21
Старый: версия 2.3. дата прошивки 28.07.22
1. Можете проверить версию прошивки LTR43 там где работает и не работает (либо в своей программе строка из TLTR43.ModuleInfo.FirmwareVersion, либо, например, поставить демо LMS, создать эксперимент и войти в обзор подключенного оборудования).
Инициализация LTR43
09:46:28.656 Версия прошивки LTR43: 2.2
09:46:28.656 Дата прошивки LTR43: 03.03.2021
вот с нового, со старого теперь уже в понедельник, с производства все ушли
2. В Вашей программе никаких других действий не происходит с LTR43? Никаких запусков синхронного ввода цифровых линий или работы из разных потоков в программе нет?
Если оставить только открытие модуля и однократное чтение регистра Modbus (чтобы иcключить влияние последовательности чтений), то так же будет от смены адреса этого чтения то работать, то нет?
нет, LTR43 только для связи с ПЛК по ModBus
и еще, ошибку нашел
#define LTR43_ERR_DATA_TRANSMISSON_ERROR (-4023)
есть подозрение что новый крейт не успевает в таймауты попадать, хотя и не маленькие выставлены
FLTR43->RS485.SendTimeoutMultiplier = 10;
FLTR43->RS485.ReceiveTimeoutMultiplier = 20;
вот реализация метода
int __fastcall ReadRegisterModbus(BYTE Adress, short &ReceivedData)
{
if (!EnableModbusWork) {
return 4;
}
EnableModbusWork = false;
int res = 0;
int Error;
// формируем пакет данных для передачи
short mDataToSend[PACKET_SIZE];
short mDataToReceived[PACKET_SIZE-1] = {0};
mDataToSend[0] = DEVICE_ADRESS; // Адрес ведомого устройства (ПЛК-110)
mDataToSend[1] = 0x03; // Код функции чтения регистров MODBUS
mDataToSend[2] = 0; // Старший байт адреса регистра для чтения
mDataToSend[3] = Adress; // Младший байт адреса регистра для чтения
mDataToSend[4] = 0; // Старший байт числа регистров для чтения
mDataToSend[5] = 1; // Младший байт числа регистров для чтения, всегда 1 (так как размер пакета LTR43 ограничен 10 байтами)
// Вычисляем контрольную сумму пакета данных
short CRC = CalculateModbusCRC(&mDataToSend[0], 6);
mDataToSend[6] = CRC>>8; // Старший байт контрольной суммы
mDataToSend[7] = CRC&0x00FF; // Младший байт контрольной суммы
// DEBUG
TPerfTimer *perfTimer = new TPerfTimer();
perfTimer->reset_work_time();
perfTimer->start_timer();
// Обмен данными по RS-485 интерфейсу
Error = LTR43_RS485_Exchange(FLTR43, &mDataToSend[0], &mDataToReceived[0], PACKET_SIZE, PACKET_SIZE-1);
// DEBUG
perfTimer->stop_timer();
DWORD all_time = perfTimer->get_work_time();
delete(perfTimer);
EnableModbusWork = true;
// Если была ошибка при обмене данными
if (Error)
{
return(Error);
//return(1);
}
if (mDataToReceived[1] == 0x83) {
return 2;
}
if (!CheckModbusCRC(&mDataToReceived[0],PACKET_SIZE-1))
{
AnsiString tmpStr = "";//IntToStr(mDataToReceived[0]) + ", ";
for (int i = 0; i < PACKET_SIZE-1; i++)
{
tmpStr += IntToStr(mDataToReceived[i]) + ", ";
}
AddStringToDinaLog("ошибка CRC ReadRegisterModbus(время: " + IntToStr(all_time/1000) + " мс) состав пакета: " + tmpStr);
return 3;
}
// считываем данные регситра
ReceivedData = mDataToReceived[3];
ReceivedData <<= 8;
ReceivedData |= mDataToReceived[4];
return res;
}вы не могли бы позвонить или дать ваш номер, потому как что-то странное происходит.
Или напишите мне в тг @grigscraber, потому что в таком режиме трудно понять что происходит
ReadRegisterModbus - это метод чтения регистров ModBus
Да перемычки выставили по инструкции, и мы то 3 и 4 й регистры получаем ведь. Не могу найти нигде в исходниках что за ошибка -4023, что она вообще означает
программа на borland C++
из LTR43 мы методом ReadRegisterModbus читаем следующие регисты:
#define ADRESS_SENSOR_STATE 0 // Состояние индуктивных датчиков
#define ADRESS_DINA_STATE 1 // Текущее состояние установки ДИНА
#define ADRESS_OUTPUT_SIGNALS 2 // Состояние выходных управляющих сигналов
#define ADRESS_ROAD_TEMPERATURE 3 // Показания пирометра
#define ADRESS_AIR_TEMPERATURE 4 // Показания температурного датчика
#define ADRESS_COMMAND_COUNTER 5 // Счетчик команд от ПК
#define ADRESS_COMMAND_TO_DINA 6 // Команда управления от ПК для ДИНЫ
#define ADRESS_KICK_COUNTER 7 // Счетчик числа ударов при измерение
#define ADRESS_PYRO_TEMPERATURE 8 // Собственная температура пирометра
при чтении регистров всех регисторов кроме 3 и 4 мы получаем ошибку -4023. Регистры 3 и 4 читаются и значения правильные.
При подключении к установке крейта из старой партии, все читается и все работает штатно. Проблема только с крейтами из последней поставки.
процедура ReadRegisterModbus при чтении регистров LTR43 всегда выдает ошибку -4023
и еще, дополнительный вопрос. В чем разница между библиотеками lusbapi34 и lcomp, они же обе работают с модулем Е14-400 ?
Если я правильно понимаю, то для E14-440 у разработчика нет библиотеки обертки на C# над lcomp, поэтому вопрос скорее всего к сообществу. Может у кого то уже есть наработки на эту тему и может поделиться? Годятся даже незавершенные примеры, главное чтобы были объекты для работы с карточкой. Заранее благодарен если кто то поделиться примером.
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4
Многоканальный телефон: +7 (495) 785-95-25
Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Мы работаем с юридическими и физическими лицами, пожалуйста, прикладывайте реквизиты при оформлении заказа
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск