| 
					
				 | 
			
			
				@@ -57,34 +57,37 @@ func (sl *StabLift) Exec(address string, c transportorder.Command) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	liftAddr := util.StringToIntSlice(lf.Addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	source := &data.Nodes[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	dist := &data.Nodes[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for !source.Equals(dist) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	source := data.Nodes[0] //起始位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	dist := &data.Nodes[1]  //托盘位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	moveAddr := source      //载货时托盘位置,不载货时提升机的位置,此位置从起点移动到终点,任务结束 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for !moveAddr.Equals(dist) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		//如果起点不在提升机内部,说明有输送线,先由输送线将托盘移动到提升机内部 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if !source.InNode(liftAddr[0], liftAddr[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if int(source.X) != liftAddr[0] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				for i := 0; i < util.Abs(liftAddr[0]-int(source.X)); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.Load = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if liftAddr[0] > int(source.X) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.X++ //托盘由起点向提升机移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.X-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.X-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					lf.Load = 0 //货物在提升机外部时,提升机时不载货状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if data.Mode == "shuttle" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						lf.PalletAddr = moveAddr.AddrStringRCF() //更新托盘位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if int(source.Y) != liftAddr[1] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				for i := 0; i < util.Abs(int(source.Y)-liftAddr[1]); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.Load = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if liftAddr[1] > int(source.Y) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.Y++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.Y++ //托盘由起点向提升机移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.Y-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.Y-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					lf.Load = 0                 //货物在提升机外部时,提升机时不载货状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if data.Mode == "shuttle" { //如果是载货模式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						lf.PalletAddr = moveAddr.AddrStringRCF() //更新托盘位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -93,53 +96,54 @@ func (sl *StabLift) Exec(address string, c transportorder.Command) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if source.InNode(liftAddr[0], liftAddr[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			for i := 0; i < util.Abs(int(source.Z)-int(dist.Z)); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if data.Mode == "shuttle" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.Load = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if source.Z > dist.Z { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					source.Z-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					moveAddr.Z-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					lf.Floor-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					source.Z++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					moveAddr.Z++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					lf.Floor++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if data.Mode == "shuttle" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					lf.Load = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					lf.PalletAddr = moveAddr.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//如果终点点不在提升机内部,说明有输送线,由输送线将托盘移动到目标位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//如果终点不在提升机内部,说明有输送线,由输送线将托盘移动到目标位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if !dist.InNode(liftAddr[0], liftAddr[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			//此时source已来到了提升机的目标层 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if int(dist.X) != liftAddr[0] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				for i := 0; i < util.Abs(liftAddr[0]-int(dist.X)); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.Load = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if liftAddr[0] > int(dist.X) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.X-- //向目标移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.X-- //向终点移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					lf.Load = 0                 //出了提升机,提升机已不载货 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if data.Mode == "shuttle" { //如果是载货模式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						lf.PalletAddr = moveAddr.AddrStringRCF() //更新托盘位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if int(dist.Y) != liftAddr[1] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				for i := 0; i < util.Abs(int(dist.Y)-liftAddr[1]); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					lf.Load = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if liftAddr[1] > int(source.Y) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.Y-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.Y-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						source.Y++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						lf.PalletAddr = source.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						moveAddr.Y++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					lf.Load = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if data.Mode == "shuttle" { //如果是载货模式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						lf.PalletAddr = moveAddr.AddrStringRCF() //更新托盘位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	lf.Status = warehouse.Ready 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	lf.Status = warehouse.Ready //任务完成,提升机恢复ready状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	log.Printf("当前提升机层:%d,状态: %d,载货状态:%d,载货位置%s", lf.Floor, lf.Status, lf.Load, lf.PalletAddr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -169,73 +173,3 @@ func UnLoad(addr string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 载货模式提升机待定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func monitor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//提升机位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//liftAddr := util.StringToIntSlice(lf.Addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//start := nodes[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//end := nodes[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	////起点不在提升机内部,说明是有输送线 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//if int(start.X) != liftAddr[0] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	for i := 0; i < util.Abs(liftAddr[0]-int(start.X)); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		if liftAddr[0] > int(start.X) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//if int(start.Y) != liftAddr[1] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	for i := 0; i < util.Abs(int(start.Y)-liftAddr[1]); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		if liftAddr[1] > int(start.Y) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//if int(start.X) == liftAddr[0] && int(start.Y) != liftAddr[1] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	for i := 0; i < int(end.Z-start.Z); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		start.Z++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//if int(end.X) != liftAddr[0] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	for i := 0; i < util.Abs(liftAddr[0]-int(end.X)); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		if liftAddr[0] > int(end.X) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//if int(end.Y) != liftAddr[1] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	for i := 0; i < util.Abs(int(end.Y)-liftAddr[1]); i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		time.Sleep(time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		if liftAddr[1] > int(start.Y) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X-- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			start.X++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//			lf.PalletAddr = start.AddrStringRCF() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//lf.Status = warehouse.Ready 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 |