Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: Использование переменной TIME

  1. #1

    Question Использование переменной TIME

    Здравствуйте! Помогите начинающему, пожалуйста.
    Есть ПЛК 100 и МВУ8.У. Необходимо, чтобы унифицированный сигнал напряжения, выходящий с МВУ8 менялся во времени, как синусоида (или косинусоида). Я пробовал массивы, цикл FOR - ничего не помогает.
    В CoDeSyS есть понятие переменной типа TIME. Возможно, именно это поможет мне. Только я не знаю, как ее грамотно использовать.
    Не мог бы кто-нибудь помочь и написать пример цикла с использованием этой переменной? Например, чтобы сигнал менялся с 0 до 10 В в течении 5 секунду, а потом обратно (с 10 до 0 В) в течении 5 секунд и опять - так в течении минуты.
    Переменная выхода 1 - out1 типа word.
    Огромное спасибо.

  2. #2

    По умолчанию

    См. манул по CoDeSys: Библиотеки CoDeSys > Библиотека UTIL.lib > Генераторы сигналов > функциональный блок GEN. Там есть пример FBD.

  3. #3

    По умолчанию

    Спасибо большое!

  4. #4

    По умолчанию

    И все-таки, наверняка есть смысл в наличии переменной типа TIME.
    В описании к CoDeSyS нет примера ее применения. Может быть, кто-нибудь подскажет, как это делается? Или приведет какой-нибудь пример?
    Буду очень благодарен.

  5. #5

    По умолчанию

    Цитата Сообщение от Валера Храмцов Посмотреть сообщение
    И все-таки, наверняка есть смысл в наличии переменной типа TIME.
    В описании к CoDeSyS нет примера ее применения...
    Переменная типа TIME применяется в МЭКовсих блоках очень широко. В мануале описано море блоков, где используется переменные типа TIME. Еще примеры см. тут.

    В МЭК существуют несколько разных типов переменных для времени/даты/длительности. Для человека, при напряжении мозга, будет ясно как проводить разные операции с такими данными: как их вычитать, складывать, умножать, сравнивать и др. Например, понятно, что две даты можно сравнивать, к дате можно прибавить длительность, но не другую дату. Вычесть время дня из времени дня можно, но при этом получиться длительность.
    Поскольку операции '+', '-' и др. полиморфны, то компилятор должен знать какой код генерировать с разными типами переменных. Отсюда возникает нужда иметь специальный тип для длительности (просто некий интервал времени, с точностью до мс) – это TIME, время дня TIME_OF_DAY (от 0 до 24 часов), дата DATA (календарная), временной штамп DATE_AND_TIME (уникальная метка времени). Ничего хитрого тут нет. Все типы данных (такие как BOOL, INT, REAL, STRING и др.) нужны для правильной обработки выражаемых ими физических сущностей. Временные типы ничем особенным тут не выделяются. Если мне надо задать 100 миллисекунд, то лучше использовать для этого TIME, чем просто целое число 100. В этом случае я дам компилятору возможность контроля, возможность красиво отображать значение в отладчике и визуализации (в секундах) и др.

    Исторически в некоторых МЭК системах программирования начального уровня их изготовители сразу не додумались, как реализовать требуемые по стандарту МЭК функциональные блоки таймеров (см. TON, TOF). Главная сложность в том, что экземпляров этих блоков допускается создавать не ограничено много... Для упрощения, некоторые просто ограничили допустимое число используемых в программе таймеров. Оригинально поступили разработчики Изографа (ранних версий). Они изобрели так называемые 'таймерные переменные'. Объявил такую переменную и она сама 'пошла' – как часы. Засекая по ней время, можно программно измудриться соорудить нормальный таймер. Потом пришлось к этим таймерным перемененным придумывать сервисные функции... Версия 5 этой системы наконец то доросла до нормальной стандартной МЭК реализации типов данных.

    В рез. получается если человек имел опыт использования Изографа, то ему трудно понять как работают стандартные таймеры МЭК. В CoDeSys все сделано четко по стандарту. Если нужно меняющееся время, то в программу ставим экземпляр функционального блока 'таймер' и на его выходе получаем то, что нужно. Результат можно хранить в переменных типа TIME, сравнивать, вычитать и др. Реально тип TIME ничем не отличается от остальных типов данных. Меняться сами собой такие переменные не должны, это кошмар и глупость.

  6. #6

    По умолчанию

    Спасибо за сочинение в духе "Войны и мира".

  7. #7

    По умолчанию

    Цитата Сообщение от Валера Храмцов Посмотреть сообщение
    Спасибо за сочинение в духе "Войны и мира".
    Эпилог: есть еще функция TIME(), которая возвращает системное время…

  8. #8
    Пользователь Аватар для Роман26
    Регистрация
    30.01.2009
    Адрес
    Россия, Ставрополь
    Сообщений
    80

    По умолчанию

    А у меня функция TIME() возвращает значение - T#0ms.
    Мучаюсь уже неделю, не могу присвоить глобальной переменной:
    DDateTime: DATE_AND_TIME;
    значение текущей даты и времени в ПЛК. У меня ОВЕН 100.
    Спасибо.
    Ремонтно-строительная компания, г.Ставрополь

  9. #9
    Пользователь
    Регистрация
    18.07.2008
    Адрес
    Владимир
    Сообщений
    113

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Эпилог: есть еще функция TIME(), которая возвращает системное время…
    Я пока пошел более простым путем, задал программу которая запускается 1 раз в пол секунды и перекидывает флаг, если придется еще что-то считать наверно придется идти через функции времени

  10. #10

    По умолчанию

    Мне кажется как то все сложно...
    А нельзя просто использовать круговую синусоиду для Вашей задачи: y:=a*SIN(6.28*t*f)
    Или библиотека Util.lib. Блок GEN.
    В нем есть переменная период, которая как раз в формате времени.
    Попробуйте блок подключить и посмотреть как происходит работа при изменении значения входных переменных блока на визуализации. Все на свои места станет.

    Используйте как отдельный блок, вызываемый по времени и все.
    Последний раз редактировалось Николаев Андрей; 13.02.2009 в 10:11.

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •