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();}}}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 元旦是不是新年 阳历新年和传统春节的不同之处
- 星火之歌怎么联系客服
- 30天之内缘分桃花非常执着 期待一份美好爱情的4个星座
- vulnhub靶场之CORROSION: 2
- 星火之歌克利奥帕特拉定位为控制
- 花亦山心之月天赐锦鲤活动攻略
- 身弱之女一般嫁什么人 身弱的人找什么配偶
- 五行齐全有可怕之处吗 五行缺哪一项最不好
- 赞美荷花的唯美短句 描写荷花动态之美的句子
- 寒露过后是什么节气 寒露之后是哪个节气