基于代理的自动工艺实现方案
•背景
•代理
•方案
背景
概念:
CIMS:计算机集成制造系统
CAPP:计算机辅助工艺规划或设计
CAD:计算机辅助设计
CAM:计算机辅助制造
MIS:管理信息系统
MAS:制造自动化系统
CAQ:质量保证系统
CAD
CAD/CAPP/CAM
CAPP
CAM
CAQ
MIS MAS
结构图 CIMS
CAPP应具有如下的性能:
•它应作为CAD/CDM集成设计辅助的工
具来工作 ,即自动地从工程 (产品设计 )方
面获得输入数据 ,并且产生出一整套工艺规
程 ,供编制生产计划和生产、材料、质量控
制等使用 ;
•它应为加工的指令安排、生产计划调度、
工资单计算和材料发放等提供基本数据 ;
•它应是适合于不同零件种类的通用化设计 ;
•它应具有一个能充分利用计算机潜力的交
互式在线处理系统 ;
•它应具有便利的用户界面 ,并为操作人员提
供指南 ;
•系统是模块化、结构化的 ,以便容 ,修理和
维护 ;
•与其生产设备一样 ,它应具有经济性。
传统CAPP的主要困难
研制
适应性差
实用性差
低水平重复
提出基于代理的CAPP
采用目前较为先进的代理技术
自动工艺是CAPP系统的核心部分,自动工
艺模块性能直接影响整个系统的性能。通
过代理技术来实现自动工艺过程是目前较
为先进的技术。在自动工艺流程上,一般
有四个主要的模块:输入器、生成器、审
查器以及批准器。
它们分别是用四个代理类来实现的。
因此,相应的四个代理类分别是:输入器
代理类、生成器代理类、审查器代理类以
及批准器代理类。
代理
代理概念及其性质
代理池概念及其机制
代理概念及其性质
•概念:是一类在特定环境下能感知环境,
并能自治地运行以代表其设计者或使用者
实现一系列目标的计算实体或程序。
从软件实现角度,它是一个计算机程
序,通过预定义的协议(公用语言)与外
部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)public void addNodeTypeAgent(String typeName,int typeID,Vector taskField)
{//{//添加一个新节点类型代理添加一个新节点类型代理
backboneAgent bbAgent=(backboneAgent)();backboneAgent bbAgent=(backboneAgent)();
////从代理池中获得中枢代理从代理池中获得中枢代理
Hashtable Hashtable
nodeTypeAgentList=(Hashtable)(); nodeTypeAgentList=(Hashtable)();
////从中枢代理中获得节点类型代理列表从中枢代理中获得节点类型代理列表
(typeID,typeName);(typeID,typeName);
////在节点类型代理列表中添加指定的新节点类型代理在节点类型代理列表中添加指定的新节点类型代理
Hashtable taskFabricList=(Hashtable)();Hashtable taskFabricList=(Hashtable)();
////从中枢代理中获得任务结构列表从中枢代理中获得任务结构列表
(typeID,taskField);(typeID,taskField);
////在任务结构列表中添加指定的新节点类型代理的任务字段在任务结构列表中添加指定的新节点类型代理的任务字段
}}
public void addNodeEntityAgent(String name,int ID,int typeID,Vector taskField)public void addNodeEntityAgent(String name,int ID,int typeID,Vector taskField)
{//{//添加已存在的节点类型代理的一个节点实体代理添加已存在的节点类型代理的一个节点实体代理
backboneAgent bbAgent=(backboneAgent)();backboneAgent bbAgent=(backboneAgent)();
////从代理池中获得中枢代理从代理池中获得中枢代理
if(!((typeID)))return;if(!((typeID)))return;
////判断是否存在此种节点类型代理,若不存在则返回判断是否存在此种节点类型代理,若不存在则返回
Hashtable nodeTypeAgentList=(Hashtable)(); Hashtable nodeTypeAgentList=(Hashtable)();
////从中枢代理中获得节点类型代理列表从中枢代理中获得节点类型代理列表
Hashtable nodeEntityAgentList=(Hashtable)(); Hashtable nodeEntityAgentList=(Hashtable)();
////从中枢代理中获得节点实体代理列表从中枢代理中获得节点实体代理列表
(ID,name);(ID,name);
////在节点实体代理中添加新节点实体代理在节点实体代理中添加新节点实体代理
Hashtable taskEntityList=(Hashtable)();Hashtable taskEntityList=(Hashtable)();
////从中枢代理中获得任务列表从中枢代理中获得任务列表
Vector v=(Vector)(typeID)Vector v=(Vector)(typeID)
Enumeration e=();Enumeration e=();
while(())while(())
{{ String str=(String)();String str=(String)();
(name+"_"+str,""); (name+"_"+str,"");
}//}//在任务实体列表中添加指定的新节点实体代理的任务字段,初始值置空在任务实体列表中添加指定的新节点实体代理的任务字段,初始值置空
Agent newAgent=new Agent(name);Agent newAgent=new Agent(name);
////用指定名称构造一个新代理用指定名称构造一个新代理
(newAgent);//(newAgent);//把这个新代理添加到代理池中把这个新代理添加到代理池中
}}
批准器
审查器
生成器
输入器
任务分配
删除节点代理
专业工艺批准
专业工艺审查
专业工艺生成
分类编码
任务分配
删除代理类 删除实体代理
批准器
审查器
生成器
输入器
任务分配
•删除节点代理算法
public void delNodeTypeAgent(int typeID)public void delNodeTypeAgent(int typeID)
{//{//删除一个新节点类型代理删除一个新节点类型代理
backboneAgent bbAgent=(backboneAgent)();backboneAgent bbAgent=(backboneAgent)();
////从代理池中获得中枢代理从代理池中获得中枢代理
if((typeID))return;if((typeID))return;
////判断是否存在此种节点类型代理的节点实体代理,若存在则返回判断是否存在此种节点类型代理的节点实体代理,若存在则返回
Hashtable Hashtable
nodeTypeAgentList=(Hashtable)(); nodeTypeAgentList=(Hashtable)();
////从中枢代理中获得节点类型代理列表从中枢代理中获得节点类型代理列表
(typeID);(typeID);
////在节点类型代理列表中删除指定的新节点类型代理在节点类型代理列表中删除指定的新节点类型代理
Hashtable taskFabricList=(Hashtable)();Hashtable taskFabricList=(Hashtable)();
////从中枢代理中获得任务结构列表从中枢代理中获得任务结构列表
(typeID);(typeID);
////在任务结构列表中删除指定的新节点类型代理的任务字段在任务结构列表中删除指定的新节点类型代理的任务字段
}}
public void delNodeEntityAgent(String name,int ID,int typeID)public void delNodeEntityAgent(String name,int ID,int typeID)
{//{//删除已存在的节点类型代理的一个节点实体代理删除已存在的节点类型代理的一个节点实体代理
backboneAgent bbAgent=(backboneAgent)();backboneAgent bbAgent=(backboneAgent)();
////从代理池中获得中枢代理从代理池中获得中枢代理
Hashtable Hashtable
nodeEntityAgentList=(Hashtable)();nodeEntityAgentList=(Hashtable)();
////从中枢代理中获得节点实体代理列表从中枢代理中获得节点实体代理列表
(ID);(ID);
////在节点实体代理中删除指定在节点实体代理中删除指定IDID的节点实体代理的节点实体代理
Hashtable taskEntityList=(Hashtable)();Hashtable taskEntityList=(Hashtable)();
////从中枢代理中获得任务列表从中枢代理中获得任务列表
Vector v=(Vector)();Vector v=(Vector)();
Enumeration e=();Enumeration e=();
while(())while(())
{{
String str=(String)();String str=(String)();
if(includeKey(name))(str);if(includeKey(name))(str);
} //} //函数函数includeKeyincludeKey用来判断关键字用来判断关键字strstr中是否存在中是否存在namename前缀,若存在则删除前缀,若存在则删除
(name);(name);
////在代理池中删除指定名称的代理在代理池中删除指定名称的代理
}}
以后的工作
•实现代理的某著名企业性
•增强代理的智能性
•进一步完善星型模型的功能