Example #1
0
 // loading Datetime from the CPU
 public Model_dateTime ReadDatetime(int startByteAdr)
 {
     for (int i = 0; i < numberOfConnectionAttempts; i++)  // counter
     {
         Model_dateTime model_dateTime = ReadDatetimeLogics(startByteAdr);
         if (model_dateTime != null)
         {
             statusConnCpu = true;
             // IF year, month, day = 0 THERE Id_DateTime = -1;
             if (model_dateTime.Id_DateTime == -1)
             {
                 statusConnCpu = true;
                 //TODO need a logger
                 return(model_dateTime);   // There are data
             }
             else
             {
                 return(model_dateTime);   // There are data
             }
         }
         Thread.Sleep(Properties.Settings.Default.LoadCpuExceptionTime);     //msec
     }
     statusConnCpu = false;
     return(null);   // There aren't data
 }
Example #2
0
        private Model_dateTime ReadDatetimeLogics(int startByteAdr)
        {
            int dataBlock = Properties.Settings.Default.DataBlockDatetime;

            indexShag = startByteAdr - 1;
            Model_dateTime modelDateTime = null;

            //int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
            int[] dateTimeArr  = new int[6];
            int   addShagBytes = indexShag * byteStep;

            try
            {
                using (var plc = new Plc(
                           GetCpuTypeConnect.GetCpuType(Properties.Settings.Default.CpuType),
                           Properties.Settings.Default.IpCpu,
                           Properties.Settings.Default.RackCpu,
                           Properties.Settings.Default.SlotCpu)) //"172.17.132.200"       "127.0.0.1"
                {
                    Thread.Sleep(timeWaitForOpenConnectCpu);
                    plc.Open();
                    if (plc.IsConnected)
                    {
                        modelDateTime = new Model_dateTime();

                        for (int i = 0; i < dateTimeArr.Length; i++)
                        {
                            dateTimeArr[i] = GetPlcRead(plc, dataBlock, i * 2 + addShagBytes);
                        }
                        modelDateTime.Id_DateTime = getIdDateTimeForReadDatetime(dateTimeArr);
                        modelDateTime.DateTime    = getDateTimeForReadDatetime(dateTimeArr);
                    }
                    else
                    {
                        modelDateTime = null;
                        //TODO need a logger
                    }
                }
            }
            catch (Exception ex)
            {
                modelDateTime = null;
                //TODO need a logger
            }
            return(modelDateTime);
        }
Example #3
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;
                }
            }
        }
Example #4
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
        }
Example #5
0
        // TEST--------------------TEST-----------------
        public void TESTaddToBd()
        {
            Model_dateTime modelDTBase = new Model_dateTime();

            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(10000);
                modelDTBase.Id_DateTime = 423432 + i;
                modelDTBase.DateTime    = DateTime.Now;

                using (SqlContext db = new SqlContext())
                {
                    try
                    {
                        db.model_dateTime.Add(modelDTBase);
                        db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
        }
Example #6
0
 /// <summary>
 /// Проверка-на-присудствие-записи-в-SQL
 /// </summary>
 /// <param name="valueCheck"></param>
 /// <returns>true - Is present, false - Not present</returns>
 private bool IsCheckPresent(long valueCheck)
 {
     using (SqlContext db = new SqlContext())
     {
         try
         {
             Model_dateTime myEntity = db.model_dateTime.FirstOrDefault(p => p.Id_DateTime == valueCheck);
             WorkCpu.statusConnSql = true;
             if (myEntity == null)
             {
                 return(false);
             }
             else
             {
                 return(true);
             }
         }
         catch (Exception ex)
         {
             logger.Error(ex.Message, "CheckDateTimeCpu() --> DateTimWritePp=" + valueCheck);
             return(false);
         }
     }
 }
Example #7
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);
            }
        }