|
|
|
- Участник
- Здесь с 27.09.2023
- Сообщений: 30
|
LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR
процедура ReadRegisterModbus при чтении регистров LTR43 всегда выдает ошибку -4023
|
|
|
|
- Участник
- Здесь с 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 читаются и значения правильные. При подключении к установке крейта из старой партии, все читается и все работает штатно. Проблема только с крейтами из последней поставки.
|
|
|
|
- Сотрудник "Л Кард"
- Здесь с 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 эти перемычки должны быть установлены так:

|
|
|
|
- Участник
- Здесь с 27.09.2023
- Сообщений: 30
|
Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR
ReadRegisterModbus - это метод чтения регистров ModBus Да перемычки выставили по инструкции, и мы то 3 и 4 й регистры получаем ведь. Не могу найти нигде в исходниках что за ошибка -4023, что она вообще означает
|
|
|
|
- Участник
- Здесь с 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, потому что в таком режиме трудно понять что происходит
|
|
|
|
- Участник
- Здесь с 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;
|
|
|
|
- Сотрудник "Л Кард"
- Здесь с 17.04.2014
- Сообщений: 1,401
|
Re: LTR-EU-2 LTR43 + LTR11 новая проблема с новыми LTR
1. Можете проверить версию прошивки LTR43 там где работает и не работает (либо в своей программе строка из TLTR43.ModuleInfo.FirmwareVersion), либо например поставить дема LMS создать эксперимент и войти в обзор подключенного оборудования. 2. В Вашей программе никаких других действий не происходит с LTR43? Никаких запусков синхронного ввода цифровых линий или работы из разных потоков в программе нет? Если оставить только открытие модуля и однократное чтение регистра Modbus (чтобы иcключить влияние последовательности чтений), то так же будет от смены адреса этого чтения то работать, то нет?
|
|
|
|
- Участник
- Здесь с 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
|