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

работа функции FC34

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить
Аватара пользователя

Автор темы
gazman
здесь недавно
здесь недавно
Сообщения: 17
Зарегистрирован: 20 янв 2017, 11:48
Имя: Каравкин Павел Николаевич
Страна: Россия
город/регион: Рязань

работа функции FC34

Сообщение gazman »

здравствуйте

делаю счётчик рабочего времени

у меня есть две временные метки #NEW_TIME и #NEW_TIME2

мне нужно получить разность между ними. использую IEC функцию FC34

A I 0.1
CALL "SB_DT_DT"
DT1 :=#NEW_TIME
DT2 :=#NEW_TIME2
RET_VAL:=#TIME_RAB

в #NEW_TIME записываю текущее время при нажатии на кнопку. Далее значение помещаю в DB. значение статичное.
в #NEW_TIME2 ни чего не кладу. после вычитания получается огромное число (крайнее значение): 2147483647

пробовал в #NEW_TIME2 записывать нули. результат тот же.
мне нужно преобразовать данные DATE_AND_TIME в TIME. поэтому я вычитаю из текущего времени нулевое значение. вариант может не слишком красивый, но я не знаю как сделать проще.

помогите, пожалуйста

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 14 раз
Поблагодарили: 59 раз

работа функции FC34

Сообщение winb »

А зачем DATE_AND_TIME в TIME преобразовывать? TIME - это промежуток времени, DATE_AND_TIME - это конкретное значение даты-времени. Даже не представляю, как их между собой "преобразовать" можно. Вышеописанный способ с "нулями в DT2" - точно не прокатит, минимальное значение DATE_AND_TIME - DT#1990-1-1-0:0:0.0. Сама по себе, эта функция SB_DT_DT - возвращает значение промежутка времени между двумя значениями даты/времени, причём этот промежуток не должен быть в пределах от T#-24D_20H_31M_23S_648MS до
T#24D_20H_31M_23S_647MS.
Выбранный Вами способ решения задачи - явно требует коррекции.
Кстати, использование вышеприведенной программной конструкции - не корректно, CALL не зависит от РЛО, нужно использовать условные переходы:
A i0.1
jcn m01
CALL ...
m0.1: ...
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»