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

Использование протокола Modbus
starshoy81
Лейтенант
Сообщения: 524
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

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

#1

Сообщение starshoy81 » 02.03.2017{, 00:13}

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


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


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

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

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


Приложил файл с описанием протокола.
Вложения
epsolar_modbus_.pdf
(234.23 КБ) 64 скачивания
2434839.png
6997486.png
2557814.png
Последний раз редактировалось starshoy81 02.03.2017{, 08:57}, всего редактировалось 1 раз.

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

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

#2

Сообщение Sancho » 02.03.2017{, 08:28}

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

starshoy81
Лейтенант
Сообщения: 524
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

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

#3

Сообщение starshoy81 » 02.03.2017{, 09:04}

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

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

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

#4

Сообщение Sancho » 02.03.2017{, 09:23}

У тебя получилось считывать стороними прогами?
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

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

#5

Сообщение Max » 02.03.2017{, 09:38}

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

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

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

#6

Сообщение Sancho » 02.03.2017{, 09:43}

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

Добавлено (02.03.2017, 09:43)
---------------------------------------------
Max
starshoy81 писал(а):С 2хбайтовыми регистрами все работает и показывает отлично. Затык с четырехбайтовыми словами.
Последний раз редактировалось Sancho 02.03.2017{, 09:49}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

starshoy81
Лейтенант
Сообщения: 524
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

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

#7

Сообщение starshoy81 » 02.03.2017{, 10:00}

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

Аватара пользователя
nalnik
Подполковник
Сообщения: 1320
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 96
Откуда: Кисловодск
Имя: Александр

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

#8

Сообщение nalnik » 02.03.2017{, 10:34}

starshoy81

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

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

И обрати внимание на Адраса
Вложения
6690667.jpg
Последний раз редактировалось nalnik 02.03.2017{, 10:44}, всего редактировалось 1 раз.
Я хочу быть добрее, но люди сами нарываются.

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

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

#9

Сообщение Sancho » 02.03.2017{, 10:53}

nalnik,  у starshoy81 пока проблема с чтением - прога читает input регистры по одному, ситать одно long значение из двух регистров не получается.
А для флоат однозначно надо блок пользователя организовывать, для long тоже можно сделать, что-бы меньше места на плате занимало.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

starshoy81
Лейтенант
Сообщения: 524
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

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

#10

Сообщение starshoy81 » 02.03.2017{, 22:49}

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

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

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



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

Адреса в InpReg


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

Всем спасибо за советы
Вложения
_4___-FBD-.ubi
(51.46 КБ) 53 скачивания
7415708.png
3753768.png
5934613.png

Kit
Рядовой
Сообщения: 15
Зарегистрирован: 06.09.2015{, 14:19}
Репутация: 0

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

#11

Сообщение Kit » 17.05.2017{, 14:36}

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

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

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

#12

Сообщение Sancho » 17.05.2017{, 16:23}

Kit, Вы считали указанным способом значения двух регистров, а Вам, как я понимаю, нужен флоат?
Данный пример был необходим для получения переменной типа long integer/
Вам необходимо просто указать переменную типа флоат и адрес первого регистра. И всё, всё остальное сделает программа.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Kit
Рядовой
Сообщения: 15
Зарегистрирован: 06.09.2015{, 14:19}
Репутация: 0

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

#13

Сообщение Kit » 17.05.2017{, 16:43}

Не совсем так. Значение хранится в двух регистрах. Поэтому и считывал оба.
Вложения
6117938.png

Kit
Рядовой
Сообщения: 15
Зарегистрирован: 06.09.2015{, 14:19}
Репутация: 0

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

#14

Сообщение Kit » 17.05.2017{, 16:50}

Вот пример из инструкции.
Вложения
6014375.png

Kit
Рядовой
Сообщения: 15
Зарегистрирован: 06.09.2015{, 14:19}
Репутация: 0

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

#15

Сообщение Kit » 17.05.2017{, 16:56}

Ну и весь мануал. Там есть про представление числа. Но с математикой у меня чего то туго.
Вложения
Eastron_SDM230-.pdf
(507.48 КБ) 86 скачиваний

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

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

#16

Сообщение Sancho » 17.05.2017{, 16:58}

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

Kit
Рядовой
Сообщения: 15
Зарегистрирован: 06.09.2015{, 14:19}
Репутация: 0

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

#17

Сообщение Kit » 17.05.2017{, 17:07}

Но это если Holding регистры? А у меня данные хранятся в Input регистрах.
Там считывается только один регистр. Или я чего то не понял?

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

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

#18

Сообщение Sancho » 17.05.2017{, 17:34}

Сори, вспомнил о модбасе FLPRog.
Сейчас придумаем.

Добавлено (17.05.2017, 17:34)
---------------------------------------------
Если таких преобразований будет несколько в проекте, то правильней будет создать не пользовательский блок , а функцию.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

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

#19

Сообщение Sancho » 17.05.2017{, 17:50}

Прошу попробовать
Вложения
2Int_reg_to_flo.ubi
(13.47 КБ) 67 скачиваний
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Kit
Рядовой
Сообщения: 15
Зарегистрирован: 06.09.2015{, 14:19}
Репутация: 0

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

#20

Сообщение Kit » 17.05.2017{, 19:56}

Спасибо. Работает.
Вот только про функцию я не понял.

Ответить

Вернуться в «Modbus»