Modbus TCP - самопроизвольное смещение адресов Input registers на один.

Modbus TCP Master, при опросе слейва, смещает значения адресов Input registers на один.

В данный форум Вы можете заносить найденные Вами ошибки.При добавления ошибки пожалуйста приложите файлик error.log который находится в папке с установленной программой
Ответить
Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

Modbus TCP - самопроизвольное смещение адресов Input registers на один.

#1

Сообщение Serg_Grn » 05.09.2020{, 16:54}

Добрый день.
FLProg версия 6.3.1, не портативная.
Контроллер NodeMCU, работает как ModBus TCP Master, читает Input registers, в качестве слейва я пробовал использовать разные контроллеры - результат везде один, соответственно проблема точно в Master.
Суть проблемы: после включения контроллера данные по Modbus прилетают правильно в течение примерно 1-2 минут. Потом происходит смещение значений переменных на один адрес вниз, т.е. то, что передаётся слейвом в адресе 0, приходит мастеру в адресе 1, то что передаётся в адресе 1, приходит в адресе 2 и т.д. А то, что передаётся в последнем адресе (у меня он 21), приходит мастеру в адресе 0, т.е. смещение происходит по кругу.
Смотрел блоком "последняя ошибка" - ошибок нет, т.е. данные поступают от слейва правильные, а потом происходит их смещение и в таком виде я читаю значения переменных.
В приложении проект, там нет ничего кроме ModBus, я специально всё убрал, чтоб убедиться что проблема именно в этом.
Вложения
телтест.flp
(246.28 КБ) 31 скачивание

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

Modbus TCP - самопроизвольное смещение адресов Input registers на один.

#2

Сообщение Serg_Grn » 03.12.2020{, 16:29}

Господа, кто нибудь знает, будет эта проблема решаться? :smile37:

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

Modbus TCP - самопроизвольное смещение адресов Input registers на один.

#3

Сообщение Serg_Grn » 08.12.2020{, 16:48}

Нашёл ещё один баг в модбасе - input registers (master TCP) не выводит отрицательные числа, хотя это должна быть переменная integer, на самом деле при отправке отрицательного числа, выводит число типа 65510 и т.д.
Проблему удалось решить созданием ПБ вот с таким кодом:
// x - входные данные (от переменной модбас), xq - выходные данные.
if (x > 32767)
{
xq = x - 65536;
}
else
{
xq = x;
}
ПБ прикрепляю:
modbus-integer_(Code_-_Basic).ubi
(8.42 КБ) 28 скачиваний

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Modbus TCP - самопроизвольное смещение адресов Input registers на один.

#4

Сообщение Sancho » 08.12.2020{, 17:45}

Serg_Grn писал(а):
08.12.2020{, 16:48}
Нашёл ещё один баг в модбасе - input registers (master TCP) не выводит отрицательные числа, хотя это должна быть переменная integer, на самом деле при отправке отрицательного числа, выводит число типа 65510 и т.д.
Вопрос лишь в том, как Вы интерпретируете принятые байты.
При сборке из двух регистров в коде используется word - а это беззнаковое. Приведите к типу инт и будет счастье.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

Modbus TCP - самопроизвольное смещение адресов Input registers на один.

#5

Сообщение Serg_Grn » 13.12.2020{, 20:19}

Serg_Grn писал(а):
05.09.2020{, 16:54}
Приведите к типу инт и будет счастье.
Я имею ввиду, что когда у Автора дойдут руки до модбаса, можно было бы указать в описании, что тип переменной word, а не int, тогда не будет неразберихи.
А так то по сути - это не проблема конечно.

Ответить

Вернуться в «Новые»