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

В данный форум Вы можете заносить найденные Вами ошибки.При добавления ошибки пожалуйста приложите файлик error.log который находится в папке с установленной программой
Ответить
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

Добрый день.
FLProg версия 6.3.1, не портативная.
Контроллер NodeMCU, работает как ModBus TCP Master, читает Input registers, в качестве слейва я пробовал использовать разные контроллеры - результат везде один, соответственно проблема точно в Master.
Суть проблемы: после включения контроллера данные по Modbus прилетают правильно в течение примерно 1-2 минут. Потом происходит смещение значений переменных на один адрес вниз, т.е. то, что передаётся слейвом в адресе 0, приходит мастеру в адресе 1, то что передаётся в адресе 1, приходит в адресе 2 и т.д. А то, что передаётся в последнем адресе (у меня он 21), приходит мастеру в адресе 0, т.е. смещение происходит по кругу.
Смотрел блоком "последняя ошибка" - ошибок нет, т.е. данные поступают от слейва правильные, а потом происходит их смещение и в таком виде я читаю значения переменных.
В приложении проект, там нет ничего кроме ModBus, я специально всё убрал, чтоб убедиться что проблема именно в этом.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

Господа, кто нибудь знает, будет эта проблема решаться? :smile37:
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

Нашёл ещё один баг в модбасе - input registers (master TCP) не выводит отрицательные числа, хотя это должна быть переменная integer, на самом деле при отправке отрицательного числа, выводит число типа 65510 и т.д.
Проблему удалось решить созданием ПБ вот с таким кодом:
[scroll]
// x - входные данные (от переменной модбас), xq - выходные данные.
if (x > 32767)
{
xq = x - 65536;
}
else
{
xq = x;
}
[/scroll]
ПБ прикрепляю:
modbus-integer_(Code_-_Basic).ubi
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

Serg_Grn писал(а): 08 дек 2020, 16:48 Нашёл ещё один баг в модбасе - input registers (master TCP) не выводит отрицательные числа, хотя это должна быть переменная integer, на самом деле при отправке отрицательного числа, выводит число типа 65510 и т.д.
Вопрос лишь в том, как Вы интерпретируете принятые байты.
При сборке из двух регистров в коде используется word - а это беззнаковое. Приведите к типу инт и будет счастье.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей