예제 #1
0
        /// <summary>
        /// 运行状态属性更改时触发的事件
        /// </summary>
        /// <param name="temp1">AGV_DisMember类</param>
        private void StatusChangeAction(AGVCar temp1)
        {
            IEnumerable <AGVCar> member = AGVStatus.Where <AGVCar>(p => p.AGVNum == temp1.AGVNum);
            AGVCar member1   = member.First <AGVCar>();
            int    listindex = AGVStatus.IndexOf(member1);

            App.Current.Dispatcher.Invoke((Action)(() =>
            {
                AGVStatus[listindex].agvAnimation.StatusChangeAnimation(temp1.AGVStatus, temp1.AGVNum, temp1.DockNum);
            }));
        }
예제 #2
0
        /// <summary>
        /// 界面显示类AGV_DisMember属性更改委托函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Dis_PropertyChange(object sender, PropertyChangedEventArgs e)
        {
            AGVCar agvmember = (AGVCar)sender;

            if (e.PropertyName.Equals("MarkNum"))
            {
                MarkChangeAction(agvmember);
            }
            else if (e.PropertyName.Equals("AGVStatus"))
            {
                StatusChangeAction(agvmember);
            }
            else if (e.PropertyName.Equals("WlLink"))
            {
                WLChangeAction(agvmember);
            }
        }
예제 #3
0
        void client_PropChangedMessageRecevied(object sender, PropertyChangedMessageEventArgs e)
        {
            IEnumerable <AGVCar> modifymember = AGVStatus.Where <AGVCar>(p => p.AGVNum == e.PropertyMessage.AGVID);

            if (modifymember == null || modifymember.Count() == 0)
            {
                return;
            }
            else
            {
                AGVCar       member1 = modifymember.First <AGVCar>();
                int          index   = AGVStatus.IndexOf(member1);
                PropertyInfo info    = typeof(AGVCar).GetProperty(e.PropertyMessage.PropertyID);
                if (info != null)
                {
                    info.SetValue(AGVStatus[index], e.PropertyMessage.PropertyValue, null);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// 无线连接属性更改时触发的事件
        /// </summary>
        /// <param name="temp1">AGV_DisMember类</param>
        private void WLChangeAction(AGVCar temp1)
        {
            IEnumerable <AGVCar> member = AGVStatus.Where <AGVCar>(p => p.AGVNum == temp1.AGVNum);
            AGVCar member1   = member.First <AGVCar>();
            int    listindex = AGVStatus.IndexOf(member1);

            App.Current.Dispatcher.Invoke((Action)(() =>
            {
                AGVStatus[listindex].agvAnimation.WLChangeAnimation(temp1.WlLink);
            }));
            if (temp1.WlLink)
            {
                MarkChangeAction(temp1);
            }

            else
            {
                AGVStatus[listindex].agvAnimation.ClearAllElements();
                AGVStatus[listindex].agvAnimation = null;
                AGVStatus.Remove(temp1);//20140309从表格中移除无线连接失败的agv
            }
        }
예제 #5
0
        /// <summary>
        /// 地标属性更改时触发的事件
        /// 移除上次动画,显示下一动画
        /// </summary>
        /// <param name="temp1">AGV_DisMember类</param>
        private void MarkChangeAction(AGVCar temp1)
        {
            IEnumerable <AGVCar> member = AGVStatus.Where <AGVCar>(p => p.AGVNum == temp1.AGVNum);
            AGVCar member1 = member.First <AGVCar>();
            int    listindex = AGVStatus.IndexOf(member1);
            Point  pStart = new Point(), pVirtual = new Point();

            DAL.ZSql TrafficPara = new DAL.ZSql();
            try
            {
                TrafficPara.Open("select T_Line.MarkOrder, T_Mark.XPos, T_Mark.YPos FROM T_Line LEFT OUTER JOIN T_Mark ON T_Mark.ID = T_Line.MarkID where WorkLine=" + temp1.WorklineNum.ToString() + " and Mark=" + temp1.MarkNum.ToString() + " and LineNum=" + temp1.LineNum.ToString());
                if (TrafficPara.Rows.Count > 0)
                {
                    pStart.X = Convert.ToDouble(TrafficPara.Rows[0]["XPos"]);
                    pStart.Y = Convert.ToDouble(TrafficPara.Rows[0]["YPos"]);
                    List <Point> pointcollection1 = new List <Point>();
                    pointcollection1.Add(pStart);
                    int    currentOrder   = Convert.ToInt16(TrafficPara.Rows[0]["MarkOrder"]) + 1;
                    bool   isvirtualpoint = true;
                    double dMarkdistance  = 0;
                    do
                    {
                        TrafficPara.Open("select XPos,YPos,T_Line.Distance,VirtualMark from T_Mark Left join T_Line on T_Mark.ID = T_Line.MarkID where T_Line.MarkOrder=" + currentOrder.ToString() +
                                         "and LineNum=" + temp1.LineNum.ToString());
                        if (TrafficPara.Rows.Count > 0)
                        {
                            pVirtual.X = Convert.ToDouble(TrafficPara.Rows[0]["XPos"]);
                            pVirtual.Y = Convert.ToDouble(TrafficPara.Rows[0]["YPos"]);
                            pointcollection1.Add(pVirtual);
                            dMarkdistance += Convert.ToDouble(TrafficPara.Rows[0]["Distance"]);
                            isvirtualpoint = Convert.ToBoolean(TrafficPara.Rows[0]["VirtualMark"]);
                            currentOrder++;
                        }
                        else
                        {
                            isvirtualpoint = false;
                            break;
                        }
                    }while (isvirtualpoint);
                    if (pointcollection1.Count >= 2)
                    {
                        double dAgvspeed = SpeedOpt[temp1.AGVSpeed].Speed / 60.0;
                        if (dAgvspeed == 0)
                        {
                            dAgvspeed = dMarkdistance;
                        }
                        App.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            AGVStatus[listindex].agvAnimation.DrawCarLine(pointcollection1, ColorOpt[temp1.AGVNum % ColorOpt.Length], dMarkdistance / dAgvspeed);
                        }));
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                TrafficPara.Close();
            }
        }