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

Вывод вещественного числа в WinCC 2008, SP3

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

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

Здравствуйте, уважаемые коллеги.
Я почитал, что уже написали до меня, но для меня это не совсем подходит - похожая тема есть: viewtopic.php?t=13388, но там версия WinCC другая, соответственно я таких пунктов у себя не нахожу.
Суть проблемы: вывести значение в поле output в формате с плавающей точкой. И почему-то именно формат float или real отсутвуют в списке. Хотя мне это странно - аналоговый сигнал проще отображать в формате с плавающей точкой. Допустим я беру переменную уже после перемасштабирования - т.е. у неё уже представление real - почему нет механизмов напрямую вывести такие значения? Я читал про использование каких-то скриптов для преобразования. C WinCC мало работал. Буду благодарен за советы.

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

У вас большое число или маленькое? Если маленькое указываете OutputFormat что-то типа 9,999.
Если большое - 999,9, или какое вам подходит. Универсального варианта который сам подстраивается под значение тега - нет.
Можно нагородить скриптами но зачем?
WinCC 7.4 SP1 Upd15, Step5.6
Аватара пользователя

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

В том и дело - он мне в выборе не даёт поставить 9,999 или хоть что-то с запятой. Сама переменная на которую ссылается тэг находится в блоке данных и имеет тип DWORD - там уже перемасштабированное значение, снятое с аналогового канала. Я нашёл видео, где человек объяснял как сделать впринципе вывод числа real - но он там ввёл внутренний тэг, соответсвенно real-типа и у него там был в выборе 9,999. Но в этом случае нужен механизм постоянного переноса значения из переменной, которая мне нужна в этот внутренний тег типа real. Я такого механизма пока не знаю, плюс как-то это всё сложно - должно быть проще - указал в теге, что он связан с переменной вещественного типа - дайте мне возможность вывести эту переменную как есть - без всяких округлений.

AlexandrGr
освоился
освоился
Сообщения: 217
Зарегистрирован: 26 май 2022, 12:10
Имя: Александр
Страна: Россия
город/регион: lipetsk
Благодарил (а): 3 раза
Поблагодарили: 17 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение AlexandrGr »

Alex80 писал(а): 15 ноя 2023, 12:10 блоке данных и имеет тип DWORD
Поменяйте тип на real.

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

DWORD это же вид представления данных, а не тип переменной, как я понимаю. Можно и число с плавающей точкой 32бит представить как DWORD и целое число 32бит представить как DWORD. У вас этот тег вообще какое значение имеет? Это целое число или с точкой?
WinCC 7.4 SP1 Upd15, Step5.6
Аватара пользователя

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

AlexandrGr писал(а): 15 ноя 2023, 12:13 Поменяйте тип на real.
Думал про это - но программа рабочая, правда работал CPU 315 с другой панелью - MONITOUCH модель: V606eM20, от которой не знают пароль. Собственного с этого всё и началось - оборудование (компрессор) сначала приказали разобрать, так он простоял около двух лет. Потом приказали собрать - когда собрали выяснилось, что панель почему-то не принимает пароль. Мне поручено переписать HMI-программу под панель фирмы Siemens. На родной панели всё отображалось корректно. Без десятых долей вывести в поля я могу - с этим проблем нет.
Переделать в DB тип данных этого поля - думаю это потащит за собой переделывание интерфейсов функций, как минимум, а то и переписка самих функций, которые работают с этим DB. Я то думал обойдусь малой кровью - найду переменные которые выводились, вводились - раз она уже работала - значит они должны быть уже в правильном формате представления. Но увы и ах...

Отправлено спустя 1 минуту 38 секунд:
makesstr писал(а): 15 ноя 2023, 12:21 DWORD это же вид представления данных, а не тип переменной, как я понимаю. Можно и число с плавающей точкой 32бит представить как DWORD и целое число 32бит представить как DWORD. У вас этот тег вообще какое значение имеет? Это целое число или с точкой?
Это уже число с плавающей точкой. Тоже думал про это. По идее DWORD говорит только о длинне переменной, а не о её внутреннем представлении. Думаете можно безболезненно поменять?

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

Если это уже число с плавающей точкой но просто в представлении DWORD, то в WinCC на этом теге указываете тип Floating-point number 32-bit IEEE 754 и все.
WinCC 7.4 SP1 Upd15, Step5.6

