Вопрос по Modbus

Использование протокола Modbus
Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#1

Сообщение Sergey2014 » 14.06.2017{, 17:11}

Дело в том что считать надо из Input Register данные типа float! В исходнике (при компиляции FlProg) ковырялся, чуть голову не сломал, не много шарю в С++ но того что знаю не хватает для понимания! Отсюда вопрос: может кто нибудь подскажет куда копать?
PS: Не пинайте за орфографию

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

Вопрос по Modbus

#2

Сообщение starshoy81 » 14.06.2017{, 20:36}

Sergey2014, считывайте и делите на 100, будет флоат.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Вопрос по Modbus

#3

Сообщение pan » 14.06.2017{, 21:21}

starshoy81, ему не преобразовать, а считать нужно переменную флоат

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

Вопрос по Modbus

#4

Сообщение starshoy81 » 14.06.2017{, 22:02}

pan, ещё вопрос в каком виде передается эта переменная. У меня есть контроллер солнечных батарей с модбас интерфейсом, так он флоат умножает на 100 и в интеджере передает. И как раз в Input registers.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Вопрос по Modbus

#5

Сообщение pan » 14.06.2017{, 22:11}

я не знаю, как написал ТС так я и говорю.

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

Вопрос по Modbus

#6

Сообщение Sancho » 15.06.2017{, 08:43}

уже проходили, работает     Сообщение # 19 

Добавлено (15.06.2017, 08:43)
---------------------------------------------
Надо будет выложить в пользовательские блоки, чтобы не искать...
Последний раз редактировалось Sancho 15.06.2017{, 15:35}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#7

Сообщение Sergey2014 » 15.06.2017{, 17:32}

Спасибо друзья! Буду копать!

Добавлено (15.06.2017, 17:32)
---------------------------------------------
Подключил блок (спасибо Sancho) на выходе блока 0, данные в регистрах есть (подключал к ОРС серверу). Осциллограф в расшифровке протокола пишет что ошибка контрольной суммы (Invalid Checksum) при опросе  Input Register, Coil читает нормально.
Назрел другой вопрос: как отправить float в Input Register? Прошу не судить строго за вопрос, я понимаю что всё просто, но голова уже забита, а сделать надо!
Последний раз редактировалось Sergey2014 15.06.2017{, 17:45}, всего редактировалось 1 раз.

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

Вопрос по Modbus

#8

Сообщение Sancho » 15.06.2017{, 17:53}

Sergey2014 писал(а):данные в регистрах есть (подключал к ОРС серверу)
ОРС сервер считывает флоат правильно?
На первый вход блока - N регистр, на N+1 второй. Прверенно.
Sergey2014 писал(а):Назрел другой вопрос: как отправить float в Input Register?
В INPUT REG другого усройства ОТПРАВИТЬ!!! ничего нельзя, поэтому они так и называются. В них раполагаются значения, считанные с датчиков, вычисленные значения, например мощности.
Их можно создать на устройстве-слэйве, что-бы мастер мог считать показания.

Добавлено (15.06.2017, 17:53)
---------------------------------------------
Проект приложи, посмотрим...
Последний раз редактировалось Sancho 15.06.2017{, 17:55}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#9

Сообщение Sergey2014 » 15.06.2017{, 18:26}

Дело в том, что давненько уже сделал переходник (обманку) на основе Arduino + FlProg. Есть Скада ( в неё лезть нельзя) к ней подключены много приборов разделённые по группам. Так вот там есть старые приборы (их уже не выпускают) и одну группу приборов я уже давно поменял на новые с помощью переходника (там просто Input Reg считал с одного адреса и отправил в другой), а вот сейчас уже подошла другая группа приборов и вот у них блин (чтоб не за матерится) этот флоат!

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

Вопрос по Modbus

#10

Сообщение starshoy81 » 15.06.2017{, 20:46}

Sergey2014, так флоат эти приборы передают одним или двумя регистрами?
Если одним то смотрите сообщение №2
если двумя, то надо сделать конструкцию вида

где H -старший регистр, а L младший.
Вложения
5179832.png

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

Вопрос по Modbus

#11

Сообщение Sancho » 16.06.2017{, 08:39}

Sergey2014 писал(а):Дело в том, что давненько уже сделал переходник (обманку) на основе Arduino + FlProg. Есть Скада ( в неё лезть нельзя) к ней подключены много приборов разделённые по группам. Так вот там есть старые приборы (их уже не выпускают) и одну группу приборов я уже давно поменял на новые с помощью переходника (там просто Input Reg считал с одного адреса и отправил в другой), а вот сейчас уже подошла другая группа приборов и вот у них блин (чтоб не за матерится) этот флоат!
Идея, поправте если я не прав, в том, чтобы  предоставить для скады прибор( ардуино, из которого скада будет читать) в котором будут находится эти самые инпут регистры с типом переменных флоат?
Если так, сделаем обратный блок,раскладывающий флоат на два инпут регистра с типом интегер.
Как вариант, считывать регистры попарно и перекладывать по другим адресам. Уточните суть процесса.
starshoy81, там не интегер, умноженный на сто, там FLOAT(REAL).
Последний раз редактировалось Sancho 16.06.2017{, 08:41}, всего редактировалось 1 раз.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#12

