コード例 #1
0
        private void btnResetTank_Click(object sender, EventArgs e)
        {
            clsProduct Prd = mf.Products.Item(CurrentProduct);

            Prd.ResetTank();
            TankRemain.Text = Prd.CurrentTankRemaining().ToString("N0");
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: PGN32615.cs プロジェクト: BananaSplitz68/AgOpenGPS
        public PGN32615(clsProduct CalledFrom)
        {
            Prod = CalledFrom;

            VCN      = 743;
            SendTime = 200;
            WaitTime = 750;
            MinPWM   = 145;
        }
コード例 #4
0
 public void Load()
 {
     cProducts.Clear();
     for (int i = 0; i < MaxRecords; i++)
     {
         clsProduct Prod = new clsProduct(mf, i);
         cProducts.Add(Prod);
         Prod.Load();
     }
 }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: PGN32616.cs プロジェクト: BananaSplitz68/AgOpenGPS
        public PGN32616(clsProduct CalledFrom)
        {
            Prod = CalledFrom;

            KP         = 20;
            MinPWM     = 50;
            LowMax     = 150;
            HighMax    = 255;
            DeadBand   = 3;
            BrakePoint = 2;
        }
コード例 #7
0
        public PGN32616(clsProduct CalledFrom)
        {
            Prod = CalledFrom;

            cKP              = 50;
            cMinPWM          = 30;
            cLowMax          = 75;
            cHighMax         = 100;
            cDeadBand        = 4;
            cBrakePoint      = 20;
            cTimedAdjustment = 0;
        }
コード例 #8
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);
        }
コード例 #9
0
        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;
                }
            }
        }
コード例 #10
0
 public PGN32613(clsProduct CalledFrom)
 {
     Prod = CalledFrom;
 }
コード例 #11
0
 public PGN32614(clsProduct CalledFrom)
 {
     Prod     = CalledFrom;
     cData[0] = 102;
     cData[1] = 127;
 }
コード例 #12
0
 public clsArduino(clsProduct CalledFrom)
 {
     RC = CalledFrom;
 }
コード例 #13
0
        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;
            }
        }
コード例 #14
0
ファイル: clsSections.cs プロジェクト: SK21/AOG_RC
        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;
                }
            }
        }
コード例 #15
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();
        }
コード例 #16
0
        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");
        }
コード例 #17
0
        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";
            }
        }