1. 总体框架图

文章插图
2.框架能解决哪些问题?
- 问题1:
- 解决思路:
- 问题2:
- 解决办法:
- 问题3:组件抽象出来后,组件内部的编程模型怎么抽象,才能让编程更为简单方便?
- 解决办法:有限状态机模型,组件内部定义为很多状态 , 每个状态下做指定的动作,满足条件后跳转到下一个状态 。
/// <summary>/// 开线模式 , 从升降台取夹具,从升降台取pcb,扣合流出/// </summary>public class OpenLineModule : BasePlantModule{private enum Status{UnKnow,WaitTakeFix,TakeFix,WaitPutFix,PutFix,WaitTakePcb,TakePcb,WaitPutPcb,PutPcb,/// <summary>/// 扣合检测是否开启/// </summary>CheckCpk}/// <summary>/// 夹具吸嘴/// </summary>public ICylinder FixSuction { get; set; }/// <summary>/// 取光板位置/// </summary>public Position TakeFixPoi { get; set; }public Position PutFixPoi { get; set; }/// <summary>/// 允许取夹具/// </summary>public IInputIoDevice AllowTakeFix { set; get; }/// <summary>/// 取夹具完成/// </summary>public IOutputIoDevice TakeFixCompelte { set; get; }/// <summary>/// 下位机要夹具/// </summary>public IInputIoDevice AllowPutFix { set; get; }public IOutputIoDevice PutEmptyPcbCompelte { set; get; }/// <summary>/// 扩展轨道/// </summary>public ExtendTrackBaffleModule ExtendTrackBaffleModule { get; set; }private Status RobotStatus = Status.UnKnow;protected override void argsInit(){if (this.FixSuction.IsOpen()){throw new Exception(String.Format("{0} have object", this.FixSuction.GetName()));}this.RobotStatus = Status.UnKnow;this.TakeFixCompelte.Close();this.PutEmptyPcbCompelte.Close();this.FixSuction.Close();base.argsInit();}protected override void handler(){switch (this.RobotStatus){case Status.UnKnow: this.unKnow(); break;case Status.WaitTakeFix: this.waitTakeFix(); break;case Status.TakeFix: this.takeFix(); break;case Status.WaitPutFix: this.waitPutFix(); break;case Status.PutFix: this.putFix(); break;case Status.WaitTakePcb: this.waitTakePcb(); break;case Status.TakePcb:this.takePcb();this.RobotStatus = Status.WaitPutPcb; break;case Status.WaitPutPcb: this.waitPutPcb(); break;case Status.PutPcb: this.putPcb(); break;case Status.CheckCpk: this.checkCpk(); break;default: break;}base.handler();}private void unKnow(){this.RobotStatus = Status.WaitTakeFix;}private void waitTakeFix(){if (this.AllowTakeFix.IsOpen()){this.RobotStatus = Status.TakeFix;}}private void takeFix(){this.FixSuction.Open();this.Robot.GoToPosition(this.TakeFixPoi);this.Sleep(100);//到达上方一点Position tempFixPoi= this.TakeFixPoi.Copy();tempFixPoi.Z += 10;this.Robot.GoToPosition(tempFixPoi);this.GotoPoiUp(this.Robot, this.TakeFixPoi);this.checkSuctionNozzle(this.FixSuction);this.TakeFixCompelte.Open();this.Robot.GoToPosition(this.SafePoi);this.RobotStatus = Status.WaitPutFix;}private void waitPutFix(){if (this.AllowPutFix.IsOpen()){this.RobotStatus = Status.PutFix;}}private void putFix(){this.Robot.GoToPosition(this.PutFixPoi);this.FixSuction.Close();this.Sleep(200);this.GotoPoiUp(this.Robot, this.PutFixPoi);this.ExtendTrackBaffleModule.SetStatusA();this.Robot.GoToPosition(this.SafePoi);this.RobotStatus = Status.WaitTakePcb;}private void waitTakePcb(){if (this.AllowTakeEmptyPcb.IsOpen()){this.RobotStatus = Status.TakePcb;}}private void waitPutPcb(){this.RobotStatus = Status.PutPcb;}private void putPcb(){if (this.AllowPutEmptyPcb.IsOpen()){this.fixEmptyPcb();this.RobotStatus = Status.CheckCpk;}}private void checkCpk(){//光板cpkthis.emptyPcbCpk();//放板完成this.PutEmptyPcbCompelte.Open();this.Robot.GoToPosition(this.SafePoi);//到安全点为了给翻转组件留时间this.PutEmptyPcbCompelte.Close();this.RobotStatus = Status.WaitTakeFix;}public override bool Dispose(){this.TakeFixCompelte.Close();this.PutEmptyPcbCompelte.Close();return base.Dispose();}}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 星火之歌怎么联系客服
- vulnhub靶场之CORROSION: 2
- 星火之歌克利奥帕特拉定位为控制
- 花亦山心之月天赐锦鲤活动攻略
- 生成器函数 javascript异步编程之generator与asnyc/await语法糖
- 金铲铲之战巨龙之巢龙拳瑟提玩法是什么
- FlinkSQL之Windowing TVF
- 云小课|MRS基础原理之MapReduce介绍
- SLAM中的内外点
- vulnhub靶场之NOOB: 1