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

Время в Wincc

Ответить

Автор темы
maksik
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 24 янв 2017, 10:43
Имя: Хохлов Максим Андреевич
Страна: Россия
город/регион: Невьянск Свердловской области
Благодарил (а): 1 раз

Время в Wincc

Сообщение maksik »

Добрый день! Подскажите пожалуйста как можно перевести время получаемое с контроллера S7-300 в миллисекундах отобразить в Wincc 7.2 d окне поле ввода/вывода в формате ЧЧ:ММ:СС.

v0v
не первый раз у нас
не первый раз у нас
Сообщения: 343
Зарегистрирован: 12 дек 2018, 14:47
Имя: Влад
Благодарил (а): 1 раз
Поблагодарили: 44 раза

Время в Wincc

Сообщение v0v »

Если Вы имеете ввиду системное время CPL то посмотрите SFC0,SFC1,FC3 из библиотеки.Можете воспользоваться блоком ниже (данные вывода времени в формате HEX)
L P##gdt //in: Date_And_Time
LAR1
L W [AR1,P#0.0]
T #db_num //TEMP: Word
OPN DB [#db_num]
L D [AR1,P#2.0]
LAR1
L B [AR1,P#0.0]
T #year //OUT: Byte
L B [AR1,P#1.0]
T #month //OUT: Byte
L B [AR1,P#2.0]
T #day //OUT: Byte
L B [AR1,P#3.0]
T #hour //OUT: Byte
L B [AR1,P#4.0]
T #min //OUT: Byte
L B [AR1,P#5.0]
T #sec //OUT: Byte

asuprog
здесь недавно
здесь недавно
Сообщения: 67
Зарегистрирован: 01 авг 2019, 02:24
Имя: Вячеслав
Благодарил (а): 9 раз
Поблагодарили: 6 раз

Время в Wincc

Сообщение asuprog »

Наверняка можно и в WinCC найти подход. Начиная с скриптов. Вплоть до использования этого же кода. Ссылочные переменные в WinCC, если не ошибаюсь - допускаются.

Автор темы
maksik
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 24 янв 2017, 10:43
Имя: Хохлов Максим Андреевич
Страна: Россия
город/регион: Невьянск Свердловской области
Благодарил (а): 1 раз

Время в Wincc

Сообщение maksik »

Добрый день! Подскажите как написать скрип в Wicc для перевод из тега формата time в формат string что бы получилось ЧЧ:ММ:СС в окне поля ввода/вывода.

Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Время в Wincc

Сообщение Sew_Eurodrive »

Блин где то недавно видел что то похожее на форуме то там писать помоему писать ничего не нужно,а где то меняется формат.
Но это не точно. :ges_hmm:

Автор темы
maksik
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 24 янв 2017, 10:43
Имя: Хохлов Максим Андреевич
Страна: Россия
город/регион: Невьянск Свердловской области
Благодарил (а): 1 раз

Время в Wincc

Сообщение maksik »

А не подскажите где это можно найти или как называется эта тема

Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Время в Wincc

Сообщение Sew_Eurodrive »

Вот тема совсем рядом чуть ниже название Int To Float

Автор темы
maksik
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 24 янв 2017, 10:43
Имя: Хохлов Максим Андреевич
Страна: Россия
город/регион: Невьянск Свердловской области
Благодарил (а): 1 раз

Время в Wincc

Сообщение maksik »

Подскажите, а как значение полученое в милисекунндах при помощи скрипта разложить в формате ЧЧ:ММ:СС.

Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Время в Wincc

Сообщение Sew_Eurodrive »

Я не проще ли из ПЛК вытянуть значение в ЧЧ:ММ:СС и им оперировать.
https://www.youtube.com/watch?v=7jqTXc8T2co

Автор темы
maksik
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 24 янв 2017, 10:43
Имя: Хохлов Максим Андреевич
Страна: Россия
город/регион: Невьянск Свердловской области
Благодарил (а): 1 раз

Время в Wincc

Сообщение maksik »

Я данный тег получаю из DB

Sew_Eurodrive
освоился
освоился
Сообщения: 211
Зарегистрирован: 04 фев 2019, 07:07
Имя: Андрей
Благодарил (а): 13 раз
Поблагодарили: 2 раза

Время в Wincc

Сообщение Sew_Eurodrive »

А можно конкретнее ,увидеть логику,блок или словами описать как получается то DB
Я к тому что может есть какие другие пути реализации.

v0v
не первый раз у нас
не первый раз у нас
Сообщения: 343
Зарегистрирован: 12 дек 2018, 14:47
Имя: Влад
Благодарил (а): 1 раз
Поблагодарили: 44 раза

Время в Wincc

Сообщение v0v »

maksik писал(а): 28 фев 2020, 12:25 Я данный тег получаю из DB
Этот тег в формате time, как Вы его получаете? Если это системное время контроллера то это одно, а если это создано S5 таймером (min 10ms) или из HW clock memory это другое. И точно это формат time(T#1D_2H_3M_4S_5MS)?

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

Время в Wincc

Сообщение stesl »

v0v, конкретизирую ) Тоже ковыряюсь по этой теме
Исходно: переменная типа Time, используется для IEC таймера. Задается T#5m30s, например.
Задача: отобразить ее в удобоваримом виде на WinCC 7.4

Time хранится в 4х битах. Пока что доковырял до такого - читаем DWORD, получаем данные в милисекундах, делим на 1000, отображаем. Ввод тоже можно корректировать (* 1000), а по цивилизованнее как то можно? )

PS С S5Timer попроще, на выходе есть переменная WORD в оставшихся секундах

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

Время в Wincc

Сообщение makesstr »

[youtube]https://www.youtube.com/watch?v=4vRuj1VeXEM[/youtube]
Вот готовое решение
WinCC 7.4 SP1 Upd15, Step5.6

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

Время в Wincc

Сообщение stesl »

makesstr писал(а): 28 янв 2021, 07:57 Вот готовое решение
Увы, это не решение. Для начала, речь в ролике о формате Date_And_Time, и то что там данные побайтно лежат я в курсе. С переменной типа Time такой фокус не проходит

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

Время в Wincc

Сообщение makesstr »

Почему не решение? Автору поста надо было время контроллера вывести в WinCC, на видео как раз это, при чем здесь формат Time?
Или для вас надо разбить TIME или S5TIME на составляющие?
WinCC 7.4 SP1 Upd15, Step5.6

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

Время в Wincc

Сообщение stesl »

makesstr писал(а): 28 янв 2021, 08:31 Почему не решение?
Пардон, я принял Ваш ответ, как ответ на мой вопрос, а не автора )

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

Время в Wincc

Сообщение makesstr »

stesl писал(а): 28 янв 2021, 08:39
makesstr писал(а): 28 янв 2021, 08:31 Почему не решение?
Пардон, я принял Ваш ответ, как ответ на мой вопрос, а не автора )
[+]
FUNCTION_BLOCK FB_INT_TO_S5TIME
//Перевод времени INT в WORD S5TIME
//Минимальное время 0/10мс
//Максимальное время 2ч46м30с (9990000мс)
VAR_INPUT
Hours :INT; //Часы
Minutes :INT; //Минуты
Seconds :INT; //Секунды
Milliseconds :INT; //Милисекунды
END_VAR

VAR_TEMP
HoursDINT :DINT;
MinutesDINT :DINT;
SecondsDINT :DINT;
MillisecondsDINT :DINT;
END_VAR

VAR_OUTPUT
ERROR :BOOL; //Неверно введено время/превышение
millisecondsTot :DINT; //Время в миллисекундах
STEPS :WORD; //Количество шагов
BaseMUL :WORD; //Множитель/шаг
TimeWord :WORD; //Время переведенное в S5TIME
END_VAR

HoursDINT:=INT_TO_DINT(Hours);
MinutesDINT:=INT_TO_DINT(Minutes);
SecondsDINT:=INT_TO_DINT(Seconds);
MillisecondsDINT:=INT_TO_DINT(Milliseconds);

IF Hours<0 OR Minutes<0 OR Seconds<0 OR Hours>2 THEN millisecondsTot:=0; ERROR:=TRUE; BaseMUL:=W#16#0000; TimeWord:=W#16#0000; ELSE
ERROR:=FALSE; millisecondsTot:=(3600*HoursDINT+60*MinutesDINT+SecondsDINT)*1000+MillisecondsDINT;
IF millisecondsTot>9990000 THEN ERROR:=TRUE; BaseMUL:=W#16#abcd; ELSE
IF millisecondsTot/10 <= 999 THEN STEPS:=INT_TO_BCD(DINT_TO_INT(millisecondsTot/10)); BaseMUL:=W#16#0000; //шаг 10мс
ELSIF millisecondsTot/100 <= 999 THEN STEPS:=INT_TO_BCD(DINT_TO_INT(millisecondsTot/100)); BaseMUL:=W#16#1000; //шаг 100мс
ELSIF millisecondsTot/1000 <= 999 THEN STEPS:=INT_TO_BCD(DINT_TO_INT(millisecondsTot/1000)); BaseMUL:=W#16#2000; //шаг 1с
ELSE STEPS:=INT_TO_BCD(DINT_TO_INT(millisecondsTot/10000)); BaseMUL:=W#16#3000; //шаг 10с
END_IF;
END_IF;
TimeWord:=BaseMUL OR STEPS;
END_IF;
END_FUNCTION_BLOCK
Я как-то для себя писал FB на SCL переводящий заданное время в S5TIME, если вам нужно разбить S5TIME, можно написать что-то инверсное на базе этого. Если не S5TIME, a TIME, то писать другое.
WinCC 7.4 SP1 Upd15, Step5.6

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

Время в Wincc

Сообщение stesl »

makesstr писал(а): 28 янв 2021, 08:44 TimeWord:=BaseMUL OR STEPS;
Впечатляет по размаху мысли ) Без всякой иронии. Вы, случайно работу не ищите? Есть вакансия...
Спасибо, но такое писать некогда и лень ) Пока что и мс/1000 кажутся вариантом. Который так себе конечно, но работает.

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

Время в Wincc

Сообщение ZuElecRu »

v0v писал(а): 26 фев 2020, 16:08 L P##gdt //in: Date_And_Time
что в качестве входной переменной? Указатель? Или DB10.DB...?
Можете код прокомментировать, очень интересно, я никак не освою эти косвенные адресации

v0v
не первый раз у нас
не первый раз у нас
Сообщения: 343
Зарегистрирован: 12 дек 2018, 14:47
Имя: Влад
Благодарил (а): 1 раз
Поблагодарили: 44 раза

Время в Wincc

Сообщение v0v »

Загружаете SFC1(Read_System_Clock) в Temp прописываете (например gdt в формате date_and_time). Выход с SFC1(CDT) будет #gdt. Это и будет вход LP##gdt

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

Время в Wincc

Сообщение ZuElecRu »

И потом мы берем указатель на адрес переменной #gpt и загружаем в адресный регистр, а потом мы читаем слово из адресного регистра, которое по идее должно указать на номер блока данных, но #gpt то у нас лежит сейчас в локальных переменных... и все я приплыл... что будет тогда в #db_num?

v0v
не первый раз у нас
не первый раз у нас
Сообщения: 343
Зарегистрирован: 12 дек 2018, 14:47
Имя: Влад
Благодарил (а): 1 раз
Поблагодарили: 44 раза

Время в Wincc

Сообщение v0v »

Попробуйте просто вставить SFC1 и на выходе прописать локальную переменную (d_t) в формате Date_And_Time в TEMP и далее написать
L P##d_t
L LB [AR1,P#0.0]
T MW 2
L LB [AR1,P#1.0]
T MW 4
L LB [AR1,P#2.0]
T MW 6
L LB [AR1,P#3.0]
T MW 8
L LB [AR1,P#4.0]
T MW 10
L LB [AR1,P#5.0]
T MW 12
L LB [AR1,P#6.0]
T MW 14
и сделайте симуляцию в шестнадцатеричном коде будет дата вашего PC
Аватара пользователя

DamaskinoS
здесь недавно
здесь недавно
Сообщения: 16
Зарегистрирован: 16 июл 2015, 11:02
Имя: Антон ибн Александрович
Страна: Казахстан
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Время в Wincc

Сообщение DamaskinoS »

#include "GlobalDefinitions.h"
char* TextValue(char* screenName, char* objectName, char* propertyName)
{
//Вставьте код, начиная отсюда
time_t rawtime;
struct tm * timeinfo;
char str_time[MAX_PATH] = {'\0'};

time (&rawtime);
timeinfo = localtime(&rawtime);

sprintf(str_time, "%.2d.%.2d.%.4d %.2d:%.2d:%.2d",timeinfo->tm_mday, timeinfo->tm_mon + 1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);

return str_time;
}
:ges_slap:
Ответить

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