/// <summary> /// if(PositionRead == PositionWrite) checkWriteReadEqually = true; /// </summary> private void CheckWREqually(LimitsCpu limitsCpu) { if (limitsCpu.PositionRead == limitsCpu.PositionWrite) { checkWriteReadEqually = true; } else { checkWriteReadEqually = false; } }
// показать write and read private void showSettindBtn_Click(object sender, EventArgs e) { LimitsCpu limitsCpu = loadCpu.ReadLimits(); if (limitsCpu == null) { showSettindBtn.BackColor = Color.Red; return; // error connect } showSettindBtn.BackColor = Color.Green; writeSetLabel.Text = limitsCpu.PositionWrite.ToString(); readSetLabel.Text = limitsCpu.PositionRead.ToString(); }
public LimitsCpu ReadLimits() { for (int i = 0; i < numberOfConnectionAttempts; i++) // counter { LimitsCpu limitsCpu = ReadLimitsLogics(); if (limitsCpu != null) { statusConnCpu = true; CheckWREqually(limitsCpu); // for check return(limitsCpu); // There are data } Thread.Sleep(Properties.Settings.Default.LoadCpuExceptionTime); //msec } statusConnCpu = false; //TODO need a logger return(null); // There aren't data }
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); } }
private LimitsCpu ReadLimitsLogics() { LimitsCpu limitsCpu = null; 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" { Thread.Sleep(timeWaitForOpenConnectCpu); plc.Open(); if (plc.IsConnected) { limitsCpu = new LimitsCpu(); limitsCpu.PositionWrite = GetPlcRead(plc, Properties.Settings.Default.DataBlockLimit, 0); limitsCpu.PositionRead = GetPlcRead(plc, Properties.Settings.Default.DataBlockLimit, 2); limitsCpu.PositionMin = GetPlcRead(plc, Properties.Settings.Default.DataBlockLimit, 4); limitsCpu.PositionMax = GetPlcRead(plc, Properties.Settings.Default.DataBlockLimit, 6); } else { limitsCpu = null; //TODO need a logger } } } catch (Exception ex) { limitsCpu = null; //TODO need a logger } return(limitsCpu); }
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); } }
/// <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); }