Цитата Сообщение от Евгений Кислов Посмотреть сообщение
пример кода:

Код:
FUNCTION NTP_FORMAT_TO_DT : DT
VAR_INPUT
	(* Пакет данных, полученный от NTP-сервера*)
	abyNtpResponse:				ARRAY [0..47] OF BYTE;
	(*Часовой пояс*)
	iUtcOffset:				INT(-12..14)		:=	3;
END_VAR

VAR
	(*Промежуточные переменные*)
	dwNtpServerTime: 			DWORD;	
	liNtpServerTime: 			LINT;

END_VAR

VAR CONSTANT
	(*Число секунд между точками отсчета NTP Format Time и Unix Time*)
	c_dwNtpToUnixTimeOffset: 	DWORD				:=	2208988800;
	(*Число минут в часе*)
	c_usiMinutesPerHour:		USINT				:=	60;
	(* Число секунд в минуте*)
	c_usiSecondsPerMinute:		USINT				:=	60;
END_VAR


dwNtpServerTime	        :=	abyNtpResponse[43] + SHL(abyNtpResponse[42], 8) + SHL(abyNtpResponse[41], 16) + SHL(abyNtpResponse[40], 24);
liNtpServerTime		:=	DWORD_TO_LINT (dwNtpServerTime);
NTP_FORMAT_TO_DT	:=	LINT_TO_DT (liNtpServerTime - c_dwNtpToUnixTimeOffset + iUtcOffset * c_usiMinutesPerHour * c_usiSecondsPerMinute);
Спасибо, работает как надо.

Теперь возникло пару вопросов:

1. Где надо учитывать часовой пояс: в NTP_FORMAT_TO_DT и в TargetVars.stRtc.siSetUtcOffset одинаковое ставить,
или в NTP_FORMAT_TO_DT ставить 0, а в TargetVars.stRtc.siSetUtcOffset ставить нужный пояс?

2. В web конфигураторе надо отключить NTP клиент во избежание каких либо конфликтов?



Screenshot_19.png
Screenshot_20.png