Сообщение Sergey2014 » 16.06.2017{, 13:19}

starshoy81 Спасибо буду разбираться дальше! Sancho всё абсолютно так! Скада сама по себе считывает данные с OPC сервера на который ей указываешь. В моём случае связка MasterOPC Universal Modbus Server + MasterSCADA работает исключительно хорошо со всеми приборами которые работают по Modbas! И свои приборчики делал, на основе нашей любимой FlProg + Arduino nano 328  всё работает на ура! Но вот не всегда всё хорошо и гладко! Блок для раскладки флоат на два интеджера хорошо бы, если не трудно!
Последний раз редактировалось Sergey2014 16.06.2017{, 13:23}, всего редактировалось 1 раз.

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

Вопрос по Modbus

#13

Сообщение starshoy81 » 16.06.2017{, 13:43}

Sergey2014, всё таки, каким количеством регистров передается флоат этими старыми приборами?

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#14

Сообщение Sergey2014 » 16.06.2017{, 14:05}

Собственно вот из документа на прибор. Беда в том что попробовал считать Холдинг Регистры как в описании и ... везде 0.00 вот это да, ОРС сервер считывает всё правильно, и настройки тоже прилагаю
Вложения
9107415.jpg

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#15

Сообщение Sergey2014 » 16.06.2017{, 14:07}

ОРС сервер. Да ещё кстати странно что адреса в ОРС начинаются с 0, если считываю как в описании выдаёт ошибку!
Вложения
7700186.jpg
4051895.jpg
1308597.jpg
Последний раз редактировалось Sergey2014 16.06.2017{, 14:09}, всего редактировалось 1 раз.

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

Вопрос по Modbus

#16

Сообщение Sancho » 16.06.2017{, 15:07}

Sergey2014 писал(а):Sancho всё абсолютно так! Скада сама по себе считывает данные с OPC сервера на который ей указываешь. В моём случае связка MasterOPC Universal Modbus Server + MasterSCADA работает исключительно хорошо со всеми приборами которые работают по Modbas!
Если есть доступ к ОРС то может быть проще поменять в нём в нужных тэгах тип регистра с Input Register на Holding Reg с установкой  ReadOnly? И без заморочек использовать наш FLPRog с этими самыми холдинг рестрами, поддерживающими float?

Добавлено (16.06.2017, 15:05)
---------------------------------------------
Sergey2014 писал(а):ОРС сервер. Да ещё кстати странно что адреса в ОРС начинаются с 0, если считываю как в описании выдаёт ошибку!
Такое бывает, и на это, как правило, производители ОРС серверов обращают внимание, у одних приборов начало в описании регистров с 0, у других с 1. Я привык считать с 0. А в твоём случае как раз с 1. засады бывают, когда адрес, например 4176, а ты не можешь считать, землю роешь. Сдвигаешь на 1 - и всё ОК.
Разобрался - уже хорошо.

Добавлено (16.06.2017, 15:07)
---------------------------------------------
Только почему у тебя(на картинке) типы данных в устройстве и сервере разные?
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#17

Сообщение Sergey2014 » 16.06.2017{, 15:11}

Да Скада- лицензия, ОРС скрыт, а для опытов я у себя уже установил Скаду и ОРС (бесплатные). Для меня уже спортивный интерес определить как эта гадина передаёт данные. Сейчас вот получилось считать Холдинг регистры только тип переменных типа Long Integer. Число 60.0 отправляет прибор в флоат, а я его принимаю как 17008 Long.
PS: Сам не верю что этим занимаюсь, ещё и умных людей отвлекаю

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

Вопрос по Modbus

#18

Сообщение starshoy81 » 16.06.2017{, 15:13}

Sergey2014, ну вот, смотрите мою картинку в сообщении №10. И адреса которые у Вас в документации указаны, переводите из 16-й системы в 10-ю. Флпрог использует 10-ю адресацию.

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

Вопрос по Modbus

#19

Сообщение Sancho » 16.06.2017{, 15:17}

Попробуй считать два соседних регистра как инт16.Отпишись какие цифры.

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

Sergey2014
Рядовой
Сообщения: 11
Зарегистрирован: 14.06.2017{, 17:01}
Репутация: 0

Вопрос по Modbus

#20

Сообщение Sergey2014 » 16.06.2017{, 15:17}

Sancho писал(а):Только почему у тебя(на картинке) типы данных в устройстве и сервере разные?
Да работает и так и так, поэтому в лом менять!

Ответить

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