FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Четверг, 21.09.2017, 15:02
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » Как считать 4хбайтовое слово по модбасу?
Как считать 4хбайтовое слово по модбасу?
starshoy81 Дата: Четверг, 02.03.2017, 00:13 | Сообщение # 1
Майор
Группа: Проверенные
Сообщений: 170
Награды: 1
Репутация: 0
Статус: Offline
У меня есть ЗУ от солнечных батарей Epsolar tracer 3215bn, в котором есть возможность выдавать параметры по модбас рту. Сделал проект с выдачей инфо на вебстраницу. С 2хбайтовыми регистрами все работает и показывает отлично. Затык с четырехбайтовыми словами. По описанию протокола ЗУ, данные передаются двумя двухбайтовыми словами, младшим и старшим из которых и надо собрать 4хбайтовое слово.
вот картинка пояснение


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


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

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

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


Приложил файл с описанием протокола.
Прикрепления: 2557814.png(27Kb) · 6997486.png(9Kb) · 2434839.png(17Kb) · epsolar_modbus_.pdf(234Kb)


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


Если не получится на контроллере - сделаю на тразисторах и 155/176...

Сообщение отредактировал Sancho - Четверг, 02.03.2017, 09:23
 
starshoy81 Дата: Четверг, 02.03.2017, 09:04 | Сообщение # 3
Майор
Группа: Проверенные
Сообщений: 170
Награды: 1
Репутация: 0
Статус: Offline
Sancho, я пробовал все типы переменных, они все показывают 0. Вопрос в том в каком порядке флпрог интепретирует эти байты. А спецпрограммой я и так могу считать, мне нужно в флпроге.
 
Sancho Дата: Четверг, 02.03.2017, 09:23 | Сообщение # 4
Полковник
Группа: Проверенные
Сообщений: 428
Награды: 13
Репутация: 12
Статус: Offline
У тебя получилось считывать стороними прогами?

Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
Max Дата: Четверг, 02.03.2017, 09:38 | Сообщение # 5
Гуру
Группа: Проверенные
Сообщений: 588
Награды: 15
Репутация: 4
Статус: Offline
Цитата starshoy81 ()
Sancho, я пробовал все типы переменных, они все показывают 0.

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


Сообщение отредактировал Max - Четверг, 02.03.2017, 09:42
 
Sancho Дата: Четверг, 02.03.2017, 09:43 | Сообщение # 6
Полковник
Группа: Проверенные
Сообщений: 428
Награды: 13
Репутация: 12
Статус: Offline
Если не читает эти регтстры как Holding, тогда читай как Input, потом High reg * 65536 + Low reg = Uns long int
Не забывай переводить адреса из Hex в Dec для FLPRog smile

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


Если не получится на контроллере - сделаю на тразисторах и 155/176...

Сообщение отредактировал Sancho - Четверг, 02.03.2017, 09:49
 
starshoy81 Дата: Четверг, 02.03.2017, 10:00 | Сообщение # 7
Майор
Группа: Проверенные
Сообщений: 170
Награды: 1
Репутация: 0
Статус: Offline
Sancho
Цитата Sancho ()
Если не читает эти регтстры как Holding, тогда читай как Input, потом High reg * 65536 + Low reg = Uns long int
Вот это попробую.
 
nalnik Дата: Четверг, 02.03.2017, 10:34 | Сообщение # 8
Подполковник
Группа: Проверенные
Сообщений: 281
Награды: 7
Репутация: 1
Статус: Offline
starshoy81

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

http://flprog.ru/forum/5-1795-1

И обрати внимание на Адраса
Прикрепления: 6690667.jpg(24Kb)


Я не злопамятный, Я записываю.

Сообщение отредактировал nalnik - Четверг, 02.03.2017, 10:44
 
Sancho Дата: Четверг, 02.03.2017, 10:53 | Сообщение # 9
Полковник
Группа: Проверенные
Сообщений: 428
Награды: 13
Репутация: 12
Статус: Offline
nalnik,  у starshoy81 пока проблема с чтением - прога читает input регистры по одному, ситать одно long значение из двух регистров не получается.
А для флоат однозначно надо блок пользователя организовывать, для long тоже можно сделать, что-бы меньше места на плате занимало.


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
starshoy81 Дата: Четверг, 02.03.2017, 22:49 | Сообщение # 10
Майор
Группа: Проверенные
Сообщений: 170
Награды: 1
Репутация: 0
Статус: Offline
Цитата Sancho ()
Если не читает эти регтстры как Holding, тогда читай как Input, потом High reg * 65536 + Low reg = Uns long int


Этот совет попал в яблочко :). Всё заработало.

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

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



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

Адреса в InpReg


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

Всем спасибо за советы smile
Прикрепления: 5934613.png(5Kb) · 3753768.png(5Kb) · 7415708.png(4Kb) · _4___-FBD-.ubi(51Kb)
 
Kit Дата: Среда, 17.05.2017, 14:36 | Сообщение # 11
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Можно подниму тему. Вот считал я со счетчика показания напряжения. Указанным методом. Имею на выходе число 436a2b41. По описанию число в формате IEEE 754 . В онлайн калькуляторе я его могу перевести в десятичный вид. А как мне его в FLprog перевести? Может кто сталкивался?
 
Sancho Дата: Среда, 17.05.2017, 16:23 | Сообщение # 12
Полковник
Группа: Проверенные
Сообщений: 428
Награды: 13
Репутация: 12
Статус: Offline
Kit, Вы считали указанным способом значения двух регистров, а Вам, как я понимаю, нужен флоат?
Данный пример был необходим для получения переменной типа long integer/
Вам необходимо просто указать переменную типа флоат и адрес первого регистра. И всё, всё остальное сделает программа.


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
Kit Дата: Среда, 17.05.2017, 16:43 | Сообщение # 13
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Не совсем так. Значение хранится в двух регистрах. Поэтому и считывал оба.
Прикрепления: 6117938.png(17Kb)
 
Kit Дата: Среда, 17.05.2017, 16:50 | Сообщение # 14
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Вот пример из инструкции.
Прикрепления: 6014375.png(45Kb)
 
Kit Дата: Среда, 17.05.2017, 16:56 | Сообщение # 15
Рядовой
Группа: Проверенные
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Ну и весь мануал. Там есть про представление числа. Но с математикой у меня чего то туго. wacko
Прикрепления: Eastron_SDM230-.pdf(507Kb)
 
Форум » Основной » Спросить у знатоков » Как считать 4хбайтовое слово по модбасу?
Страница 1 из 212»
Поиск:

FLProg © 2017
Яндекс.Метрика