private void btnStep3Start_Click(object sender, EventArgs e)
        {
            dp1 = new drawProcess(this.pictureBox2.Width, this.pictureBox2.Height, Color.DarkCyan);
            dp2 = new drawProcess(this.pictureBox3.Width, this.pictureBox3.Height, Color.DarkCyan);
            //for (int i = 0; i < 6; i++)
            //{
            //    if (i % 2 == 0)
            //    {
            //        trainOrTestForTest.Add(true);
            //    }
            //    else
            //    {
            //        trainOrTestForTest.Add(false);
            //    }

            //    experimentTimeForTest.Add(300);


            //}

            if (tbExperimentName.Text == "")
            {
                MessageBox.Show("ExpName is NULL");
            }
            else
            {
                lpf3.Clear();
                lpf4.Clear();
                positionForEverySequence.Clear();
                torqueForEverySequence.Clear();
                sequenceIndexForExperiment = 0;
                this.flpTopForLabel.Controls.Clear();
                this.flpBottomForImageList.Controls.Clear();
                int controlsLength;
                if (cbSetSeqChoosed_1.Checked)
                {
                    controlsLength     = trainOrTest_1.Count;
                    trainOrTestUsed    = trainOrTest_1;
                    experimentTimeUsed = experimentTime_1;
                }
                else if (cbSetSeqChoosed_2.Checked)
                {
                    controlsLength     = trainOrTest_2.Count;
                    trainOrTestUsed    = trainOrTest_2;
                    experimentTimeUsed = experimentTime_2;
                }
                else
                {
                    controlsLength     = trainOrTest_3.Count;
                    trainOrTestUsed    = trainOrTest_3;
                    experimentTimeUsed = experimentTime_3;
                }


                dp1.getTrainOrTestSequence(trainOrTestUsed);
                dp2.getTrainOrTestSequence(trainOrTestUsed);

                controls = new List <Control>();
                for (int i = 0; i < controlsLength; i++)
                {
                    Label l = new Label();
                    l.Name        = "lblDForSequence" + i.ToString();
                    l.AutoSize    = true;
                    l.BorderStyle = BorderStyle.FixedSingle;
                    l.Margin      = new System.Windows.Forms.Padding(3);
                    l.Font        = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                    if (trainOrTestUsed[i] == true)
                    {
                        l.Text = "Tr: " + experimentTimeUsed[i].ToString();
                    }
                    else
                    {
                        l.Text = "Te: " + experimentTimeUsed[i].ToString();
                    }
                    controls.Add(l);

                    this.flpTopForLabel.Controls.Add(l);
                }
                controls[0].BackColor = Color.DarkCyan;

                positionForEverySequence.Add(new List <float>());
                torqueForEverySequence.Add(new List <float>());
                ifBreakTime = true;
                timer2.Start();
                timer1.Stop();
                this.btnStep3Start.Enabled = false;
            }
        }
