Esempio n. 1
0
        // 车运行
        private static void Car_run()
        {
            var temp = new float[4]; //四个电机的速度
            int v, vdif, v_f;        //车速度和差速
            var coefficient = 0;

            while (true)
            {
                if (Trans_error_count >= tansError)
                {
                    Trans_Error();                                 //通信失常
                }
                if (buffer[0] != 0x01 && buffer[0] != 0x02 && buffer[0] != 0x03 && buffer[0] != 0x04)
                {
                    break;                                                                                   //跳出循环判断
                }
                v = buffer[2];
                if (v >= 99)
                {
                    v = 99;
                }
                if (v <= 2)
                {
                    v = 0;
                }
                vdif = buffer[3] * v / 90;
                switch (buffer[0] * 10 + buffer[1]) //10,11,12,13,14,20,21,22,23,24,30,32,34,40,42,44
                {
                case 10:
                case 20:
                case 30:
                case 40:
                    temp[0] = 0;
                    temp[1] = 0;
                    temp[2] = 0;
                    temp[3] = 0;
                    break;

                case 11:
                case 21:
                    temp[0] = v - vdif;
                    temp[1] = v - vdif;
                    temp[2] = v * -1;
                    temp[3] = v * -1;
                    break;

                case 12:
                case 22:
                    temp[0] = v;
                    temp[1] = v;
                    temp[2] = (v - vdif) * -1;
                    temp[3] = (v - vdif) * -1;
                    break;

                case 13:
                case 23:
                    v_f     = v * 8 / 10;
                    temp[0] = -v_f;
                    temp[1] = -v_f;
                    temp[2] = (-v_f + vdif) * -1;
                    temp[3] = (-v_f + vdif) * -1;
                    break;

                case 14:
                case 24:
                    v_f     = v * 8 / 10;
                    temp[0] = -v_f + vdif;
                    temp[1] = -v_f + vdif;
                    temp[2] = -v_f * -1;
                    temp[3] = -v_f * -1;
                    break;

                case 32:
                case 42:
                    temp[0] = v;
                    temp[1] = v;
                    temp[2] = v;
                    temp[3] = v;
                    break;

                case 34:
                case 44:
                    temp[0] = -v;
                    temp[1] = -v;
                    temp[2] = -v;
                    temp[3] = -v;
                    break;

                default:
                    temp[0] = 0;
                    temp[1] = 0;
                    temp[2] = 0;
                    temp[3] = 0;
                    break;
                }
                switch (buffer[0])
                {
                case 1:
                case 3:
                    coefficient = velocityMax;
                    break;

                case 2:
                case 4:
                    coefficient = 2 * velocityMax;
                    break;
                }
                //写入速度
                for (byte add = 0x01; add < 0x05; add++)
                {
                    try
                    {
                        com.Write(CarControl.CarSpeedWrite(add, coefficient * temp[add - 1]), 0, 8);
                    }
                    catch (Exception e)
                    {
                        mainLog.WriteLog("串口写入失败", e.ToString());
                    }
                    Thread.Sleep(serial_time);
                }
                Thread.Sleep(cpu_time); //延时降低CPU负担
#if DEBUG
                //读取电流
                for (byte add = 0x01; add < 0x05; add++)
                {
                    try
                    {
                        com.Write(CarControl.CurrentRead(add), 0, 8);
                    }
                    catch (Exception e)
                    {
                        mainLog.WriteLog("串口写入失败", e.ToString());
                    }
                    Thread.Sleep(serial_time);
                }
#endif
            }
        }