瀏覽代碼

增加车辆是否静止,智能显示调整信息

339075217 3 年之前
父節點
當前提交
b814e361da

+ 1 - 1
unnormalized_node/unnormalized_node/Form1.Designer.cs

@@ -45,7 +45,7 @@ namespace UnNomalized_node
             // 
             this.label_car_info.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
             this.label_car_info.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.label_car_info.Font = new System.Drawing.Font("方正粗黑宋简体", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label_car_info.Font = new System.Drawing.Font("方正粗黑宋简体", 28F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.label_car_info.ForeColor = System.Drawing.SystemColors.Highlight;
             this.label_car_info.Location = new System.Drawing.Point(3, 0);
             this.label_car_info.Name = "label_car_info";

+ 106 - 67
unnormalized_node/unnormalized_node/Form1.cs

@@ -25,8 +25,15 @@ namespace UnNomalized_node
         private FormArrow m_form_arrow = new FormArrow();
         Thread m_freash_arrow_thread = null;
         bool m_bexit = false;
-        //System.Windows.Forms.Timer m_timer = new System.Windows.Forms.Timer();
+        System.Windows.Forms.Timer m_timer = new System.Windows.Forms.Timer();
+       class LED_STATU
+        {
+            public LED_STATU() { }
+            public BroadcastSquareBoard.Entrance_statu entrance_statu;
+            public string set_disp_str;
+        }
 
+        LED_STATU m_last_led_statu=new LED_STATU();
         public Form1()
         {
             InitializeComponent();
@@ -77,12 +84,12 @@ namespace UnNomalized_node
             m_freash_arrow_thread = new Thread(fresh_image);
             m_freash_arrow_thread.Start();
 
-            /*m_timer.Tick += new EventHandler(HandleTime);
+            m_timer.Tick += new EventHandler(HandleTime);
             //使timer可用
             m_timer.Enabled = true;
             //设置时间间隔,以毫秒为单位
             m_timer.Interval = 100;//1s
-            m_timer.Start();*/
+            m_timer.Start();
 
 
             //this.Size = new System.Drawing.Size(1920, 1080);
@@ -103,62 +110,72 @@ namespace UnNomalized_node
                 //m_hk_camera.Camera.draw_image_to_wnd(pictureBox_camera.Handle);
                 //跟新led
                 update_led_screen();
+                Thread.Sleep(100);
+            }
+            
+        }
+        public void HandleTime(object sender, EventArgs e)
+        {
+            //跟新投影仪界面车辆信息
+            string car_number_str = "";
+            if (communication_data.Instance.car_license.IsTimeout() == false)
+            {
+                car_number_str = communication_data.Instance.car_license.Value;
+            }
 
-                //跟新投影仪界面车辆信息
-                string car_number_str = "";
-                if (communication_data.Instance.car_license.IsTimeout() == false)
-                {
-                    car_number_str = communication_data.Instance.car_license.Value;
-                }
-                
 
-                //显示车辆信息
-                string car_info_str = "  ";
-                TimedData<Message.Ground_status_msg> lidar_statu = communication_data.Instance.lidar_statu;
-                Message.Locate_information locate_info = lidar_statu.Value.LocateInformationRealtime;
-                //
-                if (lidar_statu.IsTimeout() == false)
+            //显示车辆信息
+            string car_info_str = "  ";
+            TimedData<Message.Ground_status_msg> lidar_statu = communication_data.Instance.lidar_statu;
+            Message.Locate_information locate_info = lidar_statu.Value.LocateInformationRealtime;
+            //
+            if (m_form_arrow.m_last_moving_statu.STATU != null)
+            {
+                Message.Ground_status_msg statu = m_form_arrow.m_last_moving_statu.STATU;
+                car_info_str += string.Format("最近静止X:{0:0.000}m Y:{1:0.000}m 角度:{2:0.00}°" +
+                            "轴距:{3:0.000}m 车宽:{4:0.000}m 前轮角:{5:0.00}°", statu.LocateInformationRealtime.LocateX,
+                            statu.LocateInformationRealtime.LocateY, statu.LocateInformationRealtime.LocateAngle,
+                            statu.LocateInformationRealtime.LocateWheelBase, statu.LocateInformationRealtime.LocateWheelWidth,
+                            statu.LocateInformationRealtime.LocateFrontTheta);
+            }
+            if (lidar_statu.IsTimeout() == false)
+            {
+
+                if (lidar_statu.Value.GroundStatus == Ground_statu.CarCorrect
+                   || lidar_statu.Value.GroundStatus == Ground_statu.CarBorderReached)
                 {
 
-                    if (lidar_statu.Value.GroundStatus == Ground_statu.CarCorrect
-                       || lidar_statu.Value.GroundStatus == Ground_statu.CarBorderReached)
+                    if (locate_info != null)
                     {
 
-                        if (locate_info != null)
-                        {
+                        car_info_str += string.Format("\n 当前实时X:{0:0.000}m Y:{1:0.000}m 角度:{2:0.00}°" +
+                            "轴距:{3:0.000}m 车宽:{4:0.000}m 前轮角:{5:0.00}°", locate_info.LocateX,
+                            locate_info.LocateY, locate_info.LocateAngle,
+                            locate_info.LocateWheelBase, locate_info.LocateWheelWidth,
+                            locate_info.LocateFrontTheta);
 
-                            car_info_str += string.Format("X:{0:0.000}m Y:{1:0.000}m 角度:{2:0.00}°" +
-                                "轴距:{3:0.000}m 车宽:{4:0.000}m 前轮角:{5:0.00}°", locate_info.LocateX,
-                                locate_info.LocateY, locate_info.LocateAngle,
-                                locate_info.LocateWheelBase, locate_info.LocateWheelWidth,
-                                locate_info.LocateFrontTheta);
-
-                        }
                     }
-
                 }
 
-                //更新投影仪提示箭头
-                this.Invoke((Action)(() =>
-                {
-                    label_car_info.Text = car_info_str;
-                    car_number.Text = car_number_str + "\n" + "欢迎光临";
-                    m_form_arrow.Update_arrow();
-                }));
-                Thread.Sleep(100);
             }
             
-        }
-        public void HandleTime(object sender, EventArgs e)
-        {
+
+            //更新投影仪提示箭头
+
+            label_car_info.Text = car_info_str;
+            car_number.Text = car_number_str + "\n" + "欢迎光临";
+            m_form_arrow.Update_arrow();
         }
         private void update_led_screen()
         {
             //刷新led屏
+            LED_STATU statu = new LED_STATU();
             if (communication_data.Instance.parkspace_statu.IsTimeout())
             {
-                BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
-                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL, false);
+                statu.entrance_statu = BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL;
+                   /* BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
+                      BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL, false);*/
+                
             }
             else
             {
@@ -171,46 +188,68 @@ namespace UnNomalized_node
                     {
                         if (terminal_statu.SinglechipData.InsideExistenceFlag == 1)
                         {
-                            BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
-                                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_OCCUPIED, false);
+                            statu.entrance_statu = BroadcastSquareBoard.Entrance_statu.ENTRANCE_OCCUPIED;
+                            /*BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
+                                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_OCCUPIED, false);*/
 
                         }
                         else
                         {
-                            BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
-                                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_LEISURE, false);
+                            statu.entrance_statu = BroadcastSquareBoard.Entrance_statu.ENTRANCE_LEISURE;
+                           /* BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
+                                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_LEISURE, false);*/
                         }
                     }
                 }
                 else
                 {
                     //单片机无数据显示无连接
-                    BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
-                                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL, false);
+                    statu.entrance_statu = BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL;
+                    /*BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
+                                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL, false);*/
                 }
             }
             Message.Parkspace_allocation_status_msg parkspace_msg = communication_data.Instance.parkspace_statu.Value;
+           
+            if (parkspace_msg.LargeParkspaceRemainingNumber != 0)
+            {
+                statu.set_disp_str = " 限高:2.00";
+                //BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(third_led);
+
+            }
+            else if (parkspace_msg.MediumParkspaceRemainingNumber != 0)
+            {
+                statu.set_disp_str = " 限高:1.70";
+               // BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(third_led);
+            }
+            else if (parkspace_msg.SmallParkspaceRemainingNumber != 0)
+            {
+                statu.set_disp_str = " 限高:1.50";
+               // BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(third_led);
+            }
+            else
+            {
+                statu.set_disp_str = " 车位已满";
+                statu.entrance_statu = BroadcastSquareBoard.Entrance_statu.ENTRANCE_FULL;
+                /*BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
+                BroadcastSquareBoard.Entrance_statu.ENTRANCE_FULL, false);
+                BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(" 车位已满");*/
+            }
+
+            if(m_last_led_statu.entrance_statu!=statu.entrance_statu)
+            {
+                BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(statu.entrance_statu, false);
+                m_last_led_statu.entrance_statu = statu.entrance_statu;
+                //Console.WriteLine("change statu  " + statu.entrance_statu.ToString());
+            }
+            if(m_last_led_statu.set_disp_str!=statu.set_disp_str)
+            {
+                BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(statu.set_disp_str);
+                m_last_led_statu.set_disp_str = statu.set_disp_str;
+                //Console.WriteLine("change disp_str  " + statu.set_disp_str);
+            }
 
-                if (parkspace_msg.LargeParkspaceRemainingNumber != 0)
-                {
-                    BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(" 限高:2.00");
-                }
-                else if (parkspace_msg.MediumParkspaceRemainingNumber != 0)
-                {
-                    BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(" 限高:1.70");
-                }
-                else if (parkspace_msg.SmallParkspaceRemainingNumber != 0)
-                {
-                    BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(" 限高:1.50");
-                }
-                else
-                {
-                    BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
-                    BroadcastSquareBoard.Entrance_statu.ENTRANCE_FULL, false);
-                    BroadcastBoardManager.Instance.squareBoardList[0].set_disp_str(" 车位已满");
-                }
 
-               
         }
         private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
         {
@@ -227,7 +266,7 @@ namespace UnNomalized_node
             BroadcastBoardManager.Instance.squareBoardList[0].UpdateStatus(
                                 BroadcastSquareBoard.Entrance_statu.ENTRANCE_NOSIGNAL, false);
             m_bexit = true;
-            //m_timer.Stop();
+            m_timer.Stop();
             BroadcastBoardManager.Instance.Close();
             if (m_freash_arrow_thread.IsAlive)
             {

+ 101 - 9
unnormalized_node/unnormalized_node/FormArrow.cs

@@ -71,6 +71,40 @@ namespace UnNomalized_node
             //数量
             eNum=0x17,
         };
+
+        public class Moving_statu
+        {
+            
+            private Message.Ground_status_msg m_last_static_statu =new Message.Ground_status_msg();
+            private bool m_statu_valid;
+
+            public Moving_statu()
+            {
+                m_statu_valid = false;
+            }
+            public Message.Ground_status_msg STATU
+            {
+                get
+                {
+                    if (m_statu_valid)
+                        return m_last_static_statu;
+                    else
+                        return null;
+                }
+                set
+                {
+                    m_last_static_statu = value;
+                    m_statu_valid = true;
+                }
+            }
+            public void reset()
+            {
+                m_statu_valid = false;
+            }
+
+        }
+        public Moving_statu m_last_moving_statu=new Moving_statu();
+
         Timer m_timer;
         PictureBox[] m_arrows_images = new PictureBox[(int)Car_statu.eNum];
         PictureBox m_text_image_warning=new PictureBox();
@@ -235,10 +269,69 @@ namespace UnNomalized_node
 
             TimedData<Message.Ground_status_msg> lidar_statu = communication_data.Instance.lidar_statu;
             terminal_status_msg terminal_statu = communication_data.Instance.terminal_statu.Value;
+            int border_statu = lidar_statu.Value.BorderStatus;
+            bool is_moving = ((border_statu >> 11) & 0x01) > 0;
+           //当前状态
+            if(lidar_statu.Value.GroundStatus== Ground_statu.CarCorrect|| 
+                lidar_statu.Value.GroundStatus == Ground_statu.CarBorderReached)
+            {
+                if(is_moving)
+                {
+                    //运动正确
+                    m_last_moving_statu.reset();
+                }
+                else
+                {
+                    //静止正确
+                    //若有上次的静止测量正确状态且无超界,则当前不可能出现 前后左右,旋转角、轴距、车宽的超界,只可能出现方向盘超界
+                    if (lidar_statu.Value.GroundStatus == Ground_statu.CarBorderReached)
+                    {
+                        int new_border = border_statu;
+                        if (m_last_moving_statu.STATU != null)
+                        {
+                            //将不可能出现的超界位变成0
+
+                            new_border = (new_border & (~(0x01 << 0)));
+                            new_border = (new_border & (~(0x01 << 1)));
+                            new_border = (new_border & (~(0x01 << 2)));
+                            new_border = (new_border & (~(0x01 << 3)));
+                            new_border = (new_border & (~(0x01 << 6)));
+                            new_border = (new_border & (~(0x01 << 7)));
+                            new_border = (new_border & (~(0x01 << 8)));
+                            new_border = (new_border & (~(0x01 << 9)));
+                            lidar_statu.Value.BorderStatus = new_border;
+                            
+                        }
+                    } 
+                    m_last_moving_statu.STATU = lidar_statu.Value;
 
+                    
+                }
+              
+            }
+            else if(lidar_statu.Value.GroundStatus != Ground_statu.Nothing)
+            {
+                if (is_moving)
+                {
+                    //运动且失败
+                    m_last_moving_statu.reset();
+                }
+                else
+                {
+                    //静止且失败,显示上次静止成功数据,不显示光电 没有则不处理
+                    if (m_last_moving_statu.STATU != null)
+                    {
+                        lidar_statu = m_last_moving_statu.STATU;
+                    }
+                }
+            }
+            else
+            {
+                m_last_moving_statu.reset();
+            }
 
-            //先判断光电开关
-            if (terminal_statu.IdStruct != null)
+            //先判断光电开关运动状态下才显示光电
+            if (is_moving &&terminal_statu.IdStruct != null)
             {
                 if (terminal_statu.IdStruct.TerminalId == communication_data.Instance.TerminalID)
                 {
@@ -277,9 +370,6 @@ namespace UnNomalized_node
             }
             else
             {
-
-                int border_statu = lidar_statu.Value.BorderStatus;
-
                 switch (lidar_statu.Value.GroundStatus)
                 {
                     case Ground_statu.Nothing:
@@ -294,6 +384,7 @@ namespace UnNomalized_node
                         break;
                     case Ground_statu.CarBorderReached:
                         //先判断车辆是否超宽
+                        border_statu = lidar_statu.Value.BorderStatus;
                         if (((border_statu >> 6) & 0x01) > 0)
                         {
                             Set_arrow(Car_statu.eWidthError);
@@ -317,13 +408,14 @@ namespace UnNomalized_node
                             break;
                         }
                         //方向盘
-                        if(((border_statu >> 10) & 0x01) > 0)
-                        {
+                        if (((border_statu >> 10) & 0x01) > 0)
+                        {  
                             Set_arrow(Car_statu.eWheelAngleError);
                             break;
                         }
                         //显示超界
-                        switch ((Car_statu)border_statu)
+                        int border = (border_statu & 0x0f);
+                        switch ((Car_statu)border)
                         {
                             case Car_statu.eOK:
                             case Car_statu.eOutTop:
@@ -334,7 +426,7 @@ namespace UnNomalized_node
                             case Car_statu.eOutLeftDown:
                             case Car_statu.eOutRightTop:
                             case Car_statu.eOutRightDown:
-                                Set_arrow((Car_statu)border_statu);
+                                Set_arrow((Car_statu)border);
                                 break;
                         }
                         break;

+ 2 - 2
unnormalized_node/unnormalized_node/communication/unnormalized_communication.cs

@@ -72,9 +72,9 @@ namespace UnNomalized_node.communication
                         Message.Ground_status_msg t_ground_status_msg = Message.Ground_status_msg.Parser.ParseFrom(msg);
                         communication_data.Instance.lidar_statu = t_ground_status_msg;
 
-                        /*if (t_ground_status_msg.IdStruct.TerminalId == communication_data.Instance.ID)
+                        /*if (t_ground_status_msg.IdStruct.TerminalId == communication_data.Instance.TerminalID)
                         {
-                            Console.WriteLine("终端:"+ communication_data.Instance.ID.ToString()+", " +
+                            Console.WriteLine("终端:"+ communication_data.Instance.TerminalID.ToString()+", " +
                                 t_ground_status_msg.GroundStatus.ToString() +
                                 "," + DateTime.Now.ToString());
                         }*/

+ 1 - 1
unnormalized_node/unnormalized_node/communication_data.cs

@@ -192,7 +192,7 @@ namespace UnNomalized_node
                     m_timed_car_license = number;
                     m_timed_car_license.Set_timeout_ms(10 * 60 * 1000);
                 }
-                Thread.Sleep(200);
+                Thread.Sleep(500);
             }
         }
 

+ 1 - 1
unnormalized_node/unnormalized_node/led_screen/broadcastModule.cs

@@ -788,7 +788,7 @@ namespace UnNomalized_node
                                     }
                                     else if (occupied == Entrance_statu.ENTRANCE_LEISURE)
                                     {
-                                        str = "\\C2 空闲  <-";
+                                        str = "\\C2    闲  ";
                                     }
                                     else if (occupied == Entrance_statu.ENTRANCE_NOSIGNAL)
                                     {