Используя Winforms, как мы можем обновлять и использовать значения с тем же именем переменной для следующих итераций в приложениях реального времени? - PullRequest
0 голосов
/ 08 апреля 2019

Моя проблема в основном связана с программой реального времени, в которой я успешно завершил первую итерацию и теперь пытаюсь разработать код для следующих итераций, в котором несколько переменных могут быть обновлены после указанного времени, используя информацию из предыдущего цикла. Я пока не смог найти какой-либо метод и надеюсь на некоторые предложения с примерами кода.

1) сохранять предыдущие значения в разное время, т. Е. 2 ​​секунды (так как я использую таймер)

2) использовать эти значения в следующей итерации с той же шкалой времени

3) повторить тот же сохраненный и обновленный метод и в следующие несколько итераций.

Я утверждаю, что определенная часть кода, как и другая часть кода, взаимодействует, и отправка этого кода в систему сейчас не важна. поэтому, пожалуйста, скажите мне, как я могу сделать это с помощью соответствующего метода, который подходит для нескольких итерационных приложений в режиме реального времени.

в следующем коде мне нужна новая переменная с именем error, которая является разницей между target_x или при 2,4,6,8,10 секундах

error = valglob_kxx_target - current_x;

, а затем обновить константу

kxx_var = kxx + error;

и во втором цикле используйте это kxx через 2,4,6,8 и 10 сек. другой процесс остается прежним. теперь я планировал взять 5 значений valgob kxx_target, current_x и error на 2,4,6,8,10 сек с 1-й итерации. Сохраните эти значения где-нибудь во время первой итерации и во второй итерации используйте эти значения и обновите также во второй итерации. кроме того, те же обновленные значения valglob kxx_target, current_x error и kxx используются в 3-й итерации с той же последовательностью.

С наилучшими пожеланиями, Камран

Я использую этот код для роботизированного приложения и отправляю этот код аппаратному клиенту, а также получаю данные.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Diagnostics;

int valglob_kxx_target;
        int kxx_var;

        //int valglob_kxx_target_ini = 0;


        private void set_target_btn_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer1.Start();
            kxx_var = Int32.Parse(k_xx_textbox.Text);
            valglob_kxx_target = Int32.Parse(targ_X_textbox.Text);

            set_target(k_xx_textbox.Text, k_yy_textbox.Text, k_xy_textbox.Text, k_yx_textbox.Text, b_xx_textbox.Text, 
b_yy_textbox.Text, b_xy_textbox.Text, b_yx_textbox.Text, target_gain_textbox.Text, target_rot_textbox.Text, targ_X_textbox.Text, targ_Y_textbox.Text);




        }
