1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

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

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

Автор темы
ZIV
здесь недавно
здесь недавно
Сообщения: 50
Зарегистрирован: 31 мар 2010, 09:01
Имя: Igor V. Zhdanov
Страна: Россия
город/регион: Оренбургская обл, Бузулук

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

Сообщение ZIV »

При считывании информации из УВП-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, 13:30
Имя: Алексей
Страна: Россия
город/регион: Омск

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

Сообщение Скорняков Алексей »

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

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

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

Сообщение san »

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

Автор темы
ZIV
здесь недавно
здесь недавно
Сообщения: 50
Зарегистрирован: 31 мар 2010, 09:01
Имя: Igor V. Zhdanov
Страна: Россия
город/регион: Оренбургская обл, Бузулук

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

Сообщение 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)
Аватара пользователя

DelSnos
не первый раз у нас
не первый раз у нас
Сообщения: 323
Зарегистрирован: 26 сен 2010, 10:18
Имя: Artur
Страна: Russia
Поблагодарили: 2 раза

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

Сообщение DelSnos »

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
здесь недавно
здесь недавно
Сообщения: 50
Зарегистрирован: 31 мар 2010, 09:01
Имя: Igor V. Zhdanov
Страна: Россия
город/регион: Оренбургская обл, Бузулук

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

Сообщение ZIV »

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

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

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

Сообщение Владимир Кузнецов »

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

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

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

Сообщение san »

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

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

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

Сообщение Владимир Кузнецов »

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

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

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

Сообщение san »

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

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

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

Сообщение Владимир Кузнецов »

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

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

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

Сообщение san »

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

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