Страница 248 из 401 ПерваяПервая ... 148198238246247248249250258298348 ... ПоследняяПоследняя
Показано с 2,471 по 2,480 из 4769

Тема: разные вопросы новичка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от RomanKk Посмотреть сообщение
    Только недавно закончил всю программу, все проверил, запустил, работат как надо. Но постала новая задача, хочется иметь возможность работы по графику, но с множеством периодов вкл/выкл. То есть для примера, вкл с 8 до 10 ч, с 14 до 16, с 20 до 22, в остальные периоды выкл. Или каждые 2-3 часа, но лучше задавать конкретные промежутки времени. Макрос Clock_Week вроде как подходит, но как задавать разные промежутки времени, если там только один промежуток можно задать? Или для этого нужно совсем другое? Тут даже не обязательно иметь расписание на каждый день, как в макросе Clock_Week, главное чтобы при достижении нужного времени срабатывал сценарий на вкл/выкл.

    В данном случае это будет применено для вентиляции, чтобы она вкл/выкл по заданному времени. Из того что можно сделать быстрее, можно взять умное реле, которое настраивается через смартфон, там задавать нужный график вкл/выкл, и через какое-то промежуточное реле подавать 0/1 на DI пр200. Но все же хотелось бы сделать это программно, если не очень сложно.

    На предыдущей странице есть подобная программа от petera, на таймерах с временем работы и паузами между ними. https://owen.ru/forum/showthread.php...&page=296#2954
    Первый раз можно сделать и по макросу Clock_Week.

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    На предыдущей странице есть подобная программа от petera, на таймерах с временем работы и паузами между ними. https://owen.ru/forum/showthread.php...&page=296#2954
    Первый раз можно сделать и по макросу Clock_Week.
    Когда-то в кодесис делал программу для управления освещением с включения N количества ламп в одном из K интервалов суток
    Сделал функцию Scheduler_Ex, где число интервалов времени заранее не известно и может быть очень большим (в примере ограничено 100)

    Расписание - массив структур
    Каждая строка массива
    Код:
    TYPE Schedule :
    STRUCT
    	On: TOD;			(*Время включения*)
    	Off: TOD;			(*Время выключения*)
    	amount: UINT;		(*Количество включенных светильников*)
    END_STRUCT
    END_TYPE
    Программа PLC_PRG может выглядеть так
    Код:
    PROGRAM PLC_PRG
    VAR RETAIN PERSISTENT
    	Shedule1:ARRAY[0..7] OF Schedule:=
    		(On:=TOD#00:00, Off:=TOD#01:30, amount:=1),
    		(On:=TOD#02:00, Off:=TOD#03:30, amount:=2),
    		(On:=TOD#04:00, Off:=TOD#05:30, amount:=3),
    		(On:=TOD#06:00, Off:=TOD#07:30, amount:=1),
    		(On:=TOD#08:00, Off:=TOD#09:30, amount:=2),
    		(On:=TOD#10:00, Off:=TOD#12:00, amount:=3),
    		(On:=TOD#16:00, Off:=TOD#18:00, amount:=2),
    		(On:=TOD#20:00, Off:=TOD#22:00, amount:=1);
    END_VAR
    VAR
    	Lamp1: BOOL;
    	Lamp2: BOOL;
    	Lamp3: BOOL;
    	amount: UINT;		(*Количество включеных светильников*)
    END_VAR
    amount:=Scheduler_Ex(pt_Shedule:=ADR(Shedule1) , size:=SIZEOF(Shedule1) );
    CASE amount OF
    0:	Lamp1:=FALSE; Lamp2:=FALSE; Lamp3:=FALSE;
    1:	Lamp1:=TRUE; Lamp2:=FALSE; Lamp3:=FALSE;
    2:	Lamp1:=TRUE; Lamp2:=TRUE; Lamp3:=FALSE;
    3:	Lamp1:=TRUE; Lamp2:=TRUE; Lamp3:=TRUE;
    END_CASE
    Легко заметить, что интервалы где amount:=0(все выкл) можно не указывать.

    Универсальность в том, что очень просто добавлять интервалы или менять в расписании кол.включеных ламп, не меняя при этом самой программы.
    В будущем очень просто будет изменить общее количество ламп.
    Код функции Scheduler, с моим любимым способом поиска попадания в заданный диапазон методом деления интервала пополам
    Scheduler_Ex:
    Код:
    FUNCTION Scheduler_Ex : UINT
    VAR_INPUT
    	pt_Shedule: POINTER TO ARRAY[0..99] OF Schedule;
    	size: UINT;
    END_VAR
    VAR
    	a: INT;	(*Начало интервала поиска*)
    	b: INT;	(*Конец интервала поиска*)
    	N: INT;	(*Число точек в расписании*)
    	i: INT;
    	uptime: SysTime64;
    	datetime: SystemTimeDate;
    	clock: CurTimeEx;
    	current_time: TOD;		(*Текущее время*)
    END_VAR
    (*Получить текущее время*)
    clock(SystemTime := uptime,		(*текущее время в микросекундах*)
    	TimeDate := datetime);		(*текущее время и дата в развернутом формате*)
    
    (*собираем часы, минуты и секунды в одну кучу - в миллисекунды*)
    current_time:=DWORD_TO_TOD((UINT_TO_DWORD(datetime.Hour) * 3600 +
    				UINT_TO_DWORD(datetime.Minute * 60) +
    				UINT_TO_DWORD(datetime.Second))*1000 +
    				datetime.Milliseconds);
    
    N:= size / 12-1;	(*находим число интервалов в расписании*)
    (*Сразу проверить крайности*)
    IF current_time <= pt_Shedule^[0].On THEN
    	Scheduler_Ex:=0;
    ELSIF current_time >= pt_Shedule^[N].Off THEN
    	Scheduler_Ex:=0;
    ELSE
    
    (*Теперь можно начать поиск
    поиск выполняется методом деления на 2*)
    (*Начальные значения интервала поиска*)
    a:=0;
    b:=N+1;
    	WHILE (b-a) <> 0 DO (*В конце концов, входной сигнал ТОЧНО попадет между двумя соседними точками On и Off*)
    
    	IF current_time >= pt_Shedule^[i].On AND current_time < pt_Shedule^[i].Off THEN	(*Может нам повезло, и мы нашли ВКЛ? *)
    	Scheduler_Ex:=pt_Shedule^[i].amount; EXIT;			(*тогда конец итераций, нечего в пустую молотить :) *)
    	ELSIF current_time >= pt_Shedule^[i].Off AND current_time < pt_Shedule^[i+1].On THEN (*Может нам повезло, и мы нашли ВЫКЛ? *)
    	Scheduler_Ex:=0; EXIT;			(*тогда конец итераций, нечего в пустую молотить :) *)
    	END_IF(*мимо :( ,тогда посмотрим в какую половину интервалов попали*)
    	i:=(a+b)/2;	(*Делим интервал поиска пополам*)
    	IF 	current_time > pt_Shedule^[i].Off THEN	(*Если тек.время больше середины интервала поиска,*)
    	a:=i;					 (*то следующий поиск будем делать начиная от середины и до конца интервалов*)
    	ELSE					(*А если входной сигнал меньше середины интервала поиска,*)
    	b:=i;					 (*то следующий поиск будем делать начиная от начала и до середины интервалов*)
    	END_IF
    (*Таким образом на каждой итерации отбрасываем из поиска заведомо ненужную половину интервалов
    два соседних интервала On(i) - Off(i) или Off(i)- On(i+1), меду которыми попадает текущее время найдем очень быстро
    для 8 интервалов On - Off нужно не более 3 итераций
    при 9..16 интервалов On - Off нужно не более 4 итераций
    при 17..32 интервалов On - Off нужно не более 5 итераций
    при 33..64 интервалов On - Off нужно не более 6 итераций
    при 65..128 интервалов On - Off не более 7 итераций
    инфа точная - 100% ;) *)
    END_WHILE
    END_IF


    Жалко, что в ОЛ нельзя работать с указателями.
    Функцию можно адаптировать для ОЛ, но с конечным, заданным числом интервалов в расписании.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #3

    По умолчанию

    Всем спасибо, буду смотреть.

  4. #4

    По умолчанию

    Ребят кто то сталкивался с проблемой опроса трм 32 в пр200 . Проблема такая , вынул измеренное значение темп гвс - все хорошо , вынул уставку гвс ( только чтение 716 регистр ) - все хорошо .Но когда пытаюсь добавить регистр записи уставки гвс ( 10 регистр ) на холст в owen logic , то трм 32 становится не кликабельной ( что не нажмешь на ней , всегда возвращается в u-11 параметр как раз это 10 регистр ) . Убираю регистр с холста , все сразу нормально . Никак не могу вынуть эту переменную с овенклауд чтобы не было такой проблемы , хотя все работает запись и чтение с овенклауда . уже сломал всю голову . может кто поможет ?

  5. #5

    По умолчанию

    Цитата Сообщение от shmnpay Посмотреть сообщение
    Ребят кто то сталкивался с проблемой опроса трм 32 в пр200 . Проблема такая , вынул измеренное значение темп гвс - все хорошо , вынул уставку гвс ( только чтение 716 регистр ) - все хорошо .Но когда пытаюсь добавить регистр записи уставки гвс ( 10 регистр ) на холст в owen logic , то трм 32 становится не кликабельной ( что не нажмешь на ней , всегда возвращается в u-11 параметр как раз это 10 регистр ) . Убираю регистр с холста , все сразу нормально . Никак не могу вынуть эту переменную с овенклауд чтобы не было такой проблемы , хотя все работает запись и чтение с овенклауда . уже сломал всю голову . может кто поможет ?
    Добрый день!

    Напишите, пожалуйста, на support@owen.ru. Приложите Ваш проект Owen Logic и заводской номер ТРМ32.
    Инженер по продукту | ПР и Owen Logic
    email: k.korolev@owen.ru

  6. #6

    По умолчанию

    Цитата Сообщение от Королев Кирилл Посмотреть сообщение
    Добрый день!

    Напишите, пожалуйста, на support@owen.ru. Приложите Ваш проект Owen Logic и заводской номер ТРМ32.
    прислал вам 2 дня назад ...
    P.S.
    Имеется пр200 и трм32 щ7 и передача данных через пе210 в owencloud .
    Нужно изменять данные в трм32 удаленно , все сделал всё читается и записывается , но с есть проблема , в трм32 нельзя в программировании листать и толком лазить по настройкам , всегда возвращается к одному параметру как будто идет вечная запись настроек с овенклауда .
    Не знаю как обьяснить , приложу видео и тестовый проект ( кусок из основного проекта )
    Вложения Вложения
    Последний раз редактировалось shmnpay; 02.04.2023 в 19:23.

  7. #7
    Пользователь
    Регистрация
    31.01.2015
    Адрес
    Новосибирск
    Сообщений
    107

    По умолчанию

    Задумался над реализацией нажатия только одной кнопки из 10-ти.
    Если нажато более одной любой клавиши, на выходе 0, при нажатии только одной, любой клавиши, на выходе 1.
    Реализовал, все работает, но мне кажется, что я сделал через заднее место.
    Пробовал через логические операторы, не смог осилить мозгом.
    Пробовал через двоичную систему, получается громоздко.
    Хочу услышать рекомендации, правильным путем пошел или нет?
    2023-04-03_15-18-47.jpg
    Вложения Вложения

  8. #8

    По умолчанию

    Цитата Сообщение от ProRus Посмотреть сообщение
    Задумался над реализацией нажатия только одной кнопки из 10-ти.
    Если нажато более одной любой клавиши, на выходе 0, при нажатии только одной, любой клавиши, на выходе 1.
    Реализовал, все работает, но мне кажется, что я сделал через заднее место.
    Пробовал через логические операторы, не смог осилить мозгом.
    Например вот так 1 10 КСОР.jpg

  9. #9
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,638

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Например вот так 1 10 КСОР.jpg
    Это Вы проходной выключатель сделали включения из 10 мест, автор совсем не такой алгоритм хотел, насколько его понимаю!

    Мой вариант:

    Не более 1.png

    Не более 1.owl

    Даже так, попроще:

    Не более 1_2.png

    Не более 1_2.owle

    И, совсем забыл сказать: легко расширяется до 32 входов, в смысле, просто добавить на входе второй макрос вставки(записи) бит, макрос с расширением(имеется специальный вход) и настройками(в свойствах макроса), короче, даже дополнительных макросов не потребуется!
    Последний раз редактировалось Сергей0308; 03.04.2023 в 13:16.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  10. #10
    Пользователь
    Регистрация
    31.01.2015
    Адрес
    Новосибирск
    Сообщений
    107

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Это Вы проходной выключатель сделали включения из 10 мест, автор совсем не такой алгоритм хотел, насколько его понимаю!

    Мой вариант:

    Не более 1.png

    Не более 1.owl
    Вот это уже интересно. Посмотрю, спасибо!

Страница 248 из 401 ПерваяПервая ... 148198238246247248249250258298348 ... ПоследняяПоследняя

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

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