I_m
освоился
освоился
Сообщения: 256
Зарегистрирован: 28 сен 2022, 15:26
Имя: Андрей
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение I_m »

Alex80 писал(а): 15 ноя 2023, 13:01 По идее DWORD говорит только о длинне переменной
Всё так, только не о "внутреннем представлении", а о её содержании, значении для "конечного потребителя". Внутреннее представление - это как раз DWORD. А содержание - от битовой маски до fp 32-бит.
Аватара пользователя

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

Да - получилось. По крайней мере он дал возможность поменять. Спасибо большое - дальше буду разбираться. Думаю там ещё много всего любопытного.
Аватара пользователя

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

Ещё вопросик появился: как правильно передавать значение типа S5TIME?
Сначала я думал, что для этого используются специальное поле "Date-Time Field". Но попробовав его использовать - понял, что не для этого. Вернулся к полю "IO Field". Но какой формат там ставить? по смыслу подходит "Time", но он явно конфликтует с самой переменной расположенной в блоке данных и имеющей тип "S5TIME". Не конфликтует обычный "Decimal", но это же просто для десятичных чисел в представлении. Я читал про организацию переменных типа "S5TIME" - там в BCD формате в младших 12 битах, потом ещё 2 разряда база времени. Как правильно передать?

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

Насколько я знаю - по простому никак. Я писал функцию которая переводит S5Time в Time.
WinCC 7.4 SP1 Upd15, Step5.6
Аватара пользователя

Nicolayy
освоился
освоился
Сообщения: 282
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 9 раз
Поблагодарили: 64 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Nicolayy »

Alex80 писал(а): 15 ноя 2023, 13:01 Сама переменная на которую ссылается тэг находится в блоке данных и имеет тип DWORD - там уже перемасштабированное значение, снятое с аналогового канала
...
Переделать в DB тип данных этого поля - думаю это потащит за собой переделывание интерфейсов функций, как минимум, а то и переписка самих функций, которые работают с этим DB.
Вы что хотите сказать, что кто на S7-300 наваял проект, где в блоке данных объявил тип DWord для переменной, которая по факту является Real? Да еще и какие-то функции написал, которые принимают аргументы типа Dword, а работают с ними как с Real? Господи... :o Не, ну понятно, что прямая адрессация и работай с данными как хочешь... но по-моему это какой-то идиотизм...
Аватара пользователя

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

Nicolayy писал(а): 17 ноя 2023, 00:25 Вы что хотите сказать, что кто на S7-300 наваял проект, где в блоке данных объявил тип DWord для переменной, которая по факту является Real? Да еще и какие-то функции написал, которые принимают аргументы типа Dword, а работают с ними как с Real? Господи... Не, ну понятно, что прямая адрессация и работай с данными как хочешь... но по-моему это какой-то идиотизм...
Да - он там даже для перемасштабирования не стандартную функцию использует, а свою - ручками написанную.

AppCreator
здесь недавно
здесь недавно
Сообщения: 33
Зарегистрирован: 02 фев 2023, 10:38
Имя: Владимир
Страна: РФ
город/регион: Восьмипалатинск
Благодарил (а): 4 раза
Поблагодарили: 12 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение AppCreator »

Nicolayy писал(а): 17 ноя 2023, 00:25 но по-моему это какой-то идиотизм
Все зависит от конкретной ситуации. В данном случае возможно панель MONITOUCH подключалась по какому-нибудь Modbus. Если драйвер обмена устройства не позволяет менять порядок регистров/байтов для корректного представления данных, зачастую приходится выполнять данные манипуляции программно в коде ПЛК, и в данном случае DWORD - то, что нужно для такого рода операций.
Аватара пользователя

Nicolayy
освоился
освоился
Сообщения: 282
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 9 раз
Поблагодарили: 64 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Nicolayy »

AppCreator писал(а): 17 ноя 2023, 08:42 В данном случае возможно панель MONITOUCH подключалась по какому-нибудь Modbus. Если драйвер обмена устройства не позволяет менять порядок регистров/байтов для корректного представления данных, зачастую приходится выполнять данные манипуляции программно в коде ПЛК
Если бы суть была в этом, то эти данные не считались бы нормально, когда для них в WinCC просто указали тип данных Float (=Real).

p.s. Кстати, забавен тот факт, что менять 16-битные слова местами не умеют и сименовские панели в том числе. Поэтому контроллер Siemens не может нормально обмениваться данными типа Real с панелями того же Siemens'а по modbus ))) это какой-то позор, да :shock: :shock:
Аватара пользователя

Автор темы
Alex80
осмотрелся
осмотрелся
Сообщения: 131
Зарегистрирован: 15 дек 2020, 20:29
Имя: Алексей
Страна: Россия
город/регион: Пенза
Благодарил (а): 28 раз
Поблагодарили: 8 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Alex80 »

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

Nicolayy
освоился
освоился
Сообщения: 282
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 9 раз
Поблагодарили: 64 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение Nicolayy »

Alex80 писал(а): 17 ноя 2023, 12:30 Не понятно только как предыдущая панель корректно работала.
Ну, возможно, что как с 8-битным числом BCD-формата. В самом формате S5TIME оно там 12-битное используется (три 4-битных BCD-числа), но может быть достаточно и двух, так что...

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 35 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение ZuElecRu »

Сейчас посмотрел как я выводил время в секундах: выводено как Decimal в формате 999. Data type тега выставлен Timer. Масштабирование тега 1000:1 (т.к. из ПЛК получим время в миллисекундах) .WinCC Flexible 2008. Панель MP277. Формат данных в блоке данных - S5TIME.

Так же делал в ТИА Portal V16 для КТР400, только тип данных тега -Time.

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

ZuElecRu писал(а): 20 ноя 2023, 13:22 Сейчас посмотрел как я выводил время в секундах: выводено как Decimal в формате 999. Data type тега выставлен Timer. Масштабирование тега 1000:1 (т.к. из ПЛК получим время в миллисекундах) .WinCC Flexible 2008. Панель MP277. Формат данных в блоке данных - S5TIME.

Так же делал в ТИА Portal V16 для КТР400, только тип данных тега -Time.
Это не совсем правильно. В S5Time в качестве единицы времени может быть 10мс;100мс;1с;10с, а в BCD указывается количество этих единиц. Если конкретно ваше время такое что единица времени 1 секунда, то вы УГАДАЛИ с масштабированием 1000:1, в остальных трех случаях ваш вариант переводит S5Time в секунды неправильно.
PS. Что-то не клеится, S5Time/1000 адекватное время никак не получим. Просто TIME/1000 = секунды, правильно, как вы и сказали в ПЛК TIME указывает количество миллисекунд. S5Time минимальный блок 10мс, поэтому если и делить то не на 1000, а на 100, да и то этот вариант применим к одному варианту из трех (блок 10мс от 10мс до 9с990мс).
WinCC 7.4 SP1 Upd15, Step5.6

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 35 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение ZuElecRu »

makesstr писал(а): 20 ноя 2023, 16:28 PS. Что-то не клеится, S5Time/1000 адекватное время никак не получим.
Да я как то тоже задумался после ваших слов и полез еще раз все проверить и в мануал. Все работает как я описал, проверил на "живом"оборудовании CPU317 и MP277 на реально работающей сейчас установке. В ПЛК в блоке данных формат данных S5TIME. Тег в WinCC Flexible - Timer. Масштабирование тега 1000:1. Сравниваю число в ПЛК в мониторе Simatic Manager и на панели MP277. Все в соответсвии с Вашими словами и теорией. На пример, на панели стоит 10 сек, в ПЛК в бинарном формате 2#0001_0001_0000_0000 = 100*100ms=10000ms=10s.
Задаю с панели 10 минут, ввожу в поле соотвественно 600 секунд. В ПЛК 2#0010_0110_0000_0000 - базис поменялся как видим. 600*1s=600s=10m. Все как бы работает. Видимо идет автоматическая конвертация данных из формата S5TIME при опросе тега.

Масштабирование я ввел чуть позже, поначалу так и выводил время в миллисекундах, но механики, для которых нониус есть повседневность жизни, отказались воспринимать время в тясячных секунды. Пришлось масштабировать. :-)

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

ZuElecRu писал(а): 21 ноя 2023, 11:30
makesstr писал(а): 20 ноя 2023, 16:28 PS. Что-то не клеится, S5Time/1000 адекватное время никак не получим.
Да я как то тоже задумался после ваших слов и полез еще раз все проверить и в мануал. Все работает как я описал, проверил на "живом"оборудовании CPU317 и MP277 на реально работающей сейчас установке. В ПЛК в блоке данных формат данных S5TIME. Тег в WinCC Flexible - Timer. Масштабирование тега 1000:1. Сравниваю число в ПЛК в мониторе Simatic Manager и на панели MP277. Все в соответсвии с Вашими словами и теорией. На пример, на панели стоит 10 сек, в ПЛК в бинарном формате 2#0001_0001_0000_0000 = 100*100ms=10000ms=10s.
Задаю с панели 10 минут, ввожу в поле соотвественно 600 секунд. В ПЛК 2#0010_0110_0000_0000 - базис поменялся как видим. 600*1s=600s=10m. Все как бы работает. Видимо идет автоматическая конвертация данных из формата S5TIME при опросе тега.

Масштабирование я ввел чуть позже, поначалу так и выводил время в миллисекундах, но механики, для которых нониус есть повседневность жизни, отказались воспринимать время в тясячных секунды. Пришлось масштабировать. :-)
Я сравниваю с WinCC 7.4, и там в принципе нет такого формата как Timer. Есть только Integer с/без знака и длиной 8/16/32 через которое выводят количество "блоков времени". Там само по себе ничто не конвертируется.
То есть данные с ПЛК в формате Time(32bit) без проблем конвертируется в WinCC как Unsigned 32-bit value/1000=количество сек.
А S5Time никак.
А если и попробовать то 2#0001_0001_0000_0000 = 4352 что никак не перевести в 10 секунд.
А 2#0010_0110_0000_0000 = 9728 что тоже не лучше.
WinCC 7.4 SP1 Upd15, Step5.6

ZuElecRu
освоился
освоился
Сообщения: 290
Зарегистрирован: 09 авг 2016, 13:49
Имя: Чистилин Андрей Анатольевич
Страна: Россия
город/регион: Малоярославец
Благодарил (а): 31 раз
Поблагодарили: 35 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение ZuElecRu »

makesstr писал(а): 21 ноя 2023, 12:05 Я сравниваю с WinCC 7.4, и там в принципе нет такого формата как Timer.
Топикстартер делает панель и скорее всего средствами ТИА, так что все должно получиться. Со взрослым WinCC я не работал, так только мимо проходил, насколько я осведомлен - это не про панели, а про компьютеры и сервера?

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Вывод вещественного числа в WinCC 2008, SP3

Сообщение makesstr »

ZuElecRu писал(а): 22 ноя 2023, 10:44
makesstr писал(а): 21 ноя 2023, 12:05 Я сравниваю с WinCC 7.4, и там в принципе нет такого формата как Timer.
Топикстартер делает панель и скорее всего средствами ТИА, так что все должно получиться. Со взрослым WinCC я не работал, так только мимо проходил, насколько я осведомлен - это не про панели, а про компьютеры и сервера?
Да
WinCC 7.4 SP1 Upd15, Step5.6

stesl
эксперт
эксперт
Сообщения: 1011
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 94 раза
Поблагодарили: 136 раз

Вывод вещественного числа в WinCC 2008, SP3

Сообщение stesl »

makesstr писал(а): 15 ноя 2023, 13:13 Если это уже число с плавающей точкой но просто в представлении DWORD, то в WinCC на этом теге указываете тип Floating-point number 32-bit IEEE 754 и все.
И зачем тогда запятая? Если число остаётся целым?

Отправлено спустя 8 минут 30 секунд:
makesstr писал(а): 21 ноя 2023, 12:05 Да - получилось

Любопытно - что получилось? Было на выводе 220в,стало 220.00?

Смотрите,если у вас реальное число идёт в формате десятичного, то есть 22035, и вы понимаете, что это 220,35В, то нужно просто сделать шифт запятой в I/O окошке.

И ещё непонятно, пишите в названии темы WinCC 2008 sp3, а это Flexible, а потом оказывается что все таки ТИА...
Или я не все осмыслил по текстам?)
Ответить

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