Esempio n. 1
0
        // 车急停
        private static void Car_EmergencyStop()
        {
            if (emergyStop == false)
            {
                for (byte add = 0x01; add < 0x05; add++)
                {
                    try
                    {
                        com.Write(CarControl.EmergeStop(add), 0, 8);
                    }
                    catch (Exception e)
                    {
                        mainLog.WriteLog("串口写入失败", e.ToString());
                    }
                    Thread.Sleep(serial_time);
                }
                Thread.Sleep(500);

                gpio.SetIoLow(); //关闭抱闸
                SetIoH = false;

                emergyStop = true;
            }
            else
            {
                gpio.SetIoHigh();
                emergyStop = false;
            }
        }
Esempio n. 2
0
 // 通信断,程序退出
 private static void Trans_Error()
 {
     try
     {
         for (byte add = 0x01; add < 0x05; add++)
         {
             try
             {
                 com.Write(CarControl.EmergeStop(add), 0, 8);
             }
             catch (Exception e)
             {
                 mainLog.WriteLog("串口写入失败", e.ToString());
             }
             Thread.Sleep(serial_time);
         }
         Thread.Sleep(1000);
         com.Close();
         if (videotrans)
         {
             myVideo.CloseVideo();
         }
         mainLog.WriteLog("通信中断", "强制退出");
         Environment.Exit(-1);
     }
     catch (Exception e)
     {
         mainLog.WriteLog("通信中断", "强制退出失败");
     }
 }
Esempio n. 3
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
            }
        }
Esempio n. 4
0
        private static void Main_init()
        {
            //打开服务器
            tcpServer.Start();
            //注册串口接收方法
            com.NewLine       = "\r\n";
            com.DataReceived += com_DataReceived;
            //打开io口及继电器
            gpio.InitIo();
            gpio.SetIoHigh();
            SetIoH = true;
#if TEST
            com.WriteBufferSize = 80;//必须偶数对齐
            //打开串口
            if (!com.IsOpen)
            {
                try
                {
                    com.Open();

                    Console.WriteLine("打开串口成功");
                }
                catch (Exception e)
                {
                    com = new SerialPort();
                    Console.WriteLine("打开串口失败" + e.ToString());
                }
            }
            Console.WriteLine(com.WriteBufferSize);

            //com.WriteTimeout = 5;
            for (byte add = 0x01; add < 0x05; add++)
            {
                try
                {
                    com.Write(CarControl.CarSpeedWrite(add, 20), (add - 1) * 8, 8);
                    Thread.Sleep(30);
                }
                catch (Exception e)
                {
                    Console.WriteLine("串口写入失败 " + e.ToString());
                }
            }

            if (com.IsOpen)
            {
                try
                {
                    com.Close();
                    Console.WriteLine("关闭串口成功");
                }
                catch (Exception e)
                {
                    com = new SerialPort();
                    Console.WriteLine("关闭串口失败" + e.ToString());
                }
            }
#endif
            //启动timer
            var dogTimer = new Timer(timerInterval);
            dogTimer.Elapsed  += time_tick; //到达时间的时候执行事件;
            dogTimer.AutoReset = true;      //设置是执行一次(false)还是一直执行(true);
            try
            {
                dogTimer.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件;
            }
            catch (Exception e)
            {
                mainLog.WriteLog("看门狗使能失败", e.ToString());
            }
        }