public void set_target(string val1, string val2, string val3, string val4, string val5, string val6, string val7, string val8, string val9, string val10, string val11, string val12)
        {

            // Create a timer and set a two second interval.
            /*aTimer = new System.Windows.Forms.Timer();
            aTimer.Interval = 2000;

            // Hook up the Elapsed event for the timer. 
            aTimer.Elapsed += OnTimedEvent;

            // Have the timer fire repeated events (true is the default)
            aTimer.AutoReset = true;

            // Start the timer
            aTimer.Enabled = true;*/
            try
            //for(int j=0;j<5;j++)
            {
                //parse params into 1 string
                byte[] ui8Buffer = new byte[77];
                byte[] floatByte = new byte[4];
                timer1.Start();

                float kxx = float.Parse(val1, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);

                float kyy = float.Parse(val2, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float kxy = float.Parse(val3, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float kyx = float.Parse(val4, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float bxx = float.Parse(val5, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float byy = float.Parse(val6, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float bxy = float.Parse(val7, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float byx = float.Parse(val8, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float tar_gain = float.Parse(val9, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float tar_rot_angle = float.Parse(val10, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float targetx = float.Parse(val11, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
                float targety = float.Parse(val12, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);

                //pack into 1 data
                ui8Buffer[0] = packetCheck[0];
                ui8Buffer[1] = packetCheck[1];
                ui8Buffer[2] = CMD_MSG;
                ui8Buffer[3] = 0x00;
                ui8Buffer[4] = 0x08;
                ui8Buffer[5] = 67;
                ui8Buffer[6] = (byte)(EXERCIZE_TARG);
                //ui8Buffer[7] = (byte)(((Int16)targetx) >> 8);
                //ui8Buffer[8] = (byte)(((Int16)targetx));
                //ui8Buffer[7]=0;
                //ui8Buffer[8]=0;
                //ui8Buffer[6] = (byte)(N_target_index_comboBox.SelectedIndex + 1);
                /*for (int k = 0; k < 1; k++)
                {


                    /* if(_ticks > 1)
                     {

                        //targetx = targetx + kyy;
                        //kxx = kxx + 10;
                        //
                     }*/

                ui8Buffer[7] = (byte)(((Int16)targetx) >> 8);
                ui8Buffer[8] = (byte)(((Int16)targetx));
                //targetx = targetx + 50;
                ui8Buffer[9] = (byte)(((Int16)targety) >> 8);
                ui8Buffer[10] = (byte)(((Int16)targety));
                ui8Buffer[11] = (byte)(en_target_comboBox.SelectedIndex);
                ui8Buffer[12] = (byte)(en_main_comboBox.SelectedIndex);




                /*GetBytesSingle(targetx, out floatByte);
                floatByte.CopyTo(ui8Buffer, 7);

                GetBytesSingle(targety, out floatByte);
                floatByte.CopyTo(ui8Buffer, 9);
                */

                GetBytesSingle(kxx, out floatByte);
                floatByte.CopyTo(ui8Buffer, 13);
                GetBytesSingle(kyy, out floatByte);
                floatByte.CopyTo(ui8Buffer, 17);
                GetBytesSingle(kxy, out floatByte);
                floatByte.CopyTo(ui8Buffer, 21);
                GetBytesSingle(kyx, out floatByte);
                floatByte.CopyTo(ui8Buffer, 25);
                GetBytesSingle(bxx, out floatByte);
                floatByte.CopyTo(ui8Buffer, 29);
                GetBytesSingle(byy, out floatByte);
                floatByte.CopyTo(ui8Buffer, 33);
                GetBytesSingle(bxy, out floatByte);
                floatByte.CopyTo(ui8Buffer, 37);
                GetBytesSingle(byx, out floatByte);
                floatByte.CopyTo(ui8Buffer, 41);

                GetBytesSingle(tar_gain, out floatByte);
                floatByte.CopyTo(ui8Buffer, 45);
                GetBytesSingle(tar_rot_angle, out floatByte);
                floatByte.CopyTo(ui8Buffer, 49);





                /*if (_ticks ==20 )
                {
                    ui8Buffer[7] = (byte)(((Int16)targetx) >> 8);
                    ui8Buffer[8] = (byte)(((Int16)targetx));
                    targetx = targetx + kyy;
                }*/
                //get checksum
                ui8Buffer[73] = 0;
                for (int i = 2; i < (6 + ui8Buffer[5]); i++)
                {
                    ui8Buffer[73] ^= ui8Buffer[i];
                }
                ui8Buffer[74] = packetCheck[2];
                ui8Buffer[75] = packetCheck[3];
                ui8Buffer[76] = ENCRYPT_EN;

                Console.WriteLine(ByteArrayToHexViaLookup32(ui8Buffer));

                //send data if open
                if (host_listening)
                {

                    //send data
                    // Sends data asynchronously to a connected Socket 
                    client_handler.BeginSend(ui8Buffer, 0, ui8Buffer.Length, 0,new AsyncCallback(SendCallback), client_handler);

                }
            }
            catch (Exception exc) { MessageBox.Show(exc.ToString()); }

        }

 int GoBack = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            kxx_var = 50;
            if (current_x >= 0.150 )
            {
                set_target(kxx_var.ToString(), k_yy_textbox.Text, k_xy_textbox.Text, k_yx_textbox.Text, b_xx_textbox.Text, b_yy_textbox.Text, b_xy_textbox.Text, b_yx_textbox.Text, target_gain_textbox.Text, target_rot_textbox.Text, valglob_kxx_target.ToString(), targ_Y_textbox.Text);
                _ticks++;

                //GoBack = 1;
                //timer1.Enabled = false;
                //timer1.Stop();
               // timer2.Enabled = true;
                //timer2.Start();

               //kxx_var -= 20;
                valglob_kxx_target -= 2;
                //timer1.Enabled = true;
                //timer1.Start();
                if (current_x< 0.08)
                {
                    set_target(kxx_var.ToString(), k_yy_textbox.Text, k_xy_textbox.Text, k_yx_textbox.Text, b_xx_textbox.Text, b_yy_textbox.Text, b_xy_textbox.Text, b_yx_textbox.Text, target_gain_textbox.Text, target_rot_textbox.Text, valglob_kxx_target.ToString(), targ_Y_textbox.Text);

                    timer1.Enabled = false;
                    timer1.Stop();

                }
            }
            else if (GoBack==0)
            {

                    valglob_kxx_target += 2;

                    kxx_var = 100;
                    set_target(kxx_var.ToString(), k_yy_textbox.Text, k_xy_textbox.Text, k_yx_textbox.Text, b_xx_textbox.Text, b_yy_textbox.Text, b_xy_textbox.Text, b_yx_textbox.Text, target_gain_textbox.Text, target_rot_textbox.Text, valglob_kxx_target.ToString(), targ_Y_textbox.Text);
                    _ticks++;
            }


        }

...