Может кто заморачивался с этим? Цель использования - управление освещением. Нашел какой-то код расчета, но это для php http://www.ab-log.ru/smart-house/linux/sunset
Вид для печати
Может кто заморачивался с этим? Цель использования - управление освещением. Нашел какой-то код расчета, но это для php http://www.ab-log.ru/smart-house/linux/sunset
это я знаю... У Евроавтоматики тоже есть астрономическое реле. Правда надо это реализовать на ПЛК. Понимаю что это бред, но это не моя инициатива((( Я хотел сделать через фотодатчик, но заставляют делать мартышкин труд (ради галочки перед высоким начальством).
OSCAT Basic 3.21 CALENDAR_CALC
Можно и так. В новой версии V3.21 CALENDAR_CALC дает восхода и захода солнца по местному времени.
спасибо, погляжу)
возможно ли это реализовать если программа управления освещением написана на языке LD в codesys v. 2.3.9.30?
да, возможно
как? можно пример или ссылку
И мне бы примерчик на ФБ(кодесис) или алгоритм хотя бы :) .А уж где (на чем) применить я бы нашел ;)
скачал ьиьлиотеку ,подключил смотрю на ФБ калькулятор календаря и не могу увидеть что у него внутри ,только квадрат входа\выхода и описание их типов.Ткните пальцем ,что бы не лезть в дебри кодесис раньше времени,где посмотреть его потраха на ФБ.
Подключаем библиотеку OSCAT и делаем так:
Столько воды из-за отсутствия DATE() — пускаю лучики ненависти в сторону разработчиков кодесиса. Необходимые библиотеки: SysLibMem, SysLibTime, TimeExp (задолбался на неё ссылку давать), ну и оскат естественно. Пример приведён для Ёбурга. Возможно, прибавлять теперь уже надо 6, а не 5 часов.См. пост №28 ниже:
В переменных sunrise и sunset у вас будет время рассвета и заката. Дальше получаем текущее время (просто к предыдущему куску добавьте):
Теперь можно сравнивать localtime с sunrise и sunset, чтобы выяснить, рассвело ли.Код:localtime := TIME_TO_TOD(PackTime(timedate.HOUR, timedate.MINUTE, timedate.SECOND, timedate.Milliseconds));
Усё. Ах да: у SUN_TIME есть ещё параметр H для задания высоты над уровнем горизонта.
Просто откройте файл библиотеки в кодесисе.Цитата:
скачал ьиьлиотеку ,подключил смотрю на ФБ калькулятор календаря и не могу увидеть что у него внутри ,только квадрат входа\выхода и описание их типов.Ткните пальцем ,что бы не лезть в дебри кодесис раньше времени,где посмотреть его потраха на ФБ.
А на ФБ можно?
Спасибо capzap,буду разбираться.Да уж наглядность кодесис желает лучшего;) :) ,на языке FBD
В блоке SUN_POS задаю широту 50.17, а долготу меняю, когда долгота больше 70 начинает выдавать время восхода TOD#1193:02:10.772, то есть когда время восхода по UTC становиться меньше 00:00:00 начинает выдавать огромные значения времени, выход - задаю долготу (-23) время восхода и заката совпадают с календарными. Однако, в течение года (меняю месяца) есть отклонение времени восхода и заката, максимум на 10 минут, не знаю на кого грешить: на календарь или на программу
Опять до Урала не дошли
Я же проверял для своего ёбургского пояса. Там вроде просто рассчитываем для своих координат, а потом к результату прибавляем своё смещение (у меня +5). И всё, никакого переполнения — результат нормальный.
Все правильно надо добавлять к вычисленному времени часовой сдвиг относительно Гринвича. Спасибо.
Как видите, там нет массивов. Если выполнять под отладчиком, на какой строчке это происходит?
Не поленился запустить спустя три года. Всё нормально работает. Попутно переписал чуть-чуть:Код:PROGRAM PLC_PRG
VAR
sun: SUN_TIME := (LATITUDE := 56.5, LONGITUDE := 60.35);
clock: CurTimeEx;
now: SystemTimeDate;
dummy: SysTime64;
sunrise, sunset: TOD;
END_VAR
VAR CONSTANT
nullTime: SystemTimeDate;
END_VAR
now := nullTime;
clock(TimeDate := now, SystemTime := dummy);
sun(UTC := PackDate(now.Year, now.Month, now.Day));
sunrise := sun.SUN_RISE + TIME#5h;
sunset := sun.SUN_SET + TIME#5h;
Третья группа команд в меню Онлайн:Цитата:
Не знаю как отследить
Вложение 16134
Toggle Breakpoint — пометить строки, где программа должна приостанавливаться;
Step Over — выполнить строку не открывая функции на этой строке;
Step In — выполнить строку открывая каждую функцию на этой строке;
Single Cycle — прокрутить один цикл ПЛК.
Помечаете строку, где надо остановиться. Запускаете исполнение — программа тормозит на этой строке. Дальше можете двигаться по одному шагу (Step in/over) или продолжить выполнение до следующей точки остановки. Точки можно ставить и убирать во время выполнения программы. Азы отладки.