400 likes | 588 Views
基于代理的自动工艺实现方案. 背景 代理 方案. 背景. 概念: CIMS : 计算机集成制造系统 CAPP : 计算机辅助工艺规划或设计 CAD : 计算机辅助设计 CAM : 计算机辅助制造 MIS : 管理信息系统 MAS : 制造自动化系统 CAQ : 质量保证系统. CAD/CAPP/CAM. CAD. MAS. MIS. CAPP. CAM. CAQ. 结构图. CIMS. CAPP 应具有如下的性能:
E N D
背景 • 代理 • 方案
背景 • 概念: • CIMS:计算机集成制造系统 • CAPP:计算机辅助工艺规划或设计 • CAD:计算机辅助设计 • CAM:计算机辅助制造 • MIS:管理信息系统 • MAS:制造自动化系统 • CAQ:质量保证系统
CAD/CAPP/CAM CAD MAS MIS CAPP CAM CAQ • 结构图 CIMS
CAPP应具有如下的性能: • 它应作为CAD/CDM集成设计辅助的工具来工作 ,即自动地从工程 (产品设计 )方面获得输入数据 ,并且产生出一整套工艺规程 ,供编制生产计划和生产、材料、质量控制等使用 ; • 它应为加工的指令安排、生产计划调度、工资单计算和材料发放等提供基本数据 ; • 它应是适合于不同零件种类的通用化设计 ;
它应具有一个能充分利用计算机潜力的交互式在线处理系统 ; • 它应具有便利的用户界面 ,并为操作人员提供指南 ; • 系统是模块化、结构化的 ,以便容易扩展 ,修理和维护 ; • 与其生产设备一样 ,它应具有经济性。
传统CAPP的主要困难 • 研制周期长 • 适应性差 • 实用性差 • 低水平重复 • 提出基于代理的CAPP 采用目前较为先进的代理技术
自动工艺是CAPP系统的核心部分,自动工艺模块性能直接影响整个系统的性能。通过代理技术来实现自动工艺过程是目前较为先进的技术。在自动工艺流程上,一般有四个主要的模块:输入器、生成器、审查器以及批准器。自动工艺是CAPP系统的核心部分,自动工艺模块性能直接影响整个系统的性能。通过代理技术来实现自动工艺过程是目前较为先进的技术。在自动工艺流程上,一般有四个主要的模块:输入器、生成器、审查器以及批准器。 它们分别是用四个代理类来实现的。因此,相应的四个代理类分别是:输入器代理类、生成器代理类、审查器代理类以及批准器代理类。
代理 • 代理概念及其性质 • 代理池概念及其机制
代理概念及其性质 • 概念:是一类在特定环境下能感知环境,并能自治地运行以代表其设计者或使用者实现一系列目标的计算实体或程序。 从软件实现角度,它是一个计算机程序,通过预定义的协议(公用语言)与外部Agent进行通信。 代理和对象的区别在于代理的自主性和协作性。
Agent的四个最基本特性:针对环境性、反应性、自治性、面向目标性。虽然还可有移动性、社会性、学习性等其它特性,但只要具备了上述四个特性就可以认为它是一个Agent,我们将这样的Agent称为最小Agent。Agent的四个最基本特性:针对环境性、反应性、自治性、面向目标性。虽然还可有移动性、社会性、学习性等其它特性,但只要具备了上述四个特性就可以认为它是一个Agent,我们将这样的Agent称为最小Agent。 在最小Agent的基础上,根据各自的应用情况还可再拥有其的特性,从而将Agent分成不同的种类:如自治Agent、软件Agent、移动Agent等。
代理池概念及其机制 • 概念:是一个负责调度代理的载入与卸载,响应代理之间发送的事件以及做出相应的处理,而且保存每个代理的相关信息以及能够恢复保存的信息的容器。
代理池机制 代理 代理 代理 代理
代理池功能 • 装载/卸载代理 • 处理代理之间通信 • 保存/恢复代理信息 • 监视代理工作情况
方案 • 谈谈我们目前项目 • 提出星型工艺模型
谈谈我们目前项目 • 概述:我们目前正在做的项目(即“天工”项目)主要包括三大模块: • 系统管理模块 • 项目管理模块 • 自动工艺模块 我们小组做的是自动工艺模块
任务分配代理 分类编码代理 工艺路线生成代理 工艺路线审查代理 工艺路线批准代理 专业工艺生成代理 专业工艺审查代理 专业工艺批准代理 • 工艺流模型图
任务成功提交 • 图中箭头意义 任务成功反馈 任务出错反馈 • 谁操作? 白色箭头:用户操作完成 粉红色箭头:系统自动完成 红色箭头:用户操作完成 ???
工艺路线 工作中心 工步 工艺路线生成代理完成 • 工艺层次 专 业 工 艺 生 成 代 理 处 完 成
任务结构 任务基本信息 分类编码信息 工艺路线生成信息 工艺路线审查信息 工艺路线批准信息 专业工艺生成信息 专业工艺审查信息 专业工艺批准信息
任务ID 任务名称 任务状态 用户名称 零件ID 零件名称 零件图号 文档ID • 任务基本信息 • 分类编码信息 典型零件 零件编码 • 工艺路线生成信息 工艺路线组合 • 工艺路线审查信息 审查人名称 审查密码 审查意见
工艺路线批准信息 批准人名称 批准密码 批准意见 • 专业工艺生成信息 专业工艺组合 • 专业工艺审查信息 审查人名称 审查密码 审查意见 • 专业工艺批准信息 批准人名称 批准密码 批准意见
任务 任务 任务 任务分配代理 分类编码代理 工艺路线生成代理 新 建 传递 传递 传递 • 任务活动过程 任务及前面代理信息 任务及前面代理信息 工艺路线生成信息 任务分配信息 分类编码信息 任务基本信息 提交 提交 提交
数 据 库 传递 提取信息 任务 写入数据库 读 取 信 息 写 入 信 息 删除任务 提交 专业工艺批准代理 成功反馈信息
提出星型工艺模型 • 提出: • 前面采用链式结构把各代理链接在一起。 此种结构缺点:插入/删除节点困难,即不具有扩展性; 为此提出星型结构。
工艺流程分为四大类(分类编码、工艺生成、工艺审查和工艺批准)以及任务分配。工艺流程分为四大类(分类编码、工艺生成、工艺审查和工艺批准)以及任务分配。 因此,星型结构如下实现: (1)前面四类用节点代理来实现; (2)任务分配用中枢代理来实现。 能够灵活地添加/删除节点代理。
星型模型结构图 输入器代理类 中枢代理 批 准 器 代 理 类 生 成 器 代 理 类 注: 1.各代理类:节点代理 2.红色虚框内:实体代理 审查器代理类
层次1 层次2 层次n • 工艺层次
任务基本信息 节点代理1 信息字段 节点代理n 信息字段 • 任务结构
节点代理外部结构 节点代理 接收 发送 信息 事件 接收 发送 注: • 事件:接收(未做工艺的)任务事件与发送(做完工艺 的)任务事件; • 信息: 在任务结构中相应的字段,由这个代理填写此字段信息。
节点代理内部结构 添加 工艺层次 功能模块 添加 工艺层次 功能模块 注: • 各类节点代理在内部结构上不同,体现在功能模块上不同; • 同类节点代理的不同实体内部结构相同,体现在功能模块上相同,但是工艺层次的数目不一致,从而它们也体现出不同。
新建任务 • 中枢代理 任务1 控制任务结构功能模块 任务2 来 源 于 系 统 设 置 任务n 添加/删除节点代理功能模块 节点代理1 节点代理2 节点代理n 提取任务功能模块
注: • 代理池不负责代理之间通信,由中枢代理接管; • 中枢代理负责添加/删除节点代理;
添加节点代理结构示图 添加实体代理 添加代理类
添加节点代理算法 public void addNodeTypeAgent(String typeName,int typeID,Vector taskField) {//添加一个新节点类型代理 backboneAgent bbAgent=(backboneAgent)agentPool.getBackboneAgent(); //从代理池中获得中枢代理 Hashtable nodeTypeAgentList=(Hashtable)bbAgent.getNodeTypeAgentList(); //从中枢代理中获得节点类型代理列表 nodeTypeAgentList.add(typeID,typeName); //在节点类型代理列表中添加指定的新节点类型代理 Hashtable taskFabricList=(Hashtable)bbAgent.getTaskFabricList(); //从中枢代理中获得任务结构列表 taskFabricList.add(typeID,taskField); //在任务结构列表中添加指定的新节点类型代理的任务字段 }
public void addNodeEntityAgent(String name,int ID,int typeID,Vector taskField) {//添加已存在的节点类型代理的一个节点实体代理 backboneAgent bbAgent=(backboneAgent)agentPool.getBackboneAgent(); //从代理池中获得中枢代理 if(!(bbAgent.existNodeTypeAgent(typeID)))return; //判断是否存在此种节点类型代理,若不存在则返回 Hashtable nodeTypeAgentList=(Hashtable)bbAgent.getNodeTypeAgentList(); //从中枢代理中获得节点类型代理列表 Hashtable nodeEntityAgentList=(Hashtable)bbAgent.getNodeEntityAgentList(); //从中枢代理中获得节点实体代理列表 nodeEntityAgentList.add(ID,name); //在节点实体代理中添加新节点实体代理 Hashtable taskEntityList=(Hashtable)bbAgent.getTaskEntityList(); //从中枢代理中获得任务列表 Vector v=(Vector)nodeTypeAgentList.get(typeID) Enumeration e=v.elements(); while(e.hasMoreElements()) { String str=(String)e.nextElement(); taskEntityList.add(name+"_"+str,""); }//在任务实体列表中添加指定的新节点实体代理的任务字段,初始值置空 Agent newAgent=new Agent(name); //用指定名称构造一个新代理 agentPool.addAgent(newAgent);//把这个新代理添加到代理池中 }
删除节点代理 删除实体代理 删除代理类
删除节点代理算法 public void delNodeTypeAgent(int typeID) {//删除一个新节点类型代理 backboneAgent bbAgent=(backboneAgent)agentPool.getBackboneAgent(); //从代理池中获得中枢代理 if(bbAgent.existNodeEntityAgent(typeID))return; //判断是否存在此种节点类型代理的节点实体代理,若存在则返回 Hashtable nodeTypeAgentList=(Hashtable)bbAgent.getNodeTypeAgentList(); //从中枢代理中获得节点类型代理列表 nodeTypeAgentList.remove(typeID); //在节点类型代理列表中删除指定的新节点类型代理 Hashtable taskFabricList=(Hashtable)bbAgent.getTaskFabricList(); //从中枢代理中获得任务结构列表 taskFabricList.remove(typeID); //在任务结构列表中删除指定的新节点类型代理的任务字段 }
public void delNodeEntityAgent(String name,int ID,int typeID) {//删除已存在的节点类型代理的一个节点实体代理 backboneAgent bbAgent=(backboneAgent)agentPool.getBackboneAgent(); //从代理池中获得中枢代理 Hashtable nodeEntityAgentList=(Hashtable)bbAgent.getNodeEntityAgentList(); //从中枢代理中获得节点实体代理列表 nodeEntityAgentList.remove(ID); //在节点实体代理中删除指定ID的节点实体代理 Hashtable taskEntityList=(Hashtable)bbAgent.getTaskEntityList(); //从中枢代理中获得任务列表 Vector v=(Vector)nodeTypeAgentList.keys(); Enumeration e=v.elements(); while(e.hasMoreElements()) { String str=(String)e.nextElement(); if(includeKey(name))taskEntityList.remove(str); } //函数includeKey用来判断关键字str中是否存在name前缀,若存在则删除 agentPool.delAgent(name); //在代理池中删除指定名称的代理 }
以后的工作 • 实现代理的移动性 • 增强代理的智能性 • 进一步完善星型模型的功能