Есть в кдс 3 такой блок GetDataAndTime. чтобы взять время, на соответствующий вход подаем Тrue, и получаешь, а если False то время 1970 года. я сделал, Фб где получаю реальное время.
но очень часто проскакивает 1970 год. что не так я не знаю. подскажите пожалуйста.
Код:
FUNCTION_BLOCK CMG_ChMS
VAR_INPUT
	
	bON:BOOL;
END_VAR
VAR_OUTPUT
	wChislo:WORD;
	wMesyac:WORD;
	wGod:WORD;
	wChas:WORD;
	wMin:WORD;
	wSec:WORD;
	DayWeek:WORD;
	sDMG:STRING;
	sCMS:STRING;
	
	
	
END_VAR
VAR
	sDMGCMS:STRING;
	GetDT_01:RTCLK.GetDateAndTime;
	dInDate:DATE_AND_TIME;
	dInDateSET:DATE_AND_TIME;
	qq:TIME;
	tt:TOD;
	dd:DATE;
	b1: BOOL;
	b2: BOOL;
	b3: BOOL;
	b4: BOOL;
	dat1: DATE_AND_TIME;
	Bl_Time:blink; (*блинкер для постоянного обновления времени*)
	
	NomerNedely:RTCLK.WEEKDAY;
	TimerTON:TON;
	TimerTOF:TOF;
	pe:POINTER TO ERROR;
	RT_SET:R_TRIG;
END_VAR
----------

	
IF RT_SET.Q THEN	

sDMGCMS:=DT_TO_STRING(dInDate);
qq:=DT_TO_TIME(dInDate);
tt:=DT_TO_TOD(dInDate);
dd:=DT_TO_DATE(dInDate);
(*sDMG:=Right(DATE_TO_STRING(dd),8);*)
(*sCMS:=Right(TOD_TO_STRING(tt),8);*)
sDMG:=CONCAT(MID(DATE_TO_STRING(dd),2,11),'.');
sDMG:=CONCAT(sDMG, MID(DATE_TO_STRING(dd),2,8));
sDMG:=CONCAT(sDMG, '.');
sDMG:=CONCAT(sDMG, MID(DATE_TO_STRING(dd),2,5));

wChislo:=STRING_TO_WORD(MID(sDMG,2,1));
wMesyac:=STRING_TO_WORD(MID(sDMG,2,4));
wGod:=STRING_TO_WORD(MID(sDMG,2,7));



sCMS:=MID(TOD_TO_STRING(tt),5,5);
wChas:=STRING_TO_WORD(MID(sCMS,2,1));
wMin:=STRING_TO_WORD(MID(sCMS,2,4));

NomerNedely:=DTU.GetDayOfWeek(dtDate:=DT_TO_DATE(dInDate), peError:=pe );
	IF NomerNedely=DTU.RTCLK.WEEKDAY.MONDAY THEN
		DayWeek:=1;
	END_IF
	IF NomerNedely=DTU.RTCLK.WEEKDAY.TUESDAY THEN
		DayWeek:=2;
	END_IF
	IF NomerNedely=DTU.RTCLK.WEEKDAY.WEDNESDAY THEN
		DayWeek:=3;
	END_IF
	IF NomerNedely=DTU.RTCLK.WEEKDAY.THURSDAY THEN
		DayWeek:=4;
	END_IF
	IF NomerNedely=DTU.RTCLK.WEEKDAY.FRIDAY THEN
		DayWeek:=5;
	END_IF
	IF NomerNedely=DTU.RTCLK.WEEKDAY.SATURDAY THEN
		DayWeek:=6;
	END_IF
	IF NomerNedely=DTU.RTCLK.WEEKDAY.SUNDAY THEN
		DayWeek:=7;
	END_IF

END_IF
(*******************************************)	
	
RT_SET(CLK:=b1 , Q=> );
	
Bl_Time(ENABLE:=bON , TIMELOW:=T#1S , TIMEHIGH:=T#1S , OUT=>b1 );

GetDT_01(
	xExecute:=b1 , 
	xDone=>b2 , 
	xBusy=>b3 , 
	xError=>b4 , 
	eError=> , 
	dtDateAndTime=>dInDate , 
	eTimezone=> );