Страница 1 из 2

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 00:13
starshoy81
У меня есть ЗУ от солнечных батарей Epsolar tracer 3215bn, в котором есть возможность выдавать параметры по модбас рту. Сделал проект с выдачей инфо на вебстраницу. С 2хбайтовыми регистрами все работает и показывает отлично. Затык с четырехбайтовыми словами. По описанию протокола ЗУ, данные передаются двумя двухбайтовыми словами, младшим и старшим из которых и надо собрать 4хбайтовое слово.
вот картинка пояснение


вот адреса для примера


Перепробовал все типы переменных для регистра, пробовал пользовательские блоки преобразования типов данных. Результат все время "0". Причем значение там точно есть, оно отображается на комплектном дисплее-контроллере.

Есть ли возможность в штатными средствами флпрога вытащить эти регистры?

Еще интересно каким образом получить вот такую информацию:


Приложил файл с описанием протокола.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 08:28
Sancho
Один регистр = 2 байта = 16 бит.
Два регистра = 4 байта = 32 бита.
4 байта = одна переменная типа флоат или long(word, int)/
Так что никаких проблем возникнуть не должно, я думаю.
P.S.
Попробуй считать, если уж совсем не получается, эти данные с помощью компьютера и проги Modbus Universal MasterOPC Server 32 СКАЧАТЬ
Проверил из примера в pdf пункт 4 - всё правильно, там longint( или DINT, как кому больше нравиться)
Примерная конфигурация для тебя к Modbus Universal MasterOPC Server 32

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 09:04
starshoy81
Sancho, я пробовал все типы переменных, они все показывают 0. Вопрос в том в каком порядке флпрог интепретирует эти байты. А спецпрограммой я и так могу считать, мне нужно в флпроге.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 09:23
Sancho
У тебя получилось считывать стороними прогами?

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 09:38
Max
starshoy81 писал(а):Sancho, я пробовал все типы переменных, они все показывают 0.
Вы точно уверены, что у вас ModBas в этом устройстве активирован?
Еще, надо правильно МодБас шины соединять. Через дренажные резисторы минусы соединять нужно, либо внимательно само подключение посмотреть.
У меня такая же история была, МодБас ничего передавать не хотел, потом соединил по одной из схем (с дренажным резистором) и все сразу заработало...

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 09:43
Sancho
Если не читает эти регтстры как Holding, тогда читай как Input, потом High reg * 65536 + Low reg = Uns long int
Не забывай переводить адреса из Hex в Dec для FLPRog

Добавлено (02.03.2017, 09:43)
---------------------------------------------
Max
starshoy81 писал(а):С 2хбайтовыми регистрами все работает и показывает отлично. Затык с четырехбайтовыми словами.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 10:00
starshoy81
Sancho
Sancho писал(а):Если не читает эти регтстры как Holding, тогда читай как Input, потом High reg * 65536 + Low reg = Uns long int
Вот это попробую.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 10:34
nalnik
starshoy81

Почитай, я делаю так;
таи и чтение и передача

http://forum.flprogwiki.ru/viewtopic.php?f=5&t=1795

И обрати внимание на Адраса

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 10:53
Sancho
nalnik,  у starshoy81 пока проблема с чтением - прога читает input регистры по одному, ситать одно long значение из двух регистров не получается.
А для флоат однозначно надо блок пользователя организовывать, для long тоже можно сделать, что-бы меньше места на плате занимало.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 02 мар 2017, 22:49
starshoy81
Sancho писал(а):Если не читает эти регтстры как Holding, тогда читай как Input, потом High reg * 65536 + Low reg = Uns long int
Этот совет попал в яблочко :). Всё заработало.

В общем моя первая ошибка была в том, что я считывал регистры не из той области памяти (вместо инпут читал холдинг).
Вторая заключается в том, что я забыл чему меня учили когда то :).

Слепил простенький блок пользователя для двух математических операций, чтобы меньше занимало места на экране.



На 100 делю т.к. в ЗУ видимо счет ведёт целочисленными и выдает в интерфейс данные целочисленные.

Адреса в InpReg


блок пользователя в приложении.

Всем спасибо за советы

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 14:36
Kit
Можно подниму тему. Вот считал я со счетчика показания напряжения. Указанным методом. Имею на выходе число 436a2b41. По описанию число в формате IEEE 754 . В онлайн калькуляторе я его могу перевести в десятичный вид. А как мне его в FLprog перевести? Может кто сталкивался?

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 16:23
Sancho
Kit, Вы считали указанным способом значения двух регистров, а Вам, как я понимаю, нужен флоат?
Данный пример был необходим для получения переменной типа long integer/
Вам необходимо просто указать переменную типа флоат и адрес первого регистра. И всё, всё остальное сделает программа.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 16:43
Kit
Не совсем так. Значение хранится в двух регистрах. Поэтому и считывал оба.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 16:50
Kit
Вот пример из инструкции.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 16:56
Kit
Ну и весь мануал. Там есть про представление числа. Но с математикой у меня чего то туго.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 16:58
Sancho
Kit, Вы меня недопоняли/недоуслышали - при чтении флоат переменных АВТОМАТИЧЕСКИ читаются ДВА регистра. Необходимо лишь указать первый.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 17:07
Kit
Но это если Holding регистры? А у меня данные хранятся в Input регистрах.
Там считывается только один регистр. Или я чего то не понял?

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 17:34
Sancho
Сори, вспомнил о модбасе FLPRog.
Сейчас придумаем.

Добавлено (17.05.2017, 17:34)
---------------------------------------------
Если таких преобразований будет несколько в проекте, то правильней будет создать не пользовательский блок , а функцию.

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 17:50
Sancho
Прошу попробовать

Как считать 4хбайтовое слово по модбасу?

Добавлено: 17 май 2017, 19:56
Kit
Спасибо. Работает.
Вот только про функцию я не понял.