Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Получение по Modbbus данных float в InTouch

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее

Автор темы
ZIV
здесь недавно
здесь недавно
Сообщения: 48
Зарегистрирован: 31 мар 2010, 08:01
Ф.И.О.: Igor V. Zhdanov
Откуда: Orenburg

Получение по Modbbus данных float в InTouch

Сообщение ZIV » 17 июн 2010, 06:17

При считывании информации из УВП-280 значения float не правильно отображаются в InTouch, например, вместо 10 показывает 1,634774E-19. Это связано с не корректным считыванием информации из регистров Modbus.
Item выглядит таким образом: 41033 f. Т.е обращаюсь 3-ей функцией к регистрам 1032 и 1033.
RTU запрос: 01 03 04 08 00 02 44 F9
А вот ответ RTU: 01 03 04 00 00 20 41 23 C3. Здесь все правильно, 20 41 как раз и есть 10,0. А вот драйвер не хочет нормально определить.
Можно ли как-нибудь исправить ситуацию? Или это проблемы вычислителя?
По этой ссылке обсуждение на форуме intouch.ru:
http://www.intouch.ru/phpBB2/viewtopic.php?p=3219#3219


Скорняков Алексей
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 02 апр 2010, 12:30
Ф.И.О.: Алексей

Re: Получение по Modbbus данных float в InTouch

Сообщение Скорняков Алексей » 27 авг 2010, 06:03

Проблема не в Интаче, а в самом устройстве (УВП-280 ... выдает сначала старший регистр потом младший, а Интач интерпретирует их наоборот). У меня был подобный опыт.
Если модбас-сервер, с помощью которого вытаскиваются данные, имеет такую функцию, как разворот считываемых регистров, то проблема решена.
Если же не имеет такой чудесной функции, то необходимо ручками переворачивать регистры.
Еще, попробуйте читать регистры со смещением на 1, то есть в Интаче задать адреса: 41032 F, 41033 F, 41034 F ... для проверки, так как небольшие числа без степени лежат в одном регистре. И я уверен, что в одном из регистров вы увидите 10 ... скорее всего это будет 41034F. Это и будет подтверждением того, что регистры перевернутые.
С ответом не опоздал? :)

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Получение по Modbbus данных float в InTouch

Сообщение san » 27 авг 2010, 09:16

Лучше вобще интами передавать, если есть такая возможность. И экономнее будет и масштабировать можно и смещать средствами СКАДА. В старых системах передача флоата редко встречалась и нормально обходились. А в Модбас и подавно флоатов небыло, по-этому где старшее а где младшее слово - это кому как нравится, в разных платформах по-разному. В Интач не знаю как, но во многих скадах из-за остутствия описания в протоколе, дают возможность выбирать порядок следования слов в настройках драйвера.


Автор темы
ZIV
здесь недавно
здесь недавно
Сообщения: 48
Зарегистрирован: 31 мар 2010, 08:01
Ф.И.О.: Igor V. Zhdanov
Откуда: Orenburg

Re: Получение по Modbbus данных float в InTouch

Сообщение ZIV » 16 сен 2010, 05:44

УВП-280 не только переворачивает регистры (с этой проблемой драйвер модбас справился бы), но переворачивает еще и байты в слове. Поэтому считываю как целое и преобразовываю в Интаче вот таким образом (может, кому пригодится):
Получение старшего слова и перестановка байтов:
((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))
Получение младшего слова и перестановка байтов:
((T1 SHR 24)+(T1 SHL 8 SHR 16))
Преобразование:
H31=(((a31 - (Int(a31/128))*128)+128)*65536+b31)*2**((Int(a31/128)) - 150)
Делаем подстановку в последнюю формулу и получаем в итоге:
(((((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16)) - (Int(((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))/128))*128)+128)*65536+((T1 SHR 24)+(T1 SHL 8 SHR 16)))*2**((Int(((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))/128)) - 150)

Аватара пользователя

DelSnos
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 26 сен 2010, 09:18
Ф.И.О.: Artur Makaev
Поблагодарили: 2 раза
Контактная информация:

Re: Получение по Modbbus данных float в InTouch

Сообщение DelSnos » 01 окт 2010, 09:00

ZIV писал(а):УВП-280 не только переворачивает регистры (с этой проблемой драйвер модбас справился бы), но переворачивает еще и байты в слове. Поэтому считываю как целое и преобразовываю в Интаче вот таким образом (может, кому пригодится):
Получение старшего слова и перестановка байтов:
((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))
Получение младшего слова и перестановка байтов:
((T1 SHR 24)+(T1 SHL 8 SHR 16))
Преобразование:
H31=(((a31 - (Int(a31/128))*128)+128)*65536+b31)*2**((Int(a31/128)) - 150)
Делаем подстановку в последнюю формулу и получаем в итоге:
(((((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16)) - (Int(((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))/128))*128)+128)*65536+((T1 SHR 24)+(T1 SHL 8 SHR 16)))*2**((Int(((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))/128)) - 150)


Код, конечно, внушает! :) Но тут,конечно лучше решать на уровне OPC.

А какая лицензия на InTouch?

Если InTouch with I/O, а не without I/O, то у Вас есть прекрасная возможность использовать IO-сервера, разработанные WW ;)

Если все так,то Вам на заметку DASMBSerial- сервер. Он,кста, умеет производить все Swap-операции.

Да, он заточен под Modicon, но не пугайтесь он должен понять Ваше устройство. Как никак Modbus придумал Schneider ;)


Автор темы
ZIV
здесь недавно
здесь недавно
Сообщения: 48
Зарегистрирован: 31 мар 2010, 08:01
Ф.И.О.: Igor V. Zhdanov
Откуда: Orenburg

Re: Получение по Modbbus данных float в InTouch

Сообщение ZIV » 02 окт 2010, 16:50

Уважаемый DelSnos!
Я использовал сервера WW, в том числе и DASMBSerial. Можно посмотреть по ссылке в старттопике. Обращу внимание на следующий момент: УВП-280 не только переворачивает регистры (с этой проблемой драйвер модбас справился бы), но переворачивает еще и байты в слове.[/size]
А код, действительно, к сожалению, внушает... Просто делал в большой спешке, кому нужно, легко упростит. Требовалось получать всего 5 параметров. Главное, сам принцип. :)
Кстати, карта адресов Модбас на оф. сайте немного не верная. И непонятная проблема с архивом. Я ввожу константы в значениях давления, перепада и температуры. В суточной распечатке каждый час разные значения. Техподдержка говорят, что изучают. Для коммерческого учета это очень плохо...
Хотел бы обратиться к уважаемым Админам. Если они посчитают это интересным для форумчан, может быть переименовать тему, например, "Проблемы с УВП-280", и перенести в соответствующую ветку?


Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 21:14
Ф.И.О.: Кузнецов Владимир Сергеевич

Re: Получение по Modbbus данных float в InTouch

Сообщение Владимир Кузнецов » 02 фев 2013, 14:46

san писал(а):Лучше вобще интами передавать, если есть такая возможность. И экономнее будет и масштабировать можно и смещать средствами СКАДА. В старых системах передача флоата редко встречалась и нормально обходились.

ПО должно быть простым для понимания и удобным для программиста. Данные не нужно дублировать. Поэтому данный подход не желателен. Значения придется масштабировать в ПЛК, выполнять с ними какую то работу, а потом повторно масштабировать в SCADA. Это приведет к запутыванию кода, порождению дублированных данных, ошибкам.
Если на заре становления ПЛК такая практика ещё могла быть оправдана снижением нагрузки на CPU и улучшением времени реакции системы, то теперь она просто порочна.

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Получение по Modbbus данных float в InTouch

Сообщение san » 02 фев 2013, 16:58

Владимир Кузнецов писал(а):ПО должно быть простым для понимания и удобным для программиста. Данные не нужно дублировать. Поэтому данный подход не желателен. Значения придется масштабировать в ПЛК, выполнять с ними какую то работу, а потом повторно масштабировать в SCADA. Это приведет к запутыванию кода, порождению дублированных данных, ошибкам.
Если на заре становления ПЛК такая практика ещё могла быть оправдана снижением нагрузки на CPU и улучшением времени реакции системы, то теперь она просто порочна.

Я не пойму к чему Вы это.
1) Если в ПЛК, например, используется целочисельная арифметика, зачем ему делать масштабирование и преобразование в REAL. Это доп затраты времени цикла ПЛК, а значит операцию которую можно унести в СКАДА, если ей это нужно;
2) Передача флоатов сопровождается разными типа трудностями: несоответсвие формата типов (напомню что в Модбас нет определения передачи флоатов), увеличение в 2 раза количества читаемых данных (для модбас на 485-м это может быть критично);
3) я не предлагаю 2 раза масштабировать


Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 21:14
Ф.И.О.: Кузнецов Владимир Сергеевич

Re: Получение по Modbbus данных float в InTouch

Сообщение Владимир Кузнецов » 02 фев 2013, 18:05

Если ПЛК выполняет роль лишь шлюза между датчиками и SCADA, то конечно никакой обработки данных в нем реализовывать не нужно.
Но обычно это не так.
Раз мы заводим сигнал с датчика температуры/давления в ПЛК, значит нам нужно отслеживать его изменения и по заданным значениям производить какие то действия. Если при этом, ради мифического ускорения, работать не с масштабированым значением, а с кодом АЦП, то на выходе получим продукт, который сложно отлаживать и сопровождать.
Времена медленных ПЛК с малым количеством памяти прошли - экономить нужно не такты процессора, а время работы программиста.
Улучшение цикла ПЛК с 50 мс до 20 не стоит того что бы тратить на это время.
Я имею перед глазами живой пример, где работа с аналоговыми значениями в ПЛК идет в целочисленном виде и это ужасно.
Единственное желание, которое вызывает такой подход - выкинуть и переписать.

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Получение по Modbbus данных float в InTouch

Сообщение san » 02 фев 2013, 18:26

Владимир, да Вы очнь капризны, как я посмотрю :-)
Жирных (в хорошем смысле слова) Вам проектов и никогда не лезть в реализованые кем-то системы, и ни в коем случае не реализовывать систему на недорогих ПЛК!
Но далеко не всегда это удаётся. Но использование Modbus RTU вместо скажем хотя-бы Modbus/TCP уже режет возможности. Я б с удовольствием работал всегда только с такими ПЛК как Вы говрите.
...И ещё я хочу наличие Ethernet на борту и USB тоже хочу, так как считаю современные ПЛК без них не правильными. А ещё я считаю, что должен быть процесор - пенёк, так как он копейки стоит, а почему-то ПЛК очень дорогие, а в средине какие-то старые процы. А ещё память которая меряется килобайтами давно должна уйти в прошлое, и мерятся гигабайтами как в ПК. И ещё хочу чтоб все ПЛК программировались на всех языках МЭК, СИ++ и при этом в одной и той же среде (только вот с иделаьной средой я пока не определислся). И ещё.... ну я б мог много чего написать, но думаю мысля моя ясна.
Так что я всё таки не пойму чего Вы меня зацепили!


Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 21:14
Ф.И.О.: Кузнецов Владимир Сергеевич

Re: Получение по Modbbus данных float в InTouch

Сообщение Владимир Кузнецов » 03 фев 2013, 22:13

Иронизировать можно сколько угодно, но понять чем руководствовался человек, когда организовывал целочисленное извращение ради 20 сигналов на Modicon Premium, я не в силах.

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Получение по Modbbus данных float в InTouch

Сообщение san » 03 фев 2013, 22:30

Владимир Кузнецов писал(а):Иронизировать можно сколько угодно, но понять чем руководствовался человек, когда организовывал целочисленное извращение ради 20 сигналов на Modicon Premium, я не в силах.
Откуда Вы взяли Modicon Premium? Я что-то не замечаю в этом посте такого девайса.
Да даже если бы было и так, смею напомнить, что как раз в TSX Premium под PL7 именно целочисельное регулирование и было (функция PID). Мало того, в большинстве систем (по крайней мере которые мне попадались) всё масштабирование как раз происходило со стороны СКАДА. Да, сегодня всё поменялось (буквально последние 5-8 лет с появлением UNITY PRO). Но реализованных систем осталось масса. Кроме того одна из задач СКАДА - это масштабирование сигнала. А если всё это ещё гнать через порты Modbus RTU или UNITELWAY (коль о премиумах речь пошла), то каждый байт на счету.


Вернуться в «Интерфейсы, протоколы, связь»



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

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