Ejemplo n.º 1
0
        /// <summary>
        /// return id - последний записанный id
        /// (можно переносить новые id с таб. Model_dateTime в таб. Model_CycleDateTime
        /// </summary>
        private void YesRecords_CalcTransitionCmena(LoadCpu loadCpu, SqlContext db, long idMaxCycle)
        {
            var lastDateTime = db.model_dateTime.FirstOrDefault(oldDt => oldDt.Id_DateTime == idMaxCycle);

            if (lastDateTime == null)
            {
                // if nextDateTime = 7, 15, 23 hours there + 1 sec.
                long tempMaxCycle = idMaxCycle - 1;
                lastDateTime = db.model_dateTime.FirstOrDefault(oldDt => oldDt.Id_DateTime == tempMaxCycle);
                if (lastDateTime == null)
                {
                    return;
                }
            }

            var next_DateTime = db.model_dateTime.FirstOrDefault(nextDt => nextDt.Id_DateTime > idMaxCycle);

            if (next_DateTime == null)
            {
                return;
            }

            // if nextDateTime = 7, 15, 23 hours there + 1 sec.
            next_DateTime.DateTime = protectingTransitionSmena(next_DateTime.DateTime);

            List <DateTime> downtimeArr = calcTransitionCmena(db, lastDateTime.DateTime, next_DateTime.DateTime);

            CalcDowntimeCmenaToSql(loadCpu, db, lastDateTime.Id_DateTime, next_DateTime.Id_DateTime, downtimeArr, true);
        }
Ejemplo n.º 2
0
        // calc and insert DowntimeCmena to BD SQL
        private void CalcDowntimeCmenaToSql(LoadCpu loadCpu, SqlContext db, long lastId, long nextId, List <DateTime> downtimeArr, bool flagYesRecords)
        {
            for (int i = 1; i < downtimeArr.Count; i++)
            {
                if ((!flagYesRecords) && (i == downtimeArr.Count - 1))
                {
                    return;                                                     // ели нет последнего колеса, выход, не записывая первую запись
                }
                Model_CycleDateTime mCycleDateTime = new Model_CycleDateTime();

                // признак простоя перехода смен
                foreach (var itemSmenPattern in transitionSmenPattern)
                {
                    if ((downtimeArr[i].Hour == itemSmenPattern) && (downtimeArr[i].Second == 0) && (downtimeArr[i].Minute == 0))
                    {
                        mCycleDateTime.FlagDownTimeSmena = true;
                        break;
                    }
                    else
                    {
                        mCycleDateTime.FlagDownTimeSmena = false;
                    }
                }

                mCycleDateTime.Id_DateTime = Convert.ToInt64(
                    loadCpu.NormalIntToString(downtimeArr[i].Year)
                    + loadCpu.NormalIntToString(downtimeArr[i].Month)
                    + loadCpu.NormalIntToString(downtimeArr[i].Day)
                    + loadCpu.NormalIntToString(downtimeArr[i].Hour)
                    + loadCpu.NormalIntToString(downtimeArr[i].Minute)
                    + loadCpu.NormalIntToString(downtimeArr[i].Second)
                    );

                //TODO проверка на дубликаты в БД
                var lastDateTime = db.model_CycleDateTime.FirstOrDefault(oldDt => oldDt.Id_DateTime == mCycleDateTime.Id_DateTime);

                if (lastDateTime != null)
                {
                    // если Id существует в БД  // ПРОВЕРКА НА ДУБЛИКАТЫ!!!!!
                    continue;
                }

                mCycleDateTime.CycleTime   = keyNull;
                mCycleDateTime.DownTime    = keyNull;
                mCycleDateTime.Microsimple = false;
                db.model_CycleDateTime.Add(mCycleDateTime);

                //db.SaveChanges();
                SaveChangesSql(db, mCycleDateTime.Id_Cycle, "CalcDowntimeCmenaToSql(SqlContext db, long lastId, long nextId, List<DateTime> downtimeArr, bool flagYesRecords)");
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 1. if MAX ID_wheel > MAX ID_cycle => OK (go to work)
        /// 2. if marker SMENA time => (go to work2)
        /// 3.
        /// </summary>
        public WorkCycleTable()
        {
            dateTimeDefoult = new DateTime(1985, 1, 1, 1, 1, 1);    // datetime for error

            LoadCpu loadCpu = new LoadCpu();

            string[] result = Properties.Settings.Default.shiftTransition.ToString().Split(',');
            foreach (var itemHour in result)
            {
                transitionSmenPattern.Add(Convert.ToInt32(itemHour));   // itemHour = 7,15,23
            }

            WorkCycle(loadCpu);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Makes the status, for a long time there was no connection with the CPU
 /// isNoConnectionTimeSec = false - No Connection
 /// </summary>
 private void NoConnectionTimeSec(LoadCpu loadCpu)
 {
     if (LoadCpu.statusConnCpu)
     {
         isNoConnectionTimeSec = false;
     }
     else
     {
         // no connection to CPU
         long differenceTime = Convert.ToInt64(DateTime.Now.Subtract(tempNoConnectionTimeSec).TotalSeconds);
         if (differenceTime >= noConnectionLimitTimeSec)
         {
             isNoConnectionTimeSec = true;
         }
     }
 }
Ejemplo n.º 5
0
        private void WorkCycle(LoadCpu loadCpu)
        {
            while (true)
            {
                // STOP
                if (Form1.stopThreadAll)
                {
                    return;
                }

                using (var db = new SqlContext())
                {
                    try
                    {
                        Thread.Sleep(Properties.Settings.Default.timerWorkCycle);
                        long idLast_DateTime = CheckEqualityMaxId(db);
                        WorkCpu.statusConnSql = true;
                        switch (idLast_DateTime)
                        {
                        case -1:
                            NoRecords_CalcTransitionCmena(loadCpu, db, idLast_DateTime);        // return "-1" - (idDateTimeMax = idCycleMax) новых id нет для переноса, проверка на переход смен
                            break;

                        case -2: continue;                                              // return "-2" - нет записей в таб. Model_dateTime (таб. пустая)

                        case -3:
                            NoMaxIdTableCycle_CalcTransitionCmena(db);                 // return "-3" - нет записей в таб. Model_CycleDateTime (таб. пустая)
                            break;

                        default:
                            YesRecords_CalcTransitionCmena(loadCpu, db, idLast_DateTime);      // return id - последний записанный id (можно переносить новые id с таб. Model_dateTime в таб. Model_CycleDateTime
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex.Message, " WorkCycle()");
                        Thread.Sleep(Properties.Settings.Default.timerException);
                        WorkCpu.statusConnSql = false;
                    }
                }
                //System.Diagnostics.Debug.Print(++flagDebug + " ----- " + System.DateTime.Now + "\n");

                CalcSaveDowntimeToSql();
            }
        }
Ejemplo n.º 6
0
        public SettingsForm()
        {
            InitializeComponent();

            loadCpu = new LoadCpu();

            cpuTypeComboBox.Text           = GetCpuTypeConnect.GetStrCpuType(Properties.Settings.Default.CpuType);
            ipTypeTextBox.Text             = Properties.Settings.Default.IpCpu;
            rackCpuTextBox.Text            = Properties.Settings.Default.RackCpu.ToString();
            slotCpuTextBox.Text            = Properties.Settings.Default.SlotCpu.ToString();
            timeSleepExceptionBox.Text     = Properties.Settings.Default.timerException.ToString();
            timerStandartCycleTextBox.Text = Properties.Settings.Default.timerStandartCycle.ToString();
            timerMicroDowntimeTextBox.Text = Properties.Settings.Default.timerMicroDowntime.ToString();

            dbLimitCpuTextBox.Text      = Properties.Settings.Default.DataBlockLimit.ToString();
            dbDatetimeCpuTextBox.Text   = Properties.Settings.Default.DataBlockDatetime.ToString();
            shiftTransitionTextBox.Text = Properties.Settings.Default.shiftTransition;

            new Thread(cycleWord).Start();
        }
Ejemplo n.º 7
0
        private void WriteDateTimeToSql(LoadCpu loadCpu, Model_dateTime modelDTBase, int newIndexDb)
        {
            using (SqlContext db = new SqlContext())
            {
                statusConnSql = true;
                try
                {
                    // check id for duplicates
                    Model_dateTime myEntity = db.model_dateTime.FirstOrDefault(p => p.Id_DateTime == modelDTBase.Id_DateTime);

                    if (myEntity == null)
                    {
                        // add to BD SQL -------------------------WRITE-----<-----<-----<
                        db.model_dateTime.Add(modelDTBase);
                        db.SaveChanges();
                    }
                    loadCpu.WritePositionLimitsCpu(newIndexDb);   // write PositionRead
                }
                catch (Exception ex)
                {
                    Thread.Sleep(Properties.Settings.Default.timerException);
                    try
                    {
                        // add to BD SQL -------------------------WRITE-----<-----<-----<
                        db.model_dateTime.Add(modelDTBase);
                        db.SaveChanges();
                        statusConnSql = true;
                    }
                    catch (Exception ex2)
                    {
                        logger.Error(ex2.Message, " --- WriteDateTimeToSql(Model_dateTime modelDTBase, int newIndexDb)  --> no load MAX Id");
                        statusConnSql = false;
                    }
                    logger.Error(ex.Message, " --- WriteDateTimeToSql(Model_dateTime modelDTBase, int newIndexDb)  --> no load MAX Id");
                    Thread.Sleep(Properties.Settings.Default.timerException);
                    statusConnSql = false;
                }
            }
        }
Ejemplo n.º 8
0
 private int LocationIndexDb(LoadCpu loadCpu, LimitsCpu limitsCpu)
 {
     // last index BD
     if (limitsCpu.PositionRead == limitsCpu.PositionMax)
     {
         if (limitsCpu.PositionRead != limitsCpu.PositionWrite)
         {
             limitsCpu.PositionRead = limitsCpu.PositionMin;
             return(limitsCpu.PositionMin);
         }
         else
         {
             return(limitsCpu.PositionRead);
         }
     }
     // not to do
     if (limitsCpu.PositionRead == limitsCpu.PositionWrite)
     {
         return(limitsCpu.PositionRead);  // - addPositionIndex;
     }
     // ok
     if (limitsCpu.PositionRead >= limitsCpu.PositionMin - addPositionIndex)
     {
         if (CheckDateTimeCpu(loadCpu, limitsCpu))
         {
             return(limitsCpu.PositionWrite + addPositionIndex);  // idex > Write --> new value (will Write < Read)
         }
         else
         {
             return(limitsCpu.PositionRead + addPositionIndex);   // (will Write > Read)
         }
     }
     else
     {
         // bad
         return(limitsCpu.PositionMin - addPositionIndex);
     }
 }
Ejemplo n.º 9
0
        /// <summary>
        /// return "-1" - (idDateTimeMax = idCycleMax)
        /// новых id нет для переноса, проверка на переход смен
        /// </summary>
        /// <param name="db">пердаем SqlContext</param>
        /// <param name="idCycleMax">миксим. id а таб. Model_CycleDateTime</param>
        private void NoRecords_CalcTransitionCmena(LoadCpu loadCpu, SqlContext db, long idMaxCycle)
        {
            // PositionRead == PositionWrite ==> считаем простой;
            if ((!loadCpu.checkWriteReadEqually) && (isFirstNoRecords_CalcTransitionCmena))
            {
                isFirstNoRecords_CalcTransitionCmena = true;
                return;
            }

            long idCycleMax = db.model_CycleDateTime.DefaultIfEmpty()
                              .Where(p => p.FlagDownTimeSmena == false)
                              .Max(p => p.Id_DateTime);

            Model_dateTime m_dateTime = db.model_dateTime.FirstOrDefault(idDb => idDb.Id_DateTime == idCycleMax);

            if (m_dateTime == null)
            {
                return;
            }
            List <DateTime> downtimeArr = calcTransitionCmena(db, m_dateTime.DateTime, DateTime.Now);

            CalcDowntimeCmenaToSql(loadCpu, db, idMaxCycle, idCycleMax, downtimeArr, false);  // calc and insert DowntimeCmena to BD SQL
        }
Ejemplo n.º 10
0
        public WorkCpu()
        {
            LoadCpu loadCpu = new LoadCpu();

            while (true)
            {
                // STOP
                if (Form1.stopThreadAll)
                {
                    return;
                }

                workCpuStatus = true;

                // Makes the status, for a long time there was no connection with the CPU
                NoConnectionTimeSec(loadCpu);

                // select limits---------------
                LimitsCpu limitsCpu = loadCpu.ReadLimits();
                if (limitsCpu == null)
                {
                    continue;   // error connect
                }
                if ((limitsCpu.PositionRead < limitsCpu.PositionMin) ||
                    (limitsCpu.PositionRead > limitsCpu.PositionMax))
                {
                    loadCpu.WritePositionLimitsCpu(limitsCpu.PositionMin);   // write PositionRead
                    continue;
                }
                //------------------------------

                writeIndex = limitsCpu.PositionWrite;
                readIndex  = limitsCpu.PositionRead;


                // new PositionRead + 1
                int newIndexDb = LocationIndexDb(loadCpu, limitsCpu);
                // if there isn't data
                if (newIndexDb < limitsCpu.PositionMin)
                {
                    FindMaxIdFromSql();
                    continue;
                }
                else
                {
                    // loading data all CPU--------
                    Model_dateTime modelDTBase = loadCpu.ReadDatetime(newIndexDb);
                    if (modelDTBase == null)
                    {
                        continue;   // error connect
                    }
                    if (modelDTBase.Id_DateTime == -1)
                    {
                        loadCpu.WritePositionLimitsCpu(newIndexDb);   // write PositionWrite (+1)
                        continue;
                    }
                    //------------------------------

                    idMaxSql = modelDTBase.Id_DateTime;  // save ID to static

                    // ok <<< Write id and DateTime to SQL
                    WriteDateTimeToSql(loadCpu, modelDTBase, newIndexDb);
                }

                if (Form1.stopThreadAll)
                {
                    return;                         // STOP
                }
                Thread.Sleep(Properties.Settings.Default.timerWorkCycle);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Write перегнал Read (1 цикл)
        /// </summary>
        /// <returns>
        /// false - продолжать с Read (+2)
        /// true - продолжать с Write (+2)
        /// </returns>
        private bool CheckDateTimeCpu(LoadCpu loadCpu, LimitsCpu limitsCpu)
        {
            //----------------------------------------------------------------
            // loading data all CPU
            var tempDtRead  = loadCpu.ReadDatetime(limitsCpu.PositionRead);
            var tempDtWrite = loadCpu.ReadDatetime(limitsCpu.PositionWrite);

            if ((tempDtRead == null) || (tempDtWrite == null))
            {
                return(false);
            }
            long dtRead  = tempDtRead.Id_DateTime;
            long dtWrite = tempDtWrite.Id_DateTime;

            // no connections > 1 hour
            if ((!isNoConnectionTimeSec) && (dtRead < dtWrite))
            {
                // after (перегнал)
                return(false);
            }
            //----------------------------------------------------------------
            long dtdtReadAfterWrite;

            if ((limitsCpu.PositionWrite + addPositionIndex > limitsCpu.PositionMax) || (limitsCpu.PositionWrite < limitsCpu.PositionMin))
            {
                var tempDtdtReadAfterWrite = loadCpu.ReadDatetime(limitsCpu.PositionMin);
                if (tempDtdtReadAfterWrite == null)
                {
                    return(false);
                }
                else
                {
                    dtdtReadAfterWrite = tempDtdtReadAfterWrite.Id_DateTime;
                }
            }
            else
            {
                var tempDtdtReadAfterWrite = loadCpu.ReadDatetime(limitsCpu.PositionWrite + addPositionIndex);
                if (tempDtdtReadAfterWrite == null)
                {
                    return(false);
                }
                else
                {
                    dtdtReadAfterWrite = tempDtdtReadAfterWrite.Id_DateTime;
                }
            }

            if (dtdtReadAfterWrite == 0)
            {
                // before
                return(false);
            }

            // no connections > 1 hour
            if (isNoConnectionTimeSec)
            {
                // after (перегнал)
                if ((dtRead < dtWrite) && (dtRead > dtdtReadAfterWrite))
                {
                    // true - Is present to SQL (dtdtReadAfterWrite)
                    if (!IsCheckPresent(dtdtReadAfterWrite))
                    {
                        return(true);
                    }
                }
            }
            // before
            return(false);
        }