// 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 }
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); }
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; } } }
/// <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 }
// 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) { } } } }
/// <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); } } }
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); } }