Показано с 1 по 10 из 5276

Тема: ПР200

Древовидный режим

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

    По умолчанию

    Цитата Сообщение от Ревака Юрий Посмотреть сообщение
    Не нашел, где начало обсуждаемой темы, но интересно, как себя ведет алгоритм не в симуляции, а непосредственно в приборе.
    Еще лучше чем в симуляции.
    Начало здесь http://www.owen.ru/forum/showthread....l=1#post278333

    и возражения Сергея по макросу здесь http://www.owen.ru/forum/showthread....l=1#post278339

    ЗЫ
    Макрос сделан по мотивам OSCAT
    Код:
    FUNCTION_BLOCK SUN_TIME_My
    VAR_INPUT
    	LATITUDE : REAL;				(* Широта географического положения  *)
    	LONGITUDE : REAL;				(* Долгота географического положения  *)
    	UTC : DATE;						(*	мировое время	*)
    	H : REAL := -0.83333333333;	(* Высота над горизонтом для восхода солнца *)
    END_VAR
    VAR_OUTPUT
    	MIDDAY : TOD;				(*	Астрономический полдень по Гринвичу *)
    	SUN_RISE : TOD;				(*	Восход солнца на текущий день по Гринвичу *)
    	SUN_SET : TOD;				(*	Заход олнца на текущий день по Гринвичу *)
    	SUN_DECLINATION : REAL;		(*	Склонение солнца над горизонтом в полдень в градусах	*)
    END_VAR
    VAR
    	dk: REAL;						(* Склонение солнца над горизонтом в полдень *)
    	delta: TIME;					(* Дельта от полудня для восхода и захода солнца  *)
    	b: REAL;
    	RAD_H: REAL;
    	T: REAL;
    	OFFSET: REAL;
    END_VAR
    VAR CONSTANT
    	PI2: REAL := 6.28318530717958647692528676655900576;
    END_VAR
    
    B := latitude * 0.0174532925199433;
    
    T := UINT_TO_REAL(DAY_OF_YEAR(utc));
    OFFSET := -0.1752 * SIN(0.033430 * T + 0.5474) - 0.1340 * SIN(0.018234 * T - 0.1939);
    MIDDAY := DWORD_TO_TOD(REAL_TO_DWORD((12.0 - OFFSET - longitude * 0.0666666666666) * 3600000));
    DK := 0.40954 * SIN(0.0172 * (T - 79.35));
    
    sun_declination := MODR(57.29577951308232 * DK, 360.0);
    IF sun_declination > 180.0 THEN sun_declination := sun_declination - 360.0; END_IF;
    sun_declination := 90.0 - LATITUDE + sun_declination;
    
    RAD_H:= MODR(0.0174532925199433 * H, PI2);
    delta := DWORD_TO_TIME(REAL_TO_DWORD((ACOS((SIN(RAD_H) - SIN(B) * SIN(DK)) / (COS(B) * COS(DK))) * 3.819718632) * 3600000));
    sun_rise := MIDDAY - delta;
    sun_set := MIDDAY + delta;
    Это переработаный ФБ с минимальным использованием других функций библиотеки OSCAT
    Последний раз редактировалось Мимоход; 11.10.2018 в 12:49.

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

Ваши права

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