static bool ReadDataU_Plc_Inner(uchar i) { sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if (SearchDefHouIndex(tiDig) == 0) return(1); ShowProgressDigHou(); MakeDataU(i); MakeSpecial(tiDig); return(MakeStopHou(0)); }
static bool ReadDataS(uchar i) { sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if (SearchDefHouIndex(tiDig) == 0) return(1); ShowProgressDigHou(); InitPop(9+i*3); ulong dw = PopChar(); dw += PopChar()*0x100; dw += PopChar()*0x10000; if (dw != 0xFFFFFF) { double dbPulse = mpdbPulseHou[ibDig]; double db = (double)dw/wDividerS; mpdbEngFrac[ibDig] += db; uint w; if ((ulong)(mpdbEngFrac[ibDig]*dbPulse) < 0xFFFF) { w = (uint)(mpdbEngFrac[ibDig]*dbPulse); } else { w = 0xFFFF; mpcwOverflowHhr[ibDig]++; } mpwChannels[0] = w; mpdbEngFrac[ibDig] -= (double)w/dbPulse; MakeSpecial(tiDig); return(MakeStopHou(0)); } else { szLo[15] = '*'; return(MakeStopHou(0)); } }
bool ReadDataQ(void) { uchar j; sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if (SearchDefHouIndex(tiDig) == 0) return(1); if ((tiDig.bDay == tiCurr.bDay) && (tiDig.bMonth == tiCurr.bMonth) && (tiDig.bYear == tiCurr.bYear)) j = 47-(tiCurr.bHour*2+tiCurr.bMinute/30); else j = 0; uchar h; for (h=j; h<48; h++) { ResetWatchdog(); MakeDataQ(47-h); MakeSpecial(tiDig); if (MakeStopHou(0) == 0) return(0); ulong dw = DateToHouIndex(tiDigPrev); dw -= wBaseCurr; tiDig = HouIndexToDate(dw); iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; } return(1); }
bool ReadHeaderBNew(uchar ibBlock, bool fDelay) { HideCurrTime(1); InitPop((uint)(1+(16-ibBlock)*15)); PopChar(); tiDig.bHour = FromBCD(PopChar()); // врем¤/дата часового блока tiDig.bMinute = FromBCD(PopChar()); tiDig.bDay = FromBCD(PopChar()); tiDig.bMonth = FromBCD(PopChar()); tiDig.bYear = FromBCD(PopChar()); if ((tiDig.bHour == 0) && // обрабатываем пустой блок (tiDig.bMinute == 0) && (tiDig.bDay == 0) && (tiDig.bMonth == 0) && (tiDig.bYear == 0)) { if (++iwMajor > GetMaxShutdown()) return(0); sprintf(szLo," выключено: %-4u ",iwMajor); if (fDelay == 1) DelayOff(); if (iwDigHou != 0) { iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; ShowProgressDigHou(); return(MakeStopHou(0)); } else return(1); } if ((tiDig.bDay == tiSummer.bDay) && (tiDig.bMonth == tiSummer.bMonth)) { if ((tiDig.bHour == 3) && (tiDig.bMinute == 0)) { tiDig.bHour = 2; tiDig.bMinute = 0; } } sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if ((tiDig.bMinute % 30) != 0) // обрабатываем неполный получасовой блок { tiDig.bMinute = (tiDig.bMinute / 30)*30; if (SearchDefHouIndex(tiDig) == 0) { szLo[4] = '?'; if (fDelay == 1) DelayOff(); return(1); } iwDigHou = (wHOURS+iwDigHou+1)%wHOURS; } else if (SearchDefHouIndex(tiDig) == 0) { szLo[4] = '?'; if (fDelay == 1) DelayOff(); return(1); } iwMajor = 0; // обнул¤ем счЄтчик после получени¤ правильных данных iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; // врем¤ записи должно соответсвовать началу получасового блока ulong dw = DateToHouIndex(tiCurr); dw -= (wHOURS + iwHardHou - iwDigHou) % wHOURS; time ti = HouIndexToDate(dw); ShowProgressDigHou(); if (fDelay == 1) DelayOff(); PopChar(); uchar i; for (i=0; i<4; i++) { uint w = PopChar(); w += PopChar()*0x100; if (w == 0xFFFF) w = 0; mpwChannels[i] = w; } MakeSpecial(ti); return(MakeStopHou(0)); }