Example #2
0
        private void btnStep3Start_Click(object sender, EventArgs e)
        {
            lblChooseDisplay.Visible = true;
            cbIsPosition.Visible     = true;
            cbIsTorque.Visible       = true;

            //vSti = new Stimulations(v.pictureBox1.Width, v.pictureBox1.Height, 1);

            timeBeginPeriod(1);
            uint start = timeGetTime();
            uint newStart;
            int  count = 0;
            int  i = 0, j = 0;

            ifStop = false;

            dp1 = new drawProcess(this.pbPosition.Width, this.pbPosition.Height, Color.DarkCyan);
            dp2 = new drawProcess(this.pbCommunitive.Width, this.pbCommunitive.Height, Color.DarkCyan);

            lpf3.Clear();
            lpf4.Clear();
            positionForEverySequence.Clear();
            torqueForEverySequence.Clear();
            RightOrLeftForEverySequence.Clear();

            sequenceIndexForExperiment = 0;
            this.flpTopForLabel.Controls.Clear();
            this.flpBottomForImageList.Controls.Clear();
            int controlsLength;

            if (cbSetSeqChoosed_1.Checked)
            {
                controlsLength     = trainOrTest_1.Count;
                trainOrTestUsed    = trainOrTest_1;
                experimentTimeUsed = experimentTime_1;
            }
            else if (cbSetSeqChoosed_2.Checked)
            {
                controlsLength     = trainOrTest_2.Count;
                trainOrTestUsed    = trainOrTest_2;
                experimentTimeUsed = experimentTime_2;
            }
            else
            {
                controlsLength     = trainOrTest_3.Count;
                trainOrTestUsed    = trainOrTest_3;
                experimentTimeUsed = experimentTime_3;
            }


            dp1.getTrainOrTestSequence(trainOrTestUsed);
            dp2.getTrainOrTestSequence(trainOrTestUsed);

            controls = new List <Control>();
            for (int ii = 0; ii < controlsLength; ii++)
            {
                Label l = new Label();
                l.Name        = "lblDForSequence" + i.ToString();
                l.AutoSize    = true;
                l.BorderStyle = BorderStyle.FixedSingle;
                l.Margin      = new System.Windows.Forms.Padding(3);
                l.Font        = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                if (trainOrTestUsed[i] == true)
                {
                    l.Text = "Tr: " + experimentTimeUsed[i].ToString();
                }
                else
                {
                    l.Text = "Te: " + experimentTimeUsed[i].ToString();
                }
                controls.Add(l);

                this.flpTopForLabel.Controls.Add(l);
            }
            controls[0].BackColor = Color.DarkCyan;

            positionForEverySequence.Add(new List <float>());
            torqueForEverySequence.Add(new List <float>());
            RightOrLeftForEverySequence.Add(new List <int>());

            this.btnStep3Start.Enabled = false;


            while (!ifStop)
            {
                Application.DoEvents();
                newStart = timeGetTime();

                if (newStart - start >= 100)
                {
                    float torqueVoltageValue;
                    float troque = float.Parse(pc.AnalogInput(1, out torqueVoltageValue));
                    //troque = troque / 100;
                    troque_trans = (troque - 2048) / 2048 * 80;


                    //debug mode
                    //troque_trans = 10;

                    count++;
                    start = newStart;

                    //Wert = p1_c1 * p1_c2 * trq + p1_c3 * p1_c4 * p1_bias_  'p1_c1=0/1 (open closed); p1_c2=+1/-1 (norm/inverted); p1_c3=0/1 (p1_bias on/off); p1_c4=+1/-1 (cw/ccw)
                    //dPsi1 = p1_k * Wert * dt_
                    //ArenaPos1 = ArenaPos1 + dPsi1


                    degree = v.getDegree();
                    this.lblEXPStateP.Text    = degree.ToString();
                    this.lblEXPStateTRaw.Text = troque.ToString();
                    this.lblEXPSTateT.Text    = troque_trans.ToString();


                    //debug mode
                    //degree += 1;

                    if (degree > 180)
                    {
                        degree = degree - 360;
                    }
                    if (degree < -180)
                    {
                        degree = degree + 360;
                    }


                    lpf3.Add(degree);
                    lpf4.Add(troque_trans);
                    //Console.WriteLine(degree);
                    positionForEverySequence[sequenceIndexForExperiment].Add(degree);
                    torqueForEverySequence[sequenceIndexForExperiment].Add(troque_trans);
                    if (v.getRightOrLeft())
                    {
                        RightOrLeftForEverySequence[sequenceIndexForExperiment].Add(1);
                    }
                    else
                    {
                        RightOrLeftForEverySequence[sequenceIndexForExperiment].Add(0);
                    }

                    if (trainOrTestUsed[sequenceIndexForExperiment])
                    {
                        if (rbUpT.Checked)
                        {
                            if ((degree > -45 & degree < 45) || (degree < -135 & degree > 135))
                            {
                                punishmentByHeat();
                                lblPunishmentStateValue.Text = "True";
                            }
                            else
                            {
                                unPunishmentByHeat();
                                lblPunishmentStateValue.Text = "False";
                            }
                        }
                        else
                        {
                            if ((degree <-45 & degree> -135) || (degree > 45 || degree < 135))
                            {
                                unPunishmentByHeat();
                                lblPunishmentStateValue.Text = "False";
                            }
                            else
                            {
                                punishmentByHeat();
                                lblPunishmentStateValue.Text = "True";
                            }
                        }
                    }



                    if (count == experimentTimeUsed[sequenceIndexForExperiment] * 10)
                    {
                        count = 0;
                        sequenceIndexForExperiment++;
                        dp2.clearCommunitivePosition();
                        lpf3.Clear();
                        lpf4.Clear();
                        if (sequenceIndexForExperiment == experimentTimeUsed.Count)
                        {
                            ifStop = true;
                            this.btnStep3Start.Enabled = true;
                            pc.ClearALLDigitalPort();
                            //OpenLoop();
                            cbOpenOrClosed.Checked = false;
                            cbOpenOrClosed.Text    = "Open";
                            DataSave();
                        }
                        else
                        {
                            positionForEverySequence.Add(new List <float>());
                            torqueForEverySequence.Add(new List <float>());
                            RightOrLeftForEverySequence.Add(new List <int>());
                            controls[sequenceIndexForExperiment].BackColor = Color.DarkCyan;
                        }



                        Bitmap   imageHere = new Bitmap(imageNow);
                        Graphics g1        = Graphics.FromImage(imageHere);

                        PICalc piC        = new PICalc(positionForEverySequence[sequenceIndexForExperiment - 1], torqueForEverySequence[sequenceIndexForExperiment - 1], rbUpT.Checked ? true : false);
                        float  PIValueNow = piC.getSinglePIValue();
                        g1.DrawString("PI: " + (PIValueNow).ToString("0.00"), new Font("Arial", 15), new SolidBrush(Color.LightGray), 30, 50);
                        PictureBox pb     = new PictureBox();
                        float      width  = this.flpBottomForImageList.Size.Width - 30;
                        float      height = (int)(((float)this.pbCommunitive.Size.Height / (float)this.pbCommunitive.Size.Width) * width);
                        pb.Size = new Size((int)width, (int)height);

                        pb.Image    = imageHere;
                        pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;

                        this.flpBottomForImageList.Controls.Add(pb);
                    }


                    //this.pictureBox2.CreateGraphics().DrawImage(dp1.drawSignalCurve(lpf3, lpf4), 0, 0);

                    if (lpf3.Count == 400)
                    {
                        lpf3.Remove(lpf3[0]);
                    }

                    if (lpf4.Count == 400)
                    {
                        lpf4.Remove(lpf4[0]);
                    }

                    this.pbPosition.CreateGraphics().DrawImage(dp1.drawSignalCurve(lpf3, lpf4), 0, 0);
                    imageNow = dp2.drawCommunitivePoint(degree, false, sequenceIndexForExperiment);
                    this.pbCommunitive.CreateGraphics().DrawImage(imageNow, 0, 0);
                }
            }
        }
        private void btnStep3Start_Click(object sender, EventArgs e)
        {
            lblChooseDisplay.Visible = true;
            cbIsPosition.Visible     = true;
            cbIsTorque.Visible       = true;

            //vSti = new Stimulations(v.pictureBox1.Width, v.pictureBox1.Height, 1);

            timeBeginPeriod(1);
            uint start = timeGetTime();
            uint newStart;
            int  count = 0;
            int  i = 0, j = 0;

            ifStop = false;

            dp1 = new drawProcess(this.pbPosition.Width, this.pbPosition.Height, Color.DarkCyan);
            //dp2 = new drawProcess(this.pbCommunitive.Width, this.pbCommunitive.Height, Color.DarkCyan);

            lpf3.Clear();
            lpf4.Clear();
            positionForEverySequence.Clear();
            torqueForEverySequence.Clear();
            sequenceIndexForExperiment = 0;
            //this.flpTopForLabel.Controls.Clear();
            //this.flpBottomForImageList.Controls.Clear();
            int controlsLength;

            if (cbSetSeqChoosed_1.Checked)
            {
                controlsLength     = trainOrTest_1.Count;
                trainOrTestUsed    = trainOrTest_1;
                experimentTimeUsed = experimentTime_1;
            }
            else if (cbSetSeqChoosed_2.Checked)
            {
                controlsLength     = trainOrTest_2.Count;
                trainOrTestUsed    = trainOrTest_2;
                experimentTimeUsed = experimentTime_2;
            }
            else
            {
                controlsLength     = trainOrTest_3.Count;
                trainOrTestUsed    = trainOrTest_3;
                experimentTimeUsed = experimentTime_3;
            }


            dp1.getTrainOrTestSequence(trainOrTestUsed);
            //dp2.getTrainOrTestSequence(trainOrTestUsed);

            //controls = new List<Control>();
            //for (int ii = 0; ii < controlsLength; ii++)
            //{
            //    Label l = new Label();
            //    l.Name = "lblDForSequence" + i.ToString();
            //    l.AutoSize = true;
            //    l.BorderStyle = BorderStyle.FixedSingle;
            //    l.Margin = new System.Windows.Forms.Padding(3);
            //    l.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            //    if (trainOrTestUsed[i] == true)
            //    {
            //        l.Text = "Tr: " + experimentTimeUsed[i].ToString();
            //    }
            //    else
            //    {
            //        l.Text = "Te: " + experimentTimeUsed[i].ToString();
            //    }
            //    controls.Add(l);

            //    this.flpTopForLabel.Controls.Add(l);
            //}
            //controls[0].BackColor = Color.DarkCyan;

            positionForEverySequence.Add(new List <float>());
            torqueForEverySequence.Add(new List <float>());


            this.btnStep3Start.Enabled = false;

            float settingDegree = -135;

            oritation = 1;
            vf.SetRandomPoint();



            while (!ifStop)
            {
                Application.DoEvents();
                newStart = timeGetTime();

                if (newStart - start >= 50)
                {
                    sw = new System.Diagnostics.Stopwatch();
                    sw.Start();
                    float torqueVoltageValue;
                    float troque = float.Parse(pc.AnalogInput(1, out torqueVoltageValue));
                    //troque = troque / 100;
                    troque_trans = (troque - 2048) / 2048 * 80;


                    //debug mode
                    //troque_trans = 10;

                    count++;
                    start = newStart;

                    //Wert = p1_c1 * p1_c2 * trq + p1_c3 * p1_c4 * p1_bias_  'p1_c1=0/1 (open closed); p1_c2=+1/-1 (norm/inverted); p1_c3=0/1 (p1_bias on/off); p1_c4=+1/-1 (cw/ccw)
                    //dPsi1 = p1_k * Wert * dt_
                    //ArenaPos1 = ArenaPos1 + dPsi1



                    settingDegree += 1.8f * oritation;
                    if (settingDegree >= 135)
                    {
                        oritation = -1;
                    }
                    if (settingDegree <= -135)
                    {
                        oritation = 1;
                    }


                    this.lblEXPStateP.Text    = settingDegree.ToString();
                    this.lblEXPStateTRaw.Text = troque.ToString();
                    this.lblEXPSTateT.Text    = troque_trans.ToString();


                    //debug mode
                    //degree += 1;


                    //v.pictureBox1.CreateGraphics().DrawImage(vSti.DrawV_Test(degree), 0, 0);

                    lpf3.Add(settingDegree);
                    lpf4.Add(troque_trans);
                    //Console.WriteLine(degree);
                    positionForEverySequence[sequenceIndexForExperiment].Add(settingDegree);
                    torqueForEverySequence[sequenceIndexForExperiment].Add(troque_trans);



                    if (count == experimentTimeUsed[sequenceIndexForExperiment] * 20)
                    {
                        count = 0;
                        sequenceIndexForExperiment++;
                        //dp2.clearCommunitivePosition();
                        lpf3.Clear();
                        lpf4.Clear();
                        settingDegree = -135;
                        oritation     = 1;
                        if (sequenceIndexForExperiment == experimentTimeUsed.Count)
                        {
                            ifStop = true;
                            this.btnStep3Start.Enabled = true;
                            pc.ClearALLDigitalPort();
                            //OpenLoop();
                            cbOpenOrClosed.Checked = false;
                            cbOpenOrClosed.Text    = "Open";
                            DataSave();
                        }
                        else
                        {
                            positionForEverySequence.Add(new List <float>());
                            torqueForEverySequence.Add(new List <float>());
                            //controls[sequenceIndexForExperiment].BackColor = Color.DarkCyan;
                        }
                    }


                    //this.pictureBox2.CreateGraphics().DrawImage(dp1.drawSignalCurve(lpf3, lpf4), 0, 0);

                    if (lpf3.Count == 400)
                    {
                        lpf3.Remove(lpf3[0]);
                    }

                    if (lpf4.Count == 400)
                    {
                        lpf4.Remove(lpf4[0]);
                    }

                    this.pbPosition.CreateGraphics().DrawImage(dp1.drawSignalCurve(lpf3, lpf4), 0, 0);
                    //imageNow = dp2.drawCommunitivePoint(degree, false,sequenceIndexForExperiment);
                    //this.pbCommunitive.CreateGraphics().DrawImage(imageNow, 0, 0);
                    this.vf.pbCanvas.CreateGraphics().DrawImage(vf.getImage(settingDegree), 0, 0);
                    this.vf.simpleOpenGlControl1.Refresh();

                    sw.Stop();
                    TimeSpan ts = sw.Elapsed;
                    this.lblShowFrameTime.Text = ts.Milliseconds.ToString();
                }
            }
        }