Есть в кдс 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=> );




Ответить с цитированием