Страница 4 из 5 ПерваяПервая ... 2345 ПоследняяПоследняя
Показано с 31 по 40 из 42

Тема: Контролируем аквариум на ПЛК63

  1. #31

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Так ни кто не сможет найти ошибку в Вашей программе,
    выкладывать нужно хотя бы фрагмент кода.
    Извиняюсь, поторопился и не вставил код...
    Вечером выложу.

  2. #32
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Если я правильно понял вход in2 включает q. Вход in1 выключает выход q на 5 минут.

    Код:
    VAR_INPUT
    	in1, in2:BOOL;
    END_VAR
    VAR_OUTPUT
    	q:BOOL;
    END_VAR
    VAR
    	TOF1: TOF;
    END_VAR
    -------------------------
    TOF1(IN:=in1 , PT:=t#5m);
    q:=in2 AND NOT TOF1.Q;

  3. #33

    По умолчанию

    Спасибо! Попробую. Я что-то нагородил там с таймером =)

  4. #34

    По умолчанию

    Оживлю свою старую тему.
    Решил переписать свою программу управления злополучным аквариумом. Основной критерий: суточное переключение света, газа, воздуха. Режимы, в общем.
    Привязано все к реальному времени. И в этом проблема.
    Захотел я сделать так, чтобы в уставках вводилась основная информация: время запуска основного света и продолжительность, а остальной суточный режим пересчитывался сам. Добился, чтобы все переменные были в диапазоне 0-23, чтобы привязать к часам. И тут незадача:
    IF clock>=time_start AND clock< time_end THEN
    day_light:=TRUE;
    Вся беда в том, что по расчётам может получиться так:
    time_start=19
    time_end=3 (3 часа утра следующих суток)
    Тут вся логика и затыкается.
    Подскажите, что можно сделать?

  5. #35

    По умолчанию

    Программировать!
    Варианта минимум 2:
    1. RS триггер, если считать, что ПЛК работает круглосуточно всегда.
    2. Ещё одно условие на сравнение времени начала и окончания с обработкой перехода через 0.
    Простейшая школьная задачка.

  6. #36

    По умолчанию

    Цитата Сообщение от ASo Посмотреть сообщение
    Программировать!
    Простейшая школьная задачка.
    Вместо пафоса можете привести пример решения простейшей школьной задачки?

  7. #37
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от tanatholog Посмотреть сообщение
    Оживлю свою старую тему.
    Решил переписать свою программу управления злополучным аквариумом. Основной критерий: суточное переключение света, газа, воздуха. Режимы, в общем.
    Привязано все к реальному времени. И в этом проблема.
    Захотел я сделать так, чтобы в уставках вводилась основная информация: время запуска основного света и продолжительность, а остальной суточный режим пересчитывался сам. Добился, чтобы все переменные были в диапазоне 0-23, чтобы привязать к часам. И тут незадача:
    IF clock>=time_start AND clock< time_end THEN
    day_light:=TRUE;
    Вся беда в том, что по расчётам может получиться так:
    time_start=19
    time_end=3 (3 часа утра следующих суток)
    Тут вся логика и затыкается.
    Подскажите, что можно сделать?
    Код:
    PROGRAM PLC_PRG
    VAR
    	on_Hour: WORD;		(*время включения: часы*)
    	on_Minute: WORD;	(*время включения: минуты*)
    	on_Second: WORD;	(*время включения: секунды*)
    
    	of_Hour: WORD;		(*время выключения: часы*)
    	of_Minute: WORD;	(*время выключения: минуты*)
    	of_Second: WORD;	(*время выключения: секунды*)
    
    	uptime: SysTime64;
    	datetime: SystemTimeDate;
    	clock: CurTimeEx;
    	time_on:DWORD;			(*время включения в секундах*)
    	time_of:DWORD;			(*время отключения в секундах*)
    	current_time:DWORD;	(*текущее время в секундах*)
    	enable: BOOL;	(*разрешение на включение*)
    	day_light: BOOL;	(*выход*)
    END_VAR
    VAR CONSTANT
        nulldt: SystemTimeDate;	(*нужна для обнуления параметров*)
    END_VAR
    
    (*получить текущее время в секундыах*)
    datetime := nulldt;(*обнуляем переменные времени*)
    clock(SystemTime := uptime,		(*текущее время в микросекундах*)
    	TimeDate := datetime);		(*текущее время и дата в развернутом формате*)
    current_time:=(datetime.Hour * 60 + datetime.Minute) * 60 + datetime.Second;	(*текущее время*)
    (*----------------------------------------------------------------*)
    
    (*для уставок собираем часы, минуты и секунды в одну кучу - в секунды*)
    time_on:=(on_Hour * 60 + on_Minute) * 60 + on_Second;	(*время включения*)
    time_of:=(of_Hour * 60 + of_Minute) * 60 + of_Second;		(*время отключения*)
    (*----------------------------------------------------------------*)
    
    (*-----------РЕШЕНИЕ ЗАДАЧИ-----------------*)
    (*ВОПРОС:
    Вся беда в том, что по расчётам может получиться так:
    time_start=19
    time_end=3 (3 часа утра следующих суток)
    Тут вся логика и затыкается.
    *)
    (*Вот ответ на задачу*)
    CASE BOOL_TO_INT(time_on <= time_of) OF
    0:	day_light:=enable AND NOT(current_time >= time_of AND current_time < time_on);
    1:	day_light:=enable AND current_time >= time_on AND current_time < time_of;
    END_CASE
    
    (*Или такой вариант
    IF	time_on <= time_of THEN
    	day_light:=enable AND current_time >= time_on AND current_time < time_of;
    ELSE
    	day_light:=enable AND NOT(current_time >= time_of AND current_time < time_on);
    END_IF
    *)
    Для проекта нужна библиотека SysLibTime
    Последний раз редактировалось petera; 12.04.2020 в 13:21.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #38

    По умолчанию

    В случае с RS нужно на Set подать TRUE, которое берём из сравнения времени с уставкой старта, а на Reset дать TRUE из времени выключения? Я правильно понимаю?

  9. #39
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от tanatholog Посмотреть сообщение
    В случае с RS нужно на Set подать TRUE, которое берём из сравнения времени с уставкой старта, а на Reset дать TRUE из времени выключения? Я правильно понимаю?
    Вот без всяких триггеров

    Код:
    CASE BOOL_TO_INT(ime_start <= time_end) OF
    0:	day_light:=NOT(clock >= time_end AND clock < ime_start); (* 0 ------I________I------ 24 *)
    1:	day_light:=clock >= ime_start AND clock < time_end;         (* 0 _____I----------I_____ 24 *)
    END_CASE
    СМ. предыдущий пост
    Последний раз редактировалось petera; 12.04.2020 в 17:46.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #40

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Код:
    PROGRAM PLC_PRG
    VAR
    	on_Hour: WORD;		(*время включения: часы*)
    	on_Minute: WORD;	(*время включения: минуты*)
    	on_Second: WORD;	(*время включения: секунды*)
    
    	of_Hour: WORD;		(*время выключения: часы*)
    	of_Minute: WORD;	(*время выключения: минуты*)
    	of_Second: WORD;	(*время выключения: секунды*)
    
    	uptime: SysTime64;
    	datetime: SystemTimeDate;
    	clock: CurTimeEx;
    	time_on:DWORD;			(*время включения в секундах*)
    	time_of:DWORD;			(*время отключения в секундах*)
    	current_time:DWORD;	(*текущее время в секундах*)
    	enable: BOOL;	(*разрешение на включение*)
    	day_light: BOOL;	(*выход*)
    END_VAR
    VAR CONSTANT
        nulldt: SystemTimeDate;	(*нужна для обнуления параметров*)
    END_VAR
    
    (*получить текущее время в секундыах*)
    datetime := nulldt;(*обнуляем переменные времени*)
    clock(SystemTime := uptime,		(*текущее время в микросекундах*)
    	TimeDate := datetime);		(*текущее время и дата в развернутом формате*)
    current_time:=(datetime.Hour * 60 + datetime.Minute) * 60 + datetime.Second;	(*текущее время*)
    (*----------------------------------------------------------------*)
    
    (*для уставок собираем часы, минуты и секунды в одну кучу - в секунды*)
    time_on:=(on_Hour * 60 + on_Minute) * 60 + on_Second;	(*время включения*)
    time_of:=(of_Hour * 60 + of_Minute) * 60 + of_Second;		(*время отключения*)
    (*----------------------------------------------------------------*)
    
    (*-----------РЕШЕНИЕ ЗАДАЧИ-----------------*)
    (*ВОПРОС:
    Вся беда в том, что по расчётам может получиться так:
    time_start=19
    time_end=3 (3 часа утра следующих суток)
    Тут вся логика и затыкается.
    *)
    (*Вот ответ на задачу*)
    CASE BOOL_TO_INT(time_on <= time_of) OF
    0:	day_light:=enable AND NOT(current_time >= time_of AND current_time < time_on);
    1:	day_light:=enable AND current_time >= time_on AND current_time < time_of;
    END_CASE
    
    (*Или такой вариант
    IF	time_on <= time_of THEN
    	day_light:=enable AND current_time >= time_on AND current_time < time_of;
    ELSE
    	day_light:=enable AND NOT(current_time >= time_of AND current_time < time_on);
    END_IF
    *)
    Для проекта нужна библиотека SysLibTime
    Спасибо! Дошло)))

Страница 4 из 5 ПерваяПервая ... 2345 ПоследняяПоследняя

Похожие темы

  1. Встроенная котельная на ПЛК63
    от 6751149 в разделе Наши проекты
    Ответов: 20
    Последнее сообщение: 29.06.2018, 19:26
  2. Ответов: 2
    Последнее сообщение: 05.09.2010, 17:27
  3. Музыка на ПЛК63
    от Гайворонский А. В. в разделе Трёп (Курилка)
    Ответов: 8
    Последнее сообщение: 25.06.2010, 12:23
  4. умный аквариум
    от jammer77 в разделе Подбор Оборудования
    Ответов: 45
    Последнее сообщение: 03.03.2010, 19:38

Метки этой темы

Ваши права

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