/// <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); })); }
/// <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); } }
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); } } }
/// <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 } }
/// <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(); } }