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


LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

Вы не вошли.

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

26.06.2026 09:59:55
#1

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

LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

процедура ReadRegisterModbus при чтении регистров LTR43 всегда выдает ошибку -4023

26.06.2026 10:30:28
#2

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

программа на 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 читаются и значения правильные.
При подключении к установке крейта из старой партии, все читается и все работает штатно. Проблема только с крейтами из последней поставки.

26.06.2026 12:17:26
#3

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

Я так понимаю, что речь идёт про работу по RS-485 интерфейсу модуля LTR43.
Отсюда вопросы:
1. Что это за функция такая: ReadRegisterModbus()?
2. При заказе модуля LTR43 были ли указаны требуемые состояния для конфигурационных перемычек X4, X5, X7, X8 и X9.
Подробнее см. информацию для заказа LTR43.
Для работы модуля LTR43 с интерфейсом RS-485 эти перемычки должны быть установлены так:
ltr43_rs485-1.jpeg

26.06.2026 13:39:15
#4

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

ReadRegisterModbus - это метод чтения регистров ModBus

Да перемычки выставили по инструкции, и мы то 3 и 4 й регистры получаем ведь. Не могу найти нигде в исходниках что за ошибка -4023, что она вообще означает

26.06.2026 14:16:19
#5

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

вот реализация метода

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, потому что в таком режиме трудно понять что происходит

26.06.2026 14:18:46
#6

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

и еще, ошибку нашел
#define LTR43_ERR_DATA_TRANSMISSON_ERROR              (-4023)
есть подозрение что новый крейт не успевает в таймауты попадать, хотя и не маленькие выставлены

FLTR43->RS485.SendTimeoutMultiplier = 10;
        FLTR43->RS485.ReceiveTimeoutMultiplier = 20;

26.06.2026 15:29:32
#7

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

1. Можете проверить версию прошивки LTR43 там где работает и не работает (либо в своей программе строка из TLTR43.ModuleInfo.FirmwareVersion), либо например поставить дема LMS создать эксперимент и войти в обзор подключенного оборудования.

2. В Вашей программе никаких других действий не происходит с LTR43? Никаких запусков синхронного ввода цифровых линий или работы из разных потоков в программе нет?
Если оставить только открытие модуля и однократное чтение регистра Modbus (чтобы иcключить влияние последовательности чтений), то так же будет от смены адреса этого чтения то работать, то нет?

26.06.2026 15:44:59
#8

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

Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR

Алексей L Card пишет:

1. Можете проверить версию прошивки LTR43 там где работает и не работает (либо в своей программе строка из TLTR43.ModuleInfo.FirmwareVersion, либо, например, поставить демо LMS, создать эксперимент и войти в обзор подключенного оборудования).

Инициализация LTR43
09:46:28.656  Версия прошивки LTR43: 2.2
09:46:28.656  Дата прошивки LTR43: 03.03.2021
вот с нового, со старого теперь уже в понедельник, с производства все ушли

Алексей L Card пишет:

2. В Вашей программе никаких других действий не происходит с LTR43? Никаких запусков синхронного ввода цифровых линий или работы из разных потоков в программе нет?
Если оставить только открытие модуля и однократное чтение регистра Modbus (чтобы иcключить влияние последовательности чтений), то так же будет от смены адреса этого чтения то работать, то нет?

нет, LTR43 только для связи с ПЛК по ModBus

Контакты

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

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

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Мы работаем с юридическими и физическими лицами, пожалуйста, прикладывайте реквизиты при оформлении заказа
Техническая поддержка: support@lcard.ru

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