private void btnResetTank_Click(object sender, EventArgs e) { clsProduct Prd = mf.Products.Item(CurrentProduct); Prd.ResetTank(); TankRemain.Text = Prd.CurrentTankRemaining().ToString("N0"); }
private void UpdateForm() { Initializing = true; UpdateDiags(); LoadSettings(); SetVCNpid(); SetModuleIndicator(); SetCalButtons(); SetDayMode(); clsProduct Prd = mf.Products.Item(CurrentProduct); lbProduct.Text = (CurrentProduct + 1).ToString() + ". " + Prd.ProductName; if (Prd.SimulationType != SimType.None) { lbProduct.Text = lbProduct.Text + " Simulation"; //lbProduct.ForeColor = mf.SimColor; lbProduct.BackColor = mf.SimColor; lbProduct.BorderStyle = BorderStyle.FixedSingle; } else { lbProduct.ForeColor = SystemColors.ControlText; lbProduct.BackColor = Properties.Settings.Default.DayColour; lbProduct.BorderStyle = BorderStyle.None; } Initializing = false; UpdateSwitches(); }
public PGN32615(clsProduct CalledFrom) { Prod = CalledFrom; VCN = 743; SendTime = 200; WaitTime = 750; MinPWM = 145; }
public void Load() { cProducts.Clear(); for (int i = 0; i < MaxRecords; i++) { clsProduct Prod = new clsProduct(mf, i); cProducts.Add(Prod); Prod.Load(); } }
private double RunningCounts() { double Result = 0; clsProduct Prd = mf.Products.Item(CurrentProduct); if (Prd.FlowCal > 0) { Result = (Prd.QuantityApplied() - mf.CalCounterStart) * Prd.FlowCal; } return(Result); }
public PGN32616(clsProduct CalledFrom) { Prod = CalledFrom; KP = 20; MinPWM = 50; LowMax = 150; HighMax = 255; DeadBand = 3; BrakePoint = 2; }
public PGN32616(clsProduct CalledFrom) { Prod = CalledFrom; cKP = 50; cMinPWM = 30; cLowMax = 75; cHighMax = 100; cDeadBand = 4; cBrakePoint = 20; cTimedAdjustment = 0; }
private double CalCounts() { clsProduct Prd = mf.Products.Item(CurrentProduct); double Result = 0; if (Prd.FlowCal > 0) { Result = (mf.CalCounterEnd - mf.CalCounterStart) * Prd.FlowCal; } return(Result); }
private void NewRate() { // update rate for currently displayed product // rate change amount int RateSteps = 0; if ((OutCommand & 4) == 4) { RateSteps = 1; } if ((OutCommand & 8) == 8) { RateSteps += 2; } if (RateSteps > 0) { // rate direction bool RateUp = false; RateUp = (OutCommand & 32) == 32; // change rate float ChangeAmount = 1; for (byte a = 1; a <= RateSteps; a++) { if (RateUp) { ChangeAmount *= (1 + RateCalcFactor); } else { ChangeAmount *= (1 - RateCalcFactor); } } clsProduct Prd = mf.Products.Item(mf.CurrentProduct() - 1); Prd.ManualRateFactor = ChangeAmount; if (SwON[(int)Switches.Auto]) { double CurrentRate = Prd.RateSet; if (RateUp & CurrentRate == 0) { CurrentRate = 1; // provide a starting point } CurrentRate = Math.Round(CurrentRate * ChangeAmount, 1); Prd.RateSet = CurrentRate; } } }
public PGN32613(clsProduct CalledFrom) { Prod = CalledFrom; }
public PGN32614(clsProduct CalledFrom) { Prod = CalledFrom; cData[0] = 102; cData[1] = 127; }
public clsArduino(clsProduct CalledFrom) { RC = CalledFrom; }
public void UpdateStatus() { if (CurrentPage == 0) { // summary for (int i = 0; i < 5; i++) { ProdName[i].Text = Products.Item(i).ProductName; if (Products.Item(i).SimulationType == SimType.None) { ProdName[i].ForeColor = SystemColors.ControlText; ProdName[i].BackColor = Properties.Settings.Default.DayColour; ProdName[i].BorderStyle = BorderStyle.None; } else { //ProdName[i].ForeColor = SimColor; ProdName[i].BackColor = SimColor; ProdName[i].BorderStyle = BorderStyle.FixedSingle; } Rates[i].Text = Products.Item(i).SmoothRate().ToString("N1"); if (Products.Item(i).ArduinoModule.Connected()) { Indicators[i].Image = Properties.Resources.OnSmall; } else { Indicators[i].Image = Properties.Resources.OffSmall; } } lbArduinoConnected.Visible = false; } else { // product pages lbProduct.Text = CurrentPage.ToString() + ". " + Products.Item(CurrentPage - 1).ProductName; lblUnits.Text = Products.Item(CurrentPage - 1).Units(); SetRate.Text = Products.Item(CurrentPage - 1).TargetRate().ToString("N1"); if (ShowCoverageRemaining) { lbCoverage.Text = CoverageDescriptions[Products.Item(CurrentPage - 1).CoverageUnits] + " Left ..."; double RT = Products.Item(CurrentPage - 1).SmoothRate(); if (RT == 0) { RT = Products.Item(CurrentPage - 1).TargetRate(); } if ((RT > 0) & (Products.Item(CurrentPage - 1).CurrentTankRemaining() > 0)) { AreaDone.Text = ((Products.Item(CurrentPage - 1).CurrentTankRemaining() - Products.Item(CurrentPage - 1).CurrentApplied()) / RT).ToString("N1"); } else { AreaDone.Text = "0.0"; } } else { // show amount done AreaDone.Text = Products.Item(CurrentPage - 1).CurrentCoverage().ToString("N1"); lbCoverage.Text = Products.Item(CurrentPage - 1).CoverageDescription() + " ..."; } if (ShowQuantityRemaining) { lbRemaining.Text = Lang.lgTank_Remaining + " ..."; TankRemain.Text = (Products.Item(CurrentPage - 1).CurrentTankRemaining() - Products.Item(CurrentPage - 1).CurrentApplied()).ToString("N1"); } else { // show amount done lbRemaining.Text = Lang.lgQuantityApplied + " ..."; TankRemain.Text = Products.Item(CurrentPage - 1).CurrentApplied().ToString("N1"); } switch (RateType[CurrentPage - 1]) { case 1: lbRate.Text = Lang.lgInstantRate; lbRateAmount.Text = Products.Item(CurrentPage - 1).CurrentRate().ToString("N1"); break; case 2: lbRate.Text = Lang.lgOverallRate; lbRateAmount.Text = Products.Item(CurrentPage - 1).AverageRate().ToString("N1"); break; default: lbRate.Text = Lang.lgCurrentRate; lbRateAmount.Text = Products.Item(CurrentPage - 1).SmoothRate().ToString("N1"); break; } clsProduct Prd = Products.Item(CurrentPage - 1); if (Prd.SimulationType == SimType.None) { if (Prd.ArduinoModule.ModuleSending()) { if (Prd.ArduinoModule.ModuleReceiving()) { lbArduinoConnected.BackColor = Color.LightGreen; } else { lbArduinoConnected.BackColor = Color.LightBlue; } } else { lbArduinoConnected.BackColor = Color.Red; } } else { lbArduinoConnected.BackColor = SimColor; } lbArduinoConnected.Visible = true; } if (AutoSteerPGN.Connected()) { lbAogConnected.BackColor = Color.LightGreen; } else { lbAogConnected.BackColor = Color.Red; } if (CurrentPage == 0) { panProducts.Visible = false; panSummary.Visible = true; } else { panProducts.Visible = true; panSummary.Visible = false; } // alarm RCalarm.CheckAlarms(); // metric if (UseInches) { MnuOptions.DropDownItems["metricToolStripMenuItem"].Image = Properties.Resources.Xmark; } else { MnuOptions.DropDownItems["metricToolStripMenuItem"].Image = Properties.Resources.CheckMark; } }
private void ReadRateSwitches() { if (mf.SwitchBox.SwitchOn(SwIDs.RateUp) || mf.SwitchBox.SwitchOn(SwIDs.RateDown)) { SWreadTime = DateTime.Now; if ((SWreadTime - RateLastTime).TotalMilliseconds > StepDelay) { RateLastTime = DateTime.Now; if (mf.SwitchBox.SwitchOn(SwIDs.RateUp)) { if (mf.Tls.BitRead(OutCommand, 2)) { if (!mf.Tls.BitRead(OutCommand, 3)) { OutCommand = mf.Tls.BitSet(OutCommand, 3); OutCommand = mf.Tls.BitClear(OutCommand, 2); } } else { OutCommand = mf.Tls.BitSet(OutCommand, 2); } OutCommand = mf.Tls.BitClear(OutCommand, 4); // left OutCommand = mf.Tls.BitSet(OutCommand, 5); // rate up } if (mf.SwitchBox.SwitchOn(SwIDs.RateDown)) { if (mf.Tls.BitRead(OutCommand, 2)) { if (!mf.Tls.BitRead(OutCommand, 3)) { OutCommand = mf.Tls.BitSet(OutCommand, 3); OutCommand = mf.Tls.BitClear(OutCommand, 2); } } else { OutCommand = mf.Tls.BitSet(OutCommand, 2); } OutCommand = mf.Tls.BitClear(OutCommand, 4); // left OutCommand = mf.Tls.BitClear(OutCommand, 5); // rate down } } // update rate for currently displayed product // rate change amount int RateSteps = 0; if ((OutCommand & 4) == 4) { RateSteps = 1; } if ((OutCommand & 8) == 8) { RateSteps += 2; } if (RateSteps > 0) { // rate direction bool RateUp = false; RateUp = (OutCommand & 32) == 32; // change rate float ChangeAmount = 1; for (byte a = 1; a <= RateSteps; a++) { if (RateUp) { ChangeAmount *= (1 + RateCalcFactor); } else { ChangeAmount *= (1 - RateCalcFactor); } } clsProduct Prd = mf.Products.Item(mf.CurrentProduct() - 1); // set manual adjustment rate double Dir = -1.0; if (RateUp) { Dir = 1.0; } switch (RateSteps) { case 2: Prd.ManualAdjust = (double)Prd.PIDminPWM / 100.0 * 255.0 * 2.0; if (Prd.ManualAdjust > 255) { Prd.ManualAdjust = 255; } Prd.ManualAdjust *= Dir; break; case 3: Prd.ManualAdjust = (double)Prd.PIDminPWM / 100.0 * 255.0 * 3.0; if (Prd.ManualAdjust > 255) { Prd.ManualAdjust = 255; } Prd.ManualAdjust *= Dir; break; default: Prd.ManualAdjust = (double)Prd.PIDminPWM / 100.0 * 255.0 * Dir; break; } if (mf.SwitchBox.SwitchOn(SwIDs.Auto)) { double CurrentRate = Prd.RateSet; if (RateUp & CurrentRate == 0) { CurrentRate = 1; // provide a starting point } CurrentRate = Math.Round(CurrentRate * ChangeAmount, 1); Prd.RateSet = CurrentRate; } } } else { // rate switch not pressed if ((SWreadTime - RateLastTime).TotalMilliseconds > EraseDelay) { // clear rate values after delay OutCommand = mf.Tls.BitClear(OutCommand, 2); OutCommand = mf.Tls.BitClear(OutCommand, 3); OutCommand = mf.Tls.BitClear(OutCommand, 4); OutCommand = mf.Tls.BitClear(OutCommand, 5); mf.Products.Item(mf.CurrentProduct() - 1).ManualAdjust = 0; } } }
private void SaveSettings() { double tempD; int tempInt; byte tempB; clsProduct Prd = mf.Products.Item(CurrentProduct); Prd.QuantityUnits = Convert.ToByte(VolumeUnits.SelectedIndex); Prd.CoverageUnits = Convert.ToByte(AreaUnits.SelectedIndex); double.TryParse(RateSet.Text, out tempD); Prd.RateSet = tempD; double.TryParse(tbAltRate.Text, out tempD); Prd.RateAlt = tempD; double.TryParse(FlowCal.Text, out tempD); Prd.FlowCal = tempD; double.TryParse(TankSize.Text, out tempD); Prd.TankSize = tempD; Prd.ValveType = Convert.ToByte(ValveType.SelectedIndex); Prd.VariableRate = Convert.ToByte(cbVR.SelectedIndex); double.TryParse(TankRemain.Text, out tempD); Prd.SetTankRemaining(tempD); Prd.SimulationType = SelectedSimulation; Prd.ProductName = tbProduct.Text; byte.TryParse(tbConID.Text, out tempB); Prd.ModuleID = tempB; // PID byte.TryParse(tbPIDkp.Text, out tempB); Prd.PIDkp = tempB; byte.TryParse(tbPIDki.Text, out tempB); Prd.PIDki = tempB; byte.TryParse(tbPIDMinPWM.Text, out tempB); Prd.PIDminPWM = tempB; byte.TryParse(tbPIDLowMax.Text, out tempB); Prd.PIDLowMax = tempB; byte.TryParse(tbPIDHighMax.Text, out tempB); Prd.PIDHighMax = tempB; byte.TryParse(tbPIDDeadBand.Text, out tempB); Prd.PIDdeadband = tempB; byte.TryParse(tbPIDBrakePoint.Text, out tempB); Prd.PIDbrakepoint = tempB; byte.TryParse(tbTimedAdjustment.Text, out tempB); Prd.PIDTimed = tempB; int.TryParse(tbCountsRev.Text, out tempInt); Prd.CountsRev = tempInt; byte.TryParse(tbSenID.Text, out tempB); Prd.SensorID = tempB; Prd.UseMultiPulse = (rbMultiPulse.Checked); double.TryParse(tbMinUPM.Text, out tempD); Prd.MinUPM = tempD; Prd.UseOffRateAlarm = ckOffRate.Checked; byte.TryParse(tbOffRate.Text, out tempB); Prd.OffRateSetting = tempB; Prd.Save(); }
private void LoadSettings() { byte tempB; clsProduct Prd = mf.Products.Item(CurrentProduct); tbProduct.Text = Prd.ProductName; VolumeUnits.SelectedIndex = Prd.QuantityUnits; AreaUnits.SelectedIndex = Prd.CoverageUnits; RateSet.Text = Prd.RateSet.ToString("N1"); tbAltRate.Text = Prd.RateAlt.ToString("N0"); FlowCal.Text = Prd.FlowCal.ToString("N1"); TankSize.Text = Prd.TankSize.ToString("N0"); ValveType.SelectedIndex = Prd.ValveType; cbVR.SelectedIndex = Prd.VariableRate; TankRemain.Text = Prd.CurrentTankRemaining().ToString("N0"); tbCountsRev.Text = (Prd.CountsRev.ToString("N0")); string tmp = Prd.ModuleID.ToString(); if (tmp == "99") { tmp = ""; } tbConID.Text = tmp; SelectedSimulation = Prd.SimulationType; ckSimulate.Checked = (SelectedSimulation == SimType.VirtualNano); // PID tbPIDkp.Text = Prd.PIDkp.ToString("N0"); tbPIDki.Text = Prd.PIDki.ToString("N0"); tbPIDMinPWM.Text = Prd.PIDminPWM.ToString("N0"); tbPIDLowMax.Text = Prd.PIDLowMax.ToString("N0"); tbPIDHighMax.Text = Prd.PIDHighMax.ToString("N0"); tbPIDDeadBand.Text = Prd.PIDdeadband.ToString("N0"); tbPIDBrakePoint.Text = Prd.PIDbrakepoint.ToString("N0"); byte temp = Prd.PIDTimed; if (temp == 0) { ckTimedResponse.Checked = false; tbTimedAdjustment.Enabled = false; tbTimedAdjustment.Text = "0"; } else { ckTimedResponse.Checked = true; tbTimedAdjustment.Enabled = true; tbTimedAdjustment.Text = temp.ToString("N0"); } tbSenID.Text = Prd.SensorID.ToString(); rbSinglePulse.Checked = !(Prd.UseMultiPulse); rbMultiPulse.Checked = (Prd.UseMultiPulse); // load defaults if blank byte.TryParse(tbPIDkp.Text, out tempB); if (tempB == 0) { LoadDefaults(); SaveSettings(); } tbMinUPM.Text = Prd.MinUPM.ToString("N1"); ckOffRate.Checked = Prd.UseOffRateAlarm; tbOffRate.Text = Prd.OffRateSetting.ToString("N0"); }
private void UpdateDiags() { clsProduct Prd = mf.Products.Item(CurrentProduct); if (mf.UseInches) { lbWorkRate.Text = Lang.lgAcresHr; } else { lbWorkRate.Text = Lang.lgHectares_Hr; } double Target = Prd.TargetUPM(); double Applied = Prd.UPMapplied(); double RateError = 0; lbRateSetData.Text = Target.ToString("N1"); lbRateAppliedData.Text = Applied.ToString("N1"); if (Target > 0) { RateError = ((Applied - Target) / Target) * 100; bool IsNegative = RateError < 0; RateError = Math.Abs(RateError); if (RateError > 100) { RateError = 100; } if (IsNegative) { RateError *= -1; } } lbErrorPercent.Text = RateError.ToString("N1"); lbPWMdata.Text = Prd.PWM().ToString("N0"); lbWidthData.Text = Prd.Width().ToString("N1"); lbWorkRateData.Text = Prd.WorkRate().ToString("N1"); if (mf.UseInches) { lbWidth.Text = Lang.lgWorkingWidthFT; } else { lbWidth.Text = Lang.lgWorkingWidthM; } lbSpeedData.Text = Prd.Speed().ToString("N1"); if (mf.UseInches) { lbSpeed.Text = Lang.lgMPH; } else { lbSpeed.Text = Lang.lgKPH; } // update sections for (int i = 0; i < 16; i++) { Sec[i].Enabled = (mf.Sections.Item(i).Enabled); if (mf.Sections.Item(i).IsON) //if (mf.Sections.IsSectionOn(i)) { Sec[i].Image = Properties.Resources.OnSmall; } else { Sec[i].Image = Properties.Resources.OffSmall; } } // RPM if (Prd.CountsRev > 0) { float RPM = (float)((Prd.FlowCal * Applied) / Prd.CountsRev); lbRPM.Text = RPM.ToString("N0"); } else { lbRPM.Text = "0"; } }