Работа с переменными типа Time и DateTime
Версия для печати


Форум:  НТО Терси-КБ
Тема:  http://tersy.ru/index.php?module=pnForum&func=viewtopic&topic=66

Работа с переменными типа Time и DateTime


1.  Neurox,  26.05.2009 16:16

В свете расчета времени наработки оборудования возникли следующие вопросы:

В документации на СT скрипты есть описание фукций T_I(Time): integer. но компилятор ее не понимает.
приходится извращятся Блок (Time_to_Float)--->блок (Float_To_Integer). Причем!! данная цепочка написаная на СТ не работает, а вот на блоках-работает(ошибка типов)
Как использовать функцию T_I() ?

П.С про DateTime позже сформулирую.




2.  flash,  27.05.2009 09:07
Здравствуйте!

Neurox
В документации на СT скрипты есть описание фукций T_I(Time): integer. но компилятор ее не понимает.


К сожалению, в документации содержится ошибка. Функция T_I(Time): Integer не поддерживается.

Neurox
приходится извращятся Блок (Time_to_Float)--->блок (Float_To_Integer). Причем!! данная цепочка написаная на СТ не работает, а вот на блоках-работает(ошибка типов)


Компилятор языка ST действительно содержит ошибку, из-за которой использование Time_to_Float в редакторе алгоритмов версии 3.2.20 не представляется возможным. Если вы более подробно опишете свою задачу, то, вероятно, мы сможем подсказать вам альтернативное решение.

Замеченные вами ошибки будут исправлены в обновлении Каскад-САУ до версии 3.2.21

Изменено: flash, 27.05.2009 09:43

3.  Neurox,  11.06.2009 12:49
Пожелания по поводу переменных типа Time и DateTime.

элемент Diff:
1.удобней было-бы получать разность не в полных часах, минутах и т.д. в в виде переменной DateTime. а ее уже можно потом разложить на Integer значения. годы и месяцы тоже должны вычитатся.

например 11/06/2009 10ч-25м-36сек минус 10/06/2009 9-25-36 равно 0/0/0 23-0-0.

2.для таймерной переменно тоже удобно DateTime применить.

Еще несовсем понятны настройки элемента управления "Дата и время" описания на него нигде не нашел.

ну "дата и время" понятно.
а как работают "счетчик времени" и "интервал времени"?

4.  Roman,  11.06.2009 13:34
Neurox
элемент Diff:
1.удобней было-бы получать разность не в полных часах, минутах и т.д. в в виде переменной DateTime. а ее уже можно потом разложить на Integer значения. годы и месяцы тоже должны вычитатся.

например 11/06/2009 10ч-25м-36сек минус 10/06/2009 9-25-36 равно 0/0/0 23-0-0.

Для хранения интервала времени используется тип TIME. Выход mS блока DT_Diff как раз и содержит значение интервала в виде TIME значения, а не долю миллисекнд в дополнение к секундам, минутам и часам, как может показаться. Значение выходов Hrs, Min, Sec - тот же результат, что и на выходе mS, но в разных единицах - в часах, в минутах и в секундах.

Neurox2.для таймерной переменно тоже удобно DateTime применить.

Все строго в соответствии со стандартом. Тип DATE_TIME - это календарное время. Тип TIME - длительность, интервал времени.

NeuroxЕще несовсем понятны настройки элемента управления "Дата и время" описания на него нигде не нашел.

ну "дата и время" понятно.
а как работают "счетчик времени" и "интервал времени"?

Документ "Редактор мнемосхем. Руководство оператора", пункт 3.10.11.

"Дата и время" - простое отображение времени, полученного с помощью блока DT_Get() и записанного в точку.

"Интервал времени" - отображение значения переменной типа TIME, записанной в точку. Используется для отображения интервала между двумя временами, напрмер, с выхода mS блока DT_Diff().

"Счетчик времени" - разница между временем, записанным в точку с помощью блока DT_Get() и текущим временем контроллера. Используется, как правило, для отображения времени работы оборудования. Например, если в момент включения насоса в точку записать текущее время, то элемент Счетчик времени будет показывать увеличивающееся время работы насоса.

5.  Neurox,  11.06.2009 13:48
Цитатано в привычных часах+минутах+секундах.


это не так.

мне приходится делать

hours:=hours+переменная_возвращающая часы
minutes:=minutes+переменная возвращающая минуты
hours:=hours+(minutes/60)
minutes:=minutes mod 60

в меременной минуты отображаются часы*60. в секундах секунды*60

Это кстати в приложении №1 к документации по редактору алгоритмов описано.

Изменено: Neurox, 11.06.2009 13:52

6.  Roman,  11.06.2009 14:00
Neurox
Цитатано в привычных часах+минутах+секундах.

это не так.

в меременной минуты отображаются часы*60. в секундах секунды*60

Извините, ошибся. Сообщение #4 выше подправил.

7.  Neurox,  11.06.2009 14:22
я собственно об этом и говорю. неудобно работать с Diff.

8.  Roman,  11.06.2009 15:32
Объясните, пожалуйста, а в чем неудобство блока DT_Diff()? Как Вы используете разницу между двумя датами?

9.  Neurox,  11.06.2009 16:50
мне нужно расчитывать общее время в течении которого переменная допустим Status_M9A (BOOL) была равна TRUE.
допустим в течении месяца она менялась то FALSE то TRUE с разными интервалами. ну надо эти интервалы поскладывать и получить итоговое за месяц. (и за год тоже).

причем формат отображения часы:минуты---- 512 часов 32 минуты

10.  Roman,  11.06.2009 17:01
А чем не подходит тип TIME? Заведите переменную, прибавляйте к ней значение с выхода DT_Diff(время_TRUE, время_FALSE) и записывайте в точку. Отображение на мнемосхеме сделайте с помощью элемента "Дата и время" в нужном формате.

11.  Neurox,  11.06.2009 17:11
точно.
я это какраз попробовал после вашего описания работы элемента "Дата и время".
действительно удобней для реализации отображения.

для записи в сводки всеравно преобразование делать.
или есть механизм встроенный как в сводке тип Time в виде часов и минут отобразить?



Изменено: Neurox, 11.06.2009 17:12

12.  Roman,  11.06.2009 17:16
В сводках тоже есть поле типа "Дата и Время" для отображения интервала. Почему бы не попробывать его использовать?

13.  Neurox,  11.06.2009 17:28
там год/месяц/число убрать нельзя (( даже обнулть.

14.  flash,  15.06.2009 15:56
Neuroxтам год/месяц/число убрать нельзя (( даже обнулть.


Объясню, как сделать отображение интервала времени в сводках, таким же, как на мнемосхемах:
1. В сводках, диалоге свойств поля "Дата и время" на закладке "Точка" в списке "Значение" выбираем тип значения "Интервал времени (миллисекунды)"
2. Переходим на закладку "Отображение". В списке "Максимум" выбираем "Часы", в списке "Формат" выбираем "Часы+Минуты".

Это должно помочь.

15.  Neurox,  16.06.2009 11:00
Подскажите, какой максимальный интервал времени может хранится в переменной типа Time?

16.  flash,  16.06.2009 11:05
NeuroxПодскажите, какой максимальный интервал времени может хранится в переменной типа Time?


Значение Time-переменной ограничено константой Timer_Max = 1E15 миллисекунд

Изменено: flash, 16.06.2009 11:08

17.  Neurox,  18.06.2009 09:27
Добрый день!
Подскажите, можно ли управлять таймерной переменной из блоков ST?

18.  flash,  18.06.2009 09:44
NeuroxДобрый день!
Подскажите, можно ли управлять таймерной переменной из блоков ST?


Здравствуйте!
Управлять TIME-переменной из ST можно. Для этого используются вызовы процедур TStart(TIME_VAR) и TStop(TIME_VAR).
Вызовы TStart/TStop могут быть внутри IF, CASE, WHILE, FOR, REPEAT.

Например, условное управление таймером:
if NeedStartTimer then
TStart(MyTimer);
end_if;

19.  dmitry,  11.08.2015 17:11
Roman
Документ "Редактор мнемосхем. Руководство оператора", пункт 3.10.11.

"Дата и время" - простое отображение времени, полученного с помощью блока DT_Get() и записанного в точку.



Добрый день!
Задача нетривиальная, но... прошу проконсультировать.
Требуется вывести на мнемосхему значение текущих даты и времени.
Для этого разместил на мнемосхеме два элемента "Дата и время" - для первого задал формат отображения "dd/mm/yyyy" для второго "hh:nn:ss".

В редакторе алгоритмов создал переменную типа DateTime "VarDT", которой присваиваю значение функцией DT_Get; "VarDT := DT_Get;".

Как я понимаю, типов точек всего три: FLOAT, INTEGER и BOOLEAN.
Не совсем понятно, какой должен быть тип точки для привязки к переменной типа DateTime "VarDT" в редакторе алгоритмов и в последствии для привязки к двум элементам "Дата и время" в графическом редакторе.

20.  dmitry,  13.08.2015 17:07
dmitry
Roman
Документ "Редактор мнемосхем. Руководство оператора", пункт 3.10.11.

"Дата и время" - простое отображение времени, полученного с помощью блока DT_Get() и записанного в точку.



Добрый день!
Задача нетривиальная, но... прошу проконсультировать.
Требуется вывести на мнемосхему значение текущих даты и времени.
Для этого разместил на мнемосхеме два элемента "Дата и время" - для первого задал формат отображения "dd/mm/yyyy" для второго "hh:nn:ss".

В редакторе алгоритмов создал переменную типа DateTime "VarDT", которой присваиваю значение функцией DT_Get; "VarDT := DT_Get;".

Как я понимаю, типов точек всего три: FLOAT, INTEGER и BOOLEAN.
Не совсем понятно, какой должен быть тип точки для привязки к переменной типа DateTime "VarDT" в редакторе алгоритмов и в последствии для привязки к двум элементам "Дата и время" в графическом редакторе.


Вопрос снят.