- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Получение по Modbbus данных float в InTouch
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 50
- Зарегистрирован: 31 мар 2010, 09:01
- Имя: Igor V. Zhdanov
- Страна: Россия
- город/регион: Оренбургская обл, Бузулук
Получение по Modbbus данных float в InTouch
При считывании информации из УВП-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
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. Это и будет подтверждением того, что регистры перевернутые.
С ответом не опоздал? :)
Если модбас-сервер, с помощью которого вытаскиваются данные, имеет такую функцию, как разворот считываемых регистров, то проблема решена.
Если же не имеет такой чудесной функции, то необходимо ручками переворачивать регистры.
Еще, попробуйте читать регистры со смещением на 1, то есть в Интаче задать адреса: 41032 F, 41033 F, 41034 F ... для проверки, так как небольшие числа без степени лежат в одном регистре. И я уверен, что в одном из регистров вы увидите 10 ... скорее всего это будет 41034F. Это и будет подтверждением того, что регистры перевернутые.
С ответом не опоздал? :)
-
- преподаватель
- Сообщения: 1357
- Зарегистрирован: 01 сен 2008, 18:32
- Имя: Пупена Александр
- Страна: Украина
- город/регион: Киев
- Поблагодарили: 6 раз
Re: Получение по Modbbus данных float в InTouch
Лучше вобще интами передавать, если есть такая возможность. И экономнее будет и масштабировать можно и смещать средствами СКАДА. В старых системах передача флоата редко встречалась и нормально обходились. А в Модбас и подавно флоатов небыло, по-этому где старшее а где младшее слово - это кому как нравится, в разных платформах по-разному. В Интач не знаю как, но во многих скадах из-за остутствия описания в протоколе, дают возможность выбирать порядок следования слов в настройках драйвера.
-
- здесь недавно
- Сообщения: 50
- Зарегистрирован: 31 мар 2010, 09:01
- Имя: Igor V. Zhdanov
- Страна: Россия
- город/регион: Оренбургская обл, Бузулук
Re: Получение по Modbbus данных float в InTouch
УВП-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)
Получение старшего слова и перестановка байтов:
((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)
-
- не первый раз у нас
- Сообщения: 323
- Зарегистрирован: 26 сен 2010, 10:18
- Имя: Artur
- Страна: Russia
- Поблагодарили: 2 раза
Re: Получение по Modbbus данных float в InTouch
Код, конечно, внушает! :) Но тут,конечно лучше решать на уровне OPC.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)
А какая лицензия на InTouch?
Если InTouch with I/O, а не without I/O, то у Вас есть прекрасная возможность использовать IO-сервера, разработанные WW ;)
Если все так,то Вам на заметку DASMBSerial- сервер. Он,кста, умеет производить все Swap-операции.
Да, он заточен под Modicon, но не пугайтесь он должен понять Ваше устройство. Как никак Modbus придумал Schneider ;)
-
- здесь недавно
- Сообщения: 50
- Зарегистрирован: 31 мар 2010, 09:01
- Имя: Igor V. Zhdanov
- Страна: Россия
- город/регион: Оренбургская обл, Бузулук
Re: Получение по Modbbus данных float в InTouch
Уважаемый DelSnos!
Я использовал сервера WW, в том числе и DASMBSerial. Можно посмотреть по ссылке в старттопике. Обращу внимание на следующий момент: УВП-280 не только переворачивает регистры (с этой проблемой драйвер модбас справился бы), но переворачивает еще и байты в слове.[/size]
А код, действительно, к сожалению, внушает... Просто делал в большой спешке, кому нужно, легко упростит. Требовалось получать всего 5 параметров. Главное, сам принцип. :)
Кстати, карта адресов Модбас на оф. сайте немного не верная. И непонятная проблема с архивом. Я ввожу константы в значениях давления, перепада и температуры. В суточной распечатке каждый час разные значения. Техподдержка говорят, что изучают. Для коммерческого учета это очень плохо...
Хотел бы обратиться к уважаемым Админам. Если они посчитают это интересным для форумчан, может быть переименовать тему, например, "Проблемы с УВП-280", и перенести в соответствующую ветку?
Я использовал сервера WW, в том числе и DASMBSerial. Можно посмотреть по ссылке в старттопике. Обращу внимание на следующий момент: УВП-280 не только переворачивает регистры (с этой проблемой драйвер модбас справился бы), но переворачивает еще и байты в слове.[/size]
А код, действительно, к сожалению, внушает... Просто делал в большой спешке, кому нужно, легко упростит. Требовалось получать всего 5 параметров. Главное, сам принцип. :)
Кстати, карта адресов Модбас на оф. сайте немного не верная. И непонятная проблема с архивом. Я ввожу константы в значениях давления, перепада и температуры. В суточной распечатке каждый час разные значения. Техподдержка говорят, что изучают. Для коммерческого учета это очень плохо...
Хотел бы обратиться к уважаемым Админам. Если они посчитают это интересным для форумчан, может быть переименовать тему, например, "Проблемы с УВП-280", и перенести в соответствующую ветку?
-
- не первый раз у нас
- Сообщения: 321
- Зарегистрирован: 31 авг 2011, 22:14
- Имя: Кузнецов Владимир Сергеевич
- Страна: Россия
- город/регион: Казань
- Поблагодарили: 1 раз
Re: Получение по Modbbus данных float в InTouch
ПО должно быть простым для понимания и удобным для программиста. Данные не нужно дублировать. Поэтому данный подход не желателен. Значения придется масштабировать в ПЛК, выполнять с ними какую то работу, а потом повторно масштабировать в SCADA. Это приведет к запутыванию кода, порождению дублированных данных, ошибкам.san писал(а):Лучше вобще интами передавать, если есть такая возможность. И экономнее будет и масштабировать можно и смещать средствами СКАДА. В старых системах передача флоата редко встречалась и нормально обходились.
Если на заре становления ПЛК такая практика ещё могла быть оправдана снижением нагрузки на CPU и улучшением времени реакции системы, то теперь она просто порочна.
-
- преподаватель
- Сообщения: 1357
- Зарегистрирован: 01 сен 2008, 18:32
- Имя: Пупена Александр
- Страна: Украина
- город/регион: Киев
- Поблагодарили: 6 раз
Re: Получение по Modbbus данных float в InTouch
Я не пойму к чему Вы это.Владимир Кузнецов писал(а):ПО должно быть простым для понимания и удобным для программиста. Данные не нужно дублировать. Поэтому данный подход не желателен. Значения придется масштабировать в ПЛК, выполнять с ними какую то работу, а потом повторно масштабировать в SCADA. Это приведет к запутыванию кода, порождению дублированных данных, ошибкам.
Если на заре становления ПЛК такая практика ещё могла быть оправдана снижением нагрузки на CPU и улучшением времени реакции системы, то теперь она просто порочна.
1) Если в ПЛК, например, используется целочисельная арифметика, зачем ему делать масштабирование и преобразование в REAL. Это доп затраты времени цикла ПЛК, а значит операцию которую можно унести в СКАДА, если ей это нужно;
2) Передача флоатов сопровождается разными типа трудностями: несоответсвие формата типов (напомню что в Модбас нет определения передачи флоатов), увеличение в 2 раза количества читаемых данных (для модбас на 485-м это может быть критично);
3) я не предлагаю 2 раза масштабировать
-
- не первый раз у нас
- Сообщения: 321
- Зарегистрирован: 31 авг 2011, 22:14
- Имя: Кузнецов Владимир Сергеевич
- Страна: Россия
- город/регион: Казань
- Поблагодарили: 1 раз
Re: Получение по Modbbus данных float в InTouch
Если ПЛК выполняет роль лишь шлюза между датчиками и SCADA, то конечно никакой обработки данных в нем реализовывать не нужно.
Но обычно это не так.
Раз мы заводим сигнал с датчика температуры/давления в ПЛК, значит нам нужно отслеживать его изменения и по заданным значениям производить какие то действия. Если при этом, ради мифического ускорения, работать не с масштабированым значением, а с кодом АЦП, то на выходе получим продукт, который сложно отлаживать и сопровождать.
Времена медленных ПЛК с малым количеством памяти прошли - экономить нужно не такты процессора, а время работы программиста.
Улучшение цикла ПЛК с 50 мс до 20 не стоит того что бы тратить на это время.
Я имею перед глазами живой пример, где работа с аналоговыми значениями в ПЛК идет в целочисленном виде и это ужасно.
Единственное желание, которое вызывает такой подход - выкинуть и переписать.
Но обычно это не так.
Раз мы заводим сигнал с датчика температуры/давления в ПЛК, значит нам нужно отслеживать его изменения и по заданным значениям производить какие то действия. Если при этом, ради мифического ускорения, работать не с масштабированым значением, а с кодом АЦП, то на выходе получим продукт, который сложно отлаживать и сопровождать.
Времена медленных ПЛК с малым количеством памяти прошли - экономить нужно не такты процессора, а время работы программиста.
Улучшение цикла ПЛК с 50 мс до 20 не стоит того что бы тратить на это время.
Я имею перед глазами живой пример, где работа с аналоговыми значениями в ПЛК идет в целочисленном виде и это ужасно.
Единственное желание, которое вызывает такой подход - выкинуть и переписать.
-
- преподаватель
- Сообщения: 1357
- Зарегистрирован: 01 сен 2008, 18:32
- Имя: Пупена Александр
- Страна: Украина
- город/регион: Киев
- Поблагодарили: 6 раз
Re: Получение по Modbbus данных float в InTouch
Владимир, да Вы очнь капризны, как я посмотрю :-)
Жирных (в хорошем смысле слова) Вам проектов и никогда не лезть в реализованые кем-то системы, и ни в коем случае не реализовывать систему на недорогих ПЛК!
Но далеко не всегда это удаётся. Но использование Modbus RTU вместо скажем хотя-бы Modbus/TCP уже режет возможности. Я б с удовольствием работал всегда только с такими ПЛК как Вы говрите.
...И ещё я хочу наличие Ethernet на борту и USB тоже хочу, так как считаю современные ПЛК без них не правильными. А ещё я считаю, что должен быть процесор - пенёк, так как он копейки стоит, а почему-то ПЛК очень дорогие, а в средине какие-то старые процы. А ещё память которая меряется килобайтами давно должна уйти в прошлое, и мерятся гигабайтами как в ПК. И ещё хочу чтоб все ПЛК программировались на всех языках МЭК, СИ++ и при этом в одной и той же среде (только вот с иделаьной средой я пока не определислся). И ещё.... ну я б мог много чего написать, но думаю мысля моя ясна.
Так что я всё таки не пойму чего Вы меня зацепили!
Жирных (в хорошем смысле слова) Вам проектов и никогда не лезть в реализованые кем-то системы, и ни в коем случае не реализовывать систему на недорогих ПЛК!
Но далеко не всегда это удаётся. Но использование Modbus RTU вместо скажем хотя-бы Modbus/TCP уже режет возможности. Я б с удовольствием работал всегда только с такими ПЛК как Вы говрите.
...И ещё я хочу наличие Ethernet на борту и USB тоже хочу, так как считаю современные ПЛК без них не правильными. А ещё я считаю, что должен быть процесор - пенёк, так как он копейки стоит, а почему-то ПЛК очень дорогие, а в средине какие-то старые процы. А ещё память которая меряется килобайтами давно должна уйти в прошлое, и мерятся гигабайтами как в ПК. И ещё хочу чтоб все ПЛК программировались на всех языках МЭК, СИ++ и при этом в одной и той же среде (только вот с иделаьной средой я пока не определислся). И ещё.... ну я б мог много чего написать, но думаю мысля моя ясна.
Так что я всё таки не пойму чего Вы меня зацепили!
-
- не первый раз у нас
- Сообщения: 321
- Зарегистрирован: 31 авг 2011, 22:14
- Имя: Кузнецов Владимир Сергеевич
- Страна: Россия
- город/регион: Казань
- Поблагодарили: 1 раз
Re: Получение по Modbbus данных float в InTouch
Иронизировать можно сколько угодно, но понять чем руководствовался человек, когда организовывал целочисленное извращение ради 20 сигналов на Modicon Premium, я не в силах.
-
- преподаватель
- Сообщения: 1357
- Зарегистрирован: 01 сен 2008, 18:32
- Имя: Пупена Александр
- Страна: Украина
- город/регион: Киев
- Поблагодарили: 6 раз
Re: Получение по Modbbus данных float в InTouch
Откуда Вы взяли Modicon Premium? Я что-то не замечаю в этом посте такого девайса.Владимир Кузнецов писал(а):Иронизировать можно сколько угодно, но понять чем руководствовался человек, когда организовывал целочисленное извращение ради 20 сигналов на Modicon Premium, я не в силах.
Да даже если бы было и так, смею напомнить, что как раз в TSX Premium под PL7 именно целочисельное регулирование и было (функция PID). Мало того, в большинстве систем (по крайней мере которые мне попадались) всё масштабирование как раз происходило со стороны СКАДА. Да, сегодня всё поменялось (буквально последние 5-8 лет с появлением UNITY PRO). Но реализованных систем осталось масса. Кроме того одна из задач СКАДА - это масштабирование сигнала. А если всё это ещё гнать через порты Modbus RTU или UNITELWAY (коль о премиумах речь пошла), то каждый байт на счету.