仿真物流仓库拣货车拣货
一:S型路径
1、预设货架八行四列,加上每列startPos和endPos,一共十行四列
2、给路径点改名字,便于随机和查找
3、先从32个点中随机出来10个点,要求不能重复,将随机出来的点存储到数组里面
public void SuiJiSecond()
{//随机出来的目标点数组List<Transform> tempList = new List<Transform>();//随机for (int i = 0; i < 10; i++){GetName();Transform tran = Points.Find(name);tempList.Add(tran);nameList.Add(name);}Debug.Log("temp:" + tempList.Count);}
void GetName(){int line = Random.Range(1, 5);int row = Random.Range(1, 9);name = "p" + line + "-" + row;if (line < 10){name = "p0" + line + "-" + row;}else{name = "p" + line + "-" + row;}if (nameList.Contains(name)){GetName();}}
4、接下来进行排序,S型路径要求1s—>1e—>2e—>2s—>3s—>3e—>4e—>4s—>初始点;如果某一列没有目标点,则直接跳过
//一层排序--列的顺序从小到大排//一层排序后的目标数组List<Transform> tempList2 = new List<Transform>();for (int j = 0; j < 5; j++){for (int i = 0; i < tempList.Count; i++){Transform tran1 = tempList[i];string tran1name = tran1.name.Substring(1, 2);int num = int.Parse(tran1name);if (num <= j){if (tempList2.Contains(tran1)){continue;}else{tempList2.Add(tran1);}}}}Debug.Log("tempList2:" + tempList2.Count);
//二层排序--通过判断具体有第几列的随机数,控制a的值。//targetList 为最终的目标数组List<Transform> targetList = new List<Transform>();for (int j = 1; j < 5; j++){kaifang = true;for (int i = 0; i < tempList2.Count; i++){Transform tran2 = tempList2[i];string tran2name = tran2.name.Substring(1, 2);int num = int.Parse(tran2name);if (num == j){if (kaifang){kaifang = false;a++;}tempList3.Add(tran2);}else { continue; }}ErCengPaiXu();}Debug.Log("targetList:" + targetList.Count);for (int i = 0; i < targetList.Count; i++){string tname = targetList[i].name;Debug.Log("name:" + tname);}TargetModel = targetList[i];
/// <summary>/// a为奇数正着排,a为偶数倒着排/// </summary>public void ErCengPaiXu(){if (a % 2 == 1){for (int m = 1; m < 9; m++){for (int n = 0; n < tempList3.Count; n++){Transform tran3 = tempList3[n];string tran3name = tran3.name.Substring(4, 1);int num = int.Parse(tran3name);Debug.Log(num);if (num <= m){if (targetList.Contains(tran3)){continue;}else{Debug.Log(num);Debug.Log("tran3name" + tran3.name);targetList.Add(tran3);}}}}}else if (a % 2 == 0){for (int m = 8; m > 0; m--){for (int n = 0; n < tempList3.Count; n++){Transform tran3 = tempList3[n];string tran3name = tran3.name.Substring(4, 1);int num = int.Parse(tran3name);Debug.Log(num);if (num >= m){if (targetList.Contains(tran3)){continue;}else{Debug.Log(num);Debug.Log("tran3name" + tran3.name);targetList.Add(tran3);}}}}}tempList3.Clear();}
5、然后设置路径的添加与删除
//S型public List<Transform> GetSecondPath(){Lujing.Clear();if (SourceModel == null){string pstartName = TargetModel.name.Substring(0, 3);//p05-11Debug.Log("pstartName:" + pstartName);Transform ps = Points.Find(pstartName + "s");Lujing.Add(ps);Lujing.Add(TargetModel);}else{string psourceName = SourceModel.name.Substring(0, 3);//p05-11string ptargetName = TargetModel.name.Substring(0, 3);//p05-11Transform pe1 = Points.Find(psourceName + "s");Transform pe2 = Points.Find(ptargetName + "s");Transform pe3 = Points.Find(psourceName + "e");Transform pe4 = Points.Find(ptargetName + "e");if (psourceName == ptargetName){Lujing.Add(TargetModel);}else{b++;if (b % 2 == 1){Lujing.Add(pe3);Lujing.Add(pe4);Lujing.Add(TargetModel);}else if (b % 2 == 0){Lujing.Add(pe1);Lujing.Add(pe2);Lujing.Add(TargetModel);}Debug.Log("b="+b);}}return Lujing;}
6、最后设置小车的移动
void Update(){if (IsRun){Transform endObj = Lujing[0];Vector3 direction = endObj.position - transform.position;transform.position += direction.normalized * Speed * Time.deltaTime;transform.LookAt(endObj);//timer += Time.deltaTime;float dis = Vector3.Distance(transform.position, endObj.position);if (dis < 0.5f){Lujing.RemoveAt(0);}if (Lujing.Count == 0){IsRun = false;Debug.Log("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:" + timer);SourceModel = TargetModel;transform.position = TargetModel.position;StartCoroutine(Change());}}}
IEnumerator Change(){yield return new WaitForSeconds(2);if (i < targetList.Count - 1){i++;TargetModel = targetList[i];//GetFirstPath();GetSecondPath();//GetThirdPath();IsRun = true;}}
中点型路径
要求,每列先捡前一半,再捡后一半。s—>s—>s—>s—>e—>e—>e—>e—>s—>初始位置,某列没有则跳过
返回型
要求每列捡完后从下一列的s点开始,不需要e点。1s—>1s—>2s—>2s—>3s—>3s—>4s—>4s—>初始点,某列没有则跳过
算法与s型路径类似,不添加e点即可
下面完整代码
public class LuXian : MonoBehaviour {public bool IsRun = false;float Speed = 10;public static Transform SourceModel;public Transform TargetModel;public List<Transform> Lujing = new List<Transform>();List<Transform> targetList = new List<Transform>();List<string> nameList = new List<string>();public Transform Points;float timer = 0;List<Transform> tempList = new List<Transform>();List<Transform> tempList2 = new List<Transform>();List<Transform> tempList3 = new List<Transform>();public int i = 0;//List<int> numBuf = new List<int>();string name = "";bool kaifang = false;int a = 0;int b = 0;/// <summary>/// Unity Method/// </summary>void Start(){//SuiJiFirst();//GetFirstPath();SuiJiSecond();GetSecondPath();//SuiJiThird();//GetThirdPath();IsRun = true;//CeShi();}public void SuiJiFirst(){List<Transform> tempList = new List<Transform>();List<Transform> tempList2 = new List<Transform>();//随机for (int i = 0; i < 5; i++){GetName();Transform tran = Points.Find(name);tempList.Add(tran);nameList.Add(name);}Debug.Log("temp:" + tempList.Count);//一层排序for (int j = 0; j < 5; j++){for (int i = 0; i < tempList.Count; i++){Transform tran1 = tempList[i];string tran1name = tran1.name.Substring(4, 1);int num = int.Parse(tran1name);if (num <= j){if (tempList2.Contains(tran1)){continue;}else{tempList2.Add(tran1);}}}}二层排序for (int j = 0; j < 5; j++){for (int i = 0; i < tempList2.Count; i++){Transform tran = tempList2[i];string tranname = tran.name.Substring(1, 2);int num = int.Parse(tranname);if (num <= j){if (targetList.Contains(tran)){continue;}else{targetList.Add(tran);}}}}Debug.Log("targetList:" + targetList.Count);for (int i = 0; i < targetList.Count; i++){string tname = targetList[i].name;Debug.Log("name:" + tname);}TargetModel = targetList[i];}public void SuiJiSecond(){//随机for (int i = 0; i < 10; i++){GetName();Transform tran = Points.Find(name);tempList.Add(tran);nameList.Add(name);}Debug.Log("temp:" + tempList.Count);//一层排序--列的顺序从小到大排for (int j = 0; j < 5; j++){for (int i = 0; i < tempList.Count; i++){Transform tran1 = tempList[i];string tran1name = tran1.name.Substring(1, 2);int num = int.Parse(tran1name);if (num <= j){if (tempList2.Contains(tran1)){continue;}else{tempList2.Add(tran1);}}}}Debug.Log("tempList2:" + tempList2.Count);//for (int i = 0; i < tempList2.Count; i++)//{// string tname = tempList2[i].name;// Debug.Log("name:" + tname);//}//二层排序--通过判断具体有第几列的随机数,控制a的值。for (int j = 1; j < 5; j++){kaifang = true;for (int i = 0; i < tempList2.Count; i++){Transform tran2 = tempList2[i];string tran2name = tran2.name.Substring(1, 2);int num = int.Parse(tran2name);if (num == j){if (kaifang){kaifang = false;a++;}tempList3.Add(tran2);}else { continue; }}//Debug.Log("tempList3:" + tempList3.Count);//for (int i = 0; i < tempList3.Count; i++)//{// string tname = tempList3[i].name;// Debug.Log("tempList3name:" + tname);//}ErCengPaiXu();
#region//if (a % 2 == 1)//{// for (int k = 0; k < 5; k++)// {// for (int l = 0; l < tempList3.Count; l++)// {// Transform tran3 = tempList3[l];// string tran3name = tran3.name.Substring(4, 1);// int num = int.Parse(tran3name);// Debug.Log(111111111111111111);// if (num <= k)// {// Debug.Log(22222222222222222);// if (targetList.Contains(tran3))// {// Debug.Log("aaaaaaaaaaa");// continue;// }// else// {// targetList.Add(tran3);// Debug.Log(333333333333333);// }// }// }// }//}//else if (a % 2 == 0)//{// for (int k = 4; k > 0; k--)// {// for (int l = 0; l < tempList3.Count; l++)// {// Transform tran3 = tempList3[l];// string tran3name = tran3.name.Substring(4, 1);// int num = int.Parse(tran3name);// Debug.Log(4444444444444444);// if (num <= k)// {// Debug.Log(555555555555);// if (targetList.Contains(tran3))// {// Debug.Log("bbbbbbbbbbbbbbbb");// continue;// }// else// {// targetList.Add(tran3);// Debug.Log(66666666666666);// }// }// }// }//}#endregion}Debug.Log("targetList:" + targetList.Count);for (int i = 0; i < targetList.Count; i++){string tname = targetList[i].name;Debug.Log("name:" + tname);}TargetModel = targetList[i];}/// <summary>/// a为奇数正着排,a为偶数倒着排/// </summary>public void ErCengPaiXu(){if (a % 2 == 1){for (int m = 1; m < 9; m++){for (int n = 0; n < tempList3.Count; n++){Transform tran3 = tempList3[n];string tran3name = tran3.name.Substring(4, 1);int num = int.Parse(tran3name);Debug.Log(num);if (num <= m){if (targetList.Contains(tran3)){continue;}else{Debug.Log(num);Debug.Log("tran3name" + tran3.name);targetList.Add(tran3);}}}}}else if (a % 2 == 0){for (int m = 8; m > 0; m--){for (int n = 0; n < tempList3.Count; n++){Transform tran3 = tempList3[n];string tran3name = tran3.name.Substring(4, 1);int num = int.Parse(tran3name);Debug.Log(num);if (num >= m){if (targetList.Contains(tran3)){continue;}else{Debug.Log(num);Debug.Log("tran3name" + tran3.name);targetList.Add(tran3);}}}}}tempList3.Clear();}public void SuiJiThird(){//随机for (int i = 0; i < 20; i++){GetName();Transform tran = Points.Find(name);tempList.Add(tran);nameList.Add(name);}//Debug.Log("tempList:" + tempList.Count);//for (int i = 0; i < tempList.Count; i++)//{// string tname = tempList[i].name;// Debug.Log("tempListname:" + tname);//}//第一种#region //第一层排序for (int j = 0; j < 9; j++){for (int i = 0; i < tempList.Count; i++){Transform tran1 = tempList[i];string tran1name = tran1.name.Substring(4, 1);int num = int.Parse(tran1name);if (num <= j){if (tempList2.Contains(tran1)){continue;}else{tempList2.Add(tran1);}}}}Debug.Log("tempList2:" + tempList2.Count);for (int i = 0; i < tempList2.Count; i++){string tempList2name = tempList2[i].name;Debug.Log("tempList2name:" + tempList2name);}//第一段for (int i = 0; i < tempList2.Count; i++){Transform tran2 = tempList2[i];string tran2name = tran2.name.Substring(4, 1);int num = int.Parse(tran2name);if (num < 5){tempList3.Add(tran2);}}for (int m = 0; m < 5; m++){for (int n = 0; n < tempList3.Count; n++){Transform tran3 = tempList3[n];string tran3name = tran3.name.Substring(1, 2);int num = int.Parse(tran3name);if (num <= m){if (targetList.Contains(tran3)){continue;}else{targetList.Add(tran3);}}}}//Debug.Log("targetList:" + targetList.Count);//for (int i = 0; i < targetList.Count; i++)//{// string tname = targetList[i].name;// Debug.Log("name:" + tname);//}tempList3.Clear();//第二段for (int i = 0; i < tempList2.Count; i++){Transform tran2 = tempList2[i];string tran2name = tran2.name.Substring(4, 1);int num = int.Parse(tran2name);if (num >= 5){tempList3.Add(tran2);}}for (int m = 5; m > 0; m--){for (int n = 0; n < tempList3.Count; n++){Transform tran3 = tempList3[n];string tran3name = tran3.name.Substring(1, 2);int num = int.Parse(tran3name);if (num >= m){if (targetList.Contains(tran3)){continue;}else{targetList.Add(tran3);}}}}tempList3.Clear();Debug.Log("targetList:" + targetList.Count);for (int i = 0; i < targetList.Count; i++){string tname = targetList[i].name;Debug.Log("name:" + tname);}#endregion//第二种#region第一段排序//for (int i = 0; i < tempList.Count; i++)//{// Transform tran1 = tempList[i];// string tran1name = tran1.name.Substring(4, 1);// int num = int.Parse(tran1name);// if (num < 5)// {// tempList2.Add(tran1);// }//}第一段第一层//for (int i = 1; i < 9; i++)//{// for (int j = 0; j < tempList2.Count; j++)// {// Transform tran2 = tempList2[j];// string tran2name = tran2.name.Substring(4, 1);// int num = int.Parse(tran2name);// if (num <= i)// {// if (tempList3.Contains(tran2))// {// continue;// }// else// {// tempList3.Add(tran2);// }// }// }//}第一段第二层//for (int m = 1; m < 5; m++)//{// for (int n = 0; n < tempList3.Count; n++)// {// Transform tran3 = tempList3[n];// string tran3name = tran3.name.Substring(1, 2);// int num = int.Parse(tran3name);// if (num <= m)// {// if (targetList.Contains(tran3))// {// continue;// }// else// {// targetList.Add(tran3);// }// }// }//}//tempList2.Clear();//tempList3.Clear();第二段排序//for (int i = 0; i < tempList.Count; i++)//{// Transform tran1 = tempList[i];// string tran1name = tran1.name.Substring(4, 1);// int num = int.Parse(tran1name);// if (num >= 5)// {// tempList2.Add(tran1);// }//}第二段第一层//for (int i = 1; i < 9; i++)//{// for (int j = 0; j < tempList2.Count; j++)// {// Transform tran2 = tempList2[j];// string tran2name = tran2.name.Substring(4, 1);// int num = int.Parse(tran2name);// if (num <= i)// {// if (tempList3.Contains(tran2))// {// continue;// }// else// {// tempList3.Add(tran2);// }// }// }//}第二段第二层//for (int m = 5; m > 0; m--)//{// for (int n = 0; n < tempList3.Count; n++)// {// Transform tran3 = tempList3[n];// string tran3name = tran3.name.Substring(1, 2);// int num = int.Parse(tran3name);// if (num >= m)// {// if (targetList.Contains(tran3))// {// continue;// }// else// {// Debug.Log("11111111");// targetList.Add(tran3);// }// }// }//}//tempList2.Clear();//tempList3.Clear();//Debug.Log("targetList:" + targetList.Count);//for (int i = 0; i < targetList.Count; i++)//{// string tname = targetList[i].name;// Debug.Log("name:" + tname);//}#endregionTargetModel = targetList[i];}void GetName(){int line = Random.Range(1, 5);int row = Random.Range(1, 9);name = "p" + line + "-" + row;if (line < 10){name = "p0" + line + "-" + row;}else{name = "p" + line + "-" + row;}if (nameList.Contains(name)){GetName();}}public List<Transform> GetFirstPath(){Lujing.Clear();if (SourceModel == null){string pstartName = TargetModel.name.Substring(0, 3);//p05-11Debug.Log("pstartName:" + pstartName);Transform ps = Points.Find(pstartName + "s");Lujing.Add(ps);Lujing.Add(TargetModel);}else{string psourceName = SourceModel.name.Substring(0, 3);//p05-11string ptargetName = TargetModel.name.Substring(0, 3);//p05-11Transform pe1 = Points.Find(psourceName + "s");Transform pe2 = Points.Find(ptargetName + "s");if (psourceName == ptargetName){Lujing.Add(TargetModel);}else{Lujing.Add(pe1);Lujing.Add(pe2);Lujing.Add(TargetModel);}}return Lujing;}//S型public List<Transform> GetSecondPath(){Lujing.Clear();if (SourceModel == null){string pstartName = TargetModel.name.Substring(0, 3);//p05-11Debug.Log("pstartName:" + pstartName);Transform ps = Points.Find(pstartName + "s");Lujing.Add(ps);Lujing.Add(TargetModel);}else{string psourceName = SourceModel.name.Substring(0, 3);//p05-11string ptargetName = TargetModel.name.Substring(0, 3);//p05-11Transform pe1 = Points.Find(psourceName + "s");Transform pe2 = Points.Find(ptargetName + "s");Transform pe3 = Points.Find(psourceName + "e");Transform pe4 = Points.Find(ptargetName + "e");if (psourceName == ptargetName){Lujing.Add(TargetModel);}else{b++;if (b % 2 == 1){Lujing.Add(pe3);Lujing.Add(pe4);Lujing.Add(TargetModel);}else if (b % 2 == 0){Lujing.Add(pe1);Lujing.Add(pe2);Lujing.Add(TargetModel);}Debug.Log("b="+b);}}return Lujing;}//中点型public List<Transform> GetThirdPath(){Lujing.Clear();if (SourceModel == null){string pstartName = TargetModel.name.Substring(0, 3);//p05-11Debug.Log("pstartName:" + pstartName);Transform ps = Points.Find(pstartName + "s");Lujing.Add(ps);Lujing.Add(TargetModel);}else{string psourceName = SourceModel.name.Substring(0, 3);//p05-11string ptargetName = TargetModel.name.Substring(0, 3);//p05-11int ptargetNum = int.Parse(TargetModel.name.Substring(4, 1));int Snum = int.Parse(SourceModel.name.Substring(1, 2));int Tnum = int.Parse(TargetModel.name.Substring(1, 2));Transform pe1 = Points.Find(psourceName + "s");Transform pe2 = Points.Find(ptargetName + "s");Transform pe3 = Points.Find(psourceName + "e");Transform pe4 = Points.Find(ptargetName + "e");if (ptargetNum < 5){if (psourceName == ptargetName){Lujing.Add(TargetModel);}else{Lujing.Add(pe1);Lujing.Add(pe2);Lujing.Add(TargetModel);}}else{if (psourceName == ptargetName){Lujing.Add(TargetModel);}else {if (Snum < Tnum){Lujing.Add(pe1);Lujing.Add(pe2);Lujing.Add(TargetModel);}else{Lujing.Add(pe3);Lujing.Add(pe4);Lujing.Add(TargetModel);}}}}return Lujing;}/// <summary>/// Unity Method/// </summary>void Update(){if (IsRun){Transform endObj = Lujing[0];Vector3 direction = endObj.position - transform.position;transform.position += direction.normalized * Speed * Time.deltaTime;transform.LookAt(endObj);//timer += Time.deltaTime;float dis = Vector3.Distance(transform.position, endObj.position);if (dis < 0.5f){Lujing.RemoveAt(0);}if (Lujing.Count == 0){IsRun = false;Debug.Log("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:" + timer);SourceModel = TargetModel;transform.position = TargetModel.position;StartCoroutine(Change());}}}IEnumerator Change(){yield return new WaitForSeconds(2);if (i < targetList.Count - 1){i++;TargetModel = targetList[i];//GetFirstPath();GetSecondPath();//GetThirdPath();IsRun = true;}}}
需要模型拣货的过程,只需要在到达下一路径点时,写出对应的功能即可,如下
void Update(){if (IsRun){Transform endObj = Lujing[0];Vector3 direction = endObj.position - transform.position;transform.position += direction.normalized * Speed * Time.deltaTime;transform.LookAt(endObj);//timer += Time.deltaTime;float dis = Vector3.Distance(transform.position, endObj.position);if (dis < 1f){Lujing.RemoveAt(0);}if (Lujing.Count == 0){IsRun = false;//Debug.Log("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:" + timer);SourceModel = TargetModel;transform.position = TargetModel.position;if (TargetModel == StartPos){StartCoroutine(TuiChu());}else{transform.LookAt(new Vector3(targetWuTi.position.x, transform.position.y, targetWuTi.position.z));StartCoroutine(PlayAnim());}}}if (JiShi){timer += Time.deltaTime;time.text = timer.ToString("f1") + "s";count.text = num.ToString();}}IEnumerator TuiChu(){yield return new WaitForSeconds(0.1f);JiShi = false;TiShi.gameObject.SetActive(true);TimeText.text = time.text;}IEnumerator PlayAnim(){if (i < targetList.Count - 1){Zhou5.transform.DOLocalMoveX(-0.292f, 1);yield return new WaitForSeconds(1);targetWuTi.GetChild(0).gameObject.SetActive(false);GameObject go = Instantiate(Resources.Load<GameObject>("wuti"), Zhou5.transform);yield return new WaitForSeconds(0.2f);Zhou5.transform.DOLocalMoveX(0.42f, 1);yield return new WaitForSeconds(1);Zhou6.transform.DOLocalMoveY((0.1f * i + 0.32f), 2);yield return new WaitForSeconds(2.1f);go.transform.SetParent(transform);yield return new WaitForSeconds(0.1f);Zhou6.transform.DOLocalMoveY(3.5f, 2);yield return new WaitForSeconds(2.1f);num++;i++;TargetModel = targetList[i];targetWuTi = wuti[i];GetFirstPath();IsRun = true;}else{Zhou5.transform.DOLocalMoveX(-0.292f, 1);yield return new WaitForSeconds(1);targetWuTi.GetChild(0).gameObject.SetActive(false);GameObject go = Instantiate(Resources.Load<GameObject>("wuti"), Zhou5.transform);yield return new WaitForSeconds(0.2f);Zhou5.transform.DOLocalMoveX(0.42f, 1);yield return new WaitForSeconds(1);Zhou6.transform.DOLocalMoveY((0.1f * i + 0.32f), 2);yield return new WaitForSeconds(2.1f);go.transform.SetParent(transform);yield return new WaitForSeconds(0.1f);Zhou6.transform.DOLocalMoveY(3.5f, 2);yield return new WaitForSeconds(2.1f);num++;TargetModel = StartPos;GetFirstPath();IsRun = true;}}
仿真物流仓库拣货车拣货相关推荐
- C#工控上位机实例_南京物流仓库【仓库物流】_智能云仓储库存wms管理分配货_电子标签价签拣货系统_工控erp上位机软件开发设计...
?南京滨江开发区300平方变压器250KVA厂房陆郎加油站附近开发区 | 物流仓库 | 厂房招租 南京滨江开发区陆郎加油站附近300平方独门独户厂房招租?变压器250KVA?适合小型磨具机械加工无污染 ...
- 上海瀚示制造业仓库亮灯拣货应用方案——降低成本、提高拣货效率
仓库现状: 货架和拣货区域面积约1600m2, 物料种类约4000种. 希望解决的问题: 需求的目的是减少重复工作和寻找的浪费,提高工作效率,减少仓管员人数和降低管理成本. 采用中文显示电子拣货标签系 ...
- 嘉兴 机器人仓库 菜鸟_中国最大智能机器人仓库启用,拣货效率至少提升三倍!...
原标题:中国最大智能机器人仓库启用,拣货效率至少提升三倍! 由菜鸟网络打造的中国最大的机器人仓库,日前已经在广东惠阳投入使用.与以往一些智慧仓库只有几十台搬货机器人不同的是,这一仓库内有上百台机器人, ...
- 如何减少仓库中的拣货和包装错误
提高生产力水平在任何行业都很重要,尤其是在快节奏的环境中,如仓库.仓库中的提货和包装错误会造成效率低下的工作环境,浪费时间和金钱.让我们从解释仓库用于挑选和包装的不同方法开始. 挑选方法 区域拣选 区 ...
- WMS智能仓储管理系统源码 SpringMVC物流仓库管理系统源码
淘源码:国内知名的源码免费下载平台 需要源码学习可私信我. 系统介绍: 基于SpringMVC+Hibernat+Minidao(类Mybatis)+Easyui(UI库)+ Jquery + Boo ...
- 关于汽车行业生产仿真(物流仿真)的必要性论述
关于汽车行业生产仿真(物流仿真)的必要性论述 工厂仿真&物流仿真 常规汽车仿真而言 只能明确规划数据并对各部分生产能力及个部分配合线平衡进行客观量化分析,辅助规划定性,明确规划阶段生产控制调度 ...
- 智能物流仓库控制系统
智能物流仓库控制系统(1) 51单片机为核心,加入温度传感器.红外技术传感器.蜂鸣器.继电器.光照消毒灯等等,进行仓库实时模拟. 第一篇文章首先介绍一下LCD1602吧! LCD1602就是那个绿色的 ...
- 预约货车拉货小程序开发制作功能介绍
预约货车拉货小程序是一款货主.司机线上抢单预约工具,主要功能有货主发布需求.司机争抢需求.车主抢单等. 找货车拉货小程序主要开发功能有: 1.首页 首页设计从简出发,只展示最重要的信息;采用圆角卡片式 ...
- 物流仓库管理系统源码
特点 自动化仓储 电商仓储 快消品仓储 园区仓储 统仓统配仓储 制造业仓储 仓库管理中的作用 可规划好商品的摆放位置,提升仓库利用率,便于仓库人员找货. 可以记录库内的作业变化,以及物流的收发情况,并 ...
最新文章
- 【java线程】锁机制:synchronized、Lock、Condition
- 13张图彻底搞懂分布式系统服务注册与发现原理
- 李飞飞、颜宁等8位华人学者入选美国艺术与科学院院士,其中7位女性
- [转]VC++中对文件的写入和读取
- motan yar php,motan学习笔记 六 opentracing Brave+zipkin实现-Go语言中文社区
- 微信公众号自定义菜单设置管理
- 计算机用户组 xp,WindowsXP怎么加入工作组?
- 2窗口大小 python_Python编程基础知识系列连载(2)
- PIC中档单片机汇编指令详解(2)
- 无线AP和无线路由器区别 wifi热点
- 计算机二级MS office 复习思维导图
- 【多线程】Lock和ReentrantLock使用和源码分析
- 大禹电子:超声波水下通讯设备测试结论
- Ubuntu18.04+Win10双系统安装步骤 问题排查
- 离散数学与计算机专业的关系是什么,离散数学跟计算机专业有什么关系?
- Could not connect to broker URL: tcp://localhost:61616?wireFormat.maxInactivityDuration=0wireForma
- Install Mercury MW150US WIFI dongle on RPi
- JAVA培训多久可以找工作?
- 软件测试面试题:关闭浏览器中quit和close的区别
- 20210209PC版微信 网络不可用,请检查你的网络设置 的解决方法