WindChill开发第一章
WindChill开发
一、配置环境
-
修改计算机名称
-
关闭Windows防火墙
-
配置host文件 ==> win + R 输入drivers打开host文件路径
-
增加如下内容
192.168.110.59 plm.ybs.com localhost
ps: 这边配置的是桥接模式
二、PDM&PLM简介
1.什么是PDM?
定义:PDM是产品数据管理
作用:PDM是一种帮助工程师和其他管理人员管理产品数据和产品研发过程的工具
2.什么是PLM?
定义:PLM是铲平生命周期管理
作用:让各种数据(产品研发,设计,采购,生产,售后服务等)管理工具使用同一种语言互相通讯,写作工作,来提高企业生产效率和产品创新技能。
3.目前主流的产品
-
生产ERP的软件公司(SAP的Mysap、Oracle的Agile、用友的PDM、金蝶PDM)
-
传统机械软件设计软件公司(PTC的windchill、西门子公司的Teamcenter、达索公司的PLM)
三、Windchill的基础操作
-
打开Windchill首页
点击主页按钮打开Windchill的用户界面,主页提供特定于用户的信息。
-
使用快速链接
可以访问常用的工具,首选项和信息
-
使用导航器
可搜索或浏览Windchill中的信息
四、Windchill物料和BOM管理
1.物料和BOM的概念
-
物料:一个泛称,它可以是企业中的零件、组件、虚拟件、结合件、实际功能件、原材料等,它可以自制或者外购。
-
BOM:体现当前产品中的实物清单,主要包含各类物料及其数量;
-
侠义的BOM
以树状形式展现物料与物料之间的使用关系如层级结构、用量等;
只体现了BOM当中物料信息;
-
广义BOM
在侠义BOM的基础上,充分考虑了其它更为完整的产品信息如技术文件、图纸、变更信息等;
更多通过物料与其他信息的关联关系来展示
-
BOM的属性
装配指示符
优先级
替代项目组
排序字符串
备注
-
2.BOM数据管理模型
3.部件和成品功能
4.创建单个物料
物料需要在上下文容器中创建,例如:产品库、存储库等。
例如在产品库中创建物料,步骤如下:
- 点击产品库结构中的"文件夹"
- 选择需要存放物料的文件夹"Parts"
- 点击"新建部件"按钮
5.填写物料属性
- 选择需要创建的类型,例如"部件"
- 输入编号,自动生成则不用输入
- 输入名称
- 选择或填写其他业务属性
- 点击"完成"按钮创建新物料
6.物料管理的数据
打开物料详情信息页面,可以看到以下属性信息
-
编号
-
名称
-
版本(包含修订版本和小版本)
-
视图
-
生命周期状态
-
存储位置
-
其他业务属性
-
结构数据
-
相关对象更改
7.创建多个物料
-
点击文件夹工具栏的"操作"按钮
-
点击"新建" ==> “新建多个部件”
四、启动Windchill
- 运行start.ds和httpserver
- 管理员运行Windchill start
五、初始化项目(准备工作)
-
输入指令,生成jar包
ant -f tpJars.xml all
-
将codebase/config/mvc位置中的mvc.xml包扫描换成项目名称
-
ant -f build.xml jc 编译
-
Windchill start 启动windchill
六、入门接口案例
-
根据编号查询部件
public JSONObject queryWTPartByNumber(String number) { WTPart latestWTPartByNumber = null; JSONObject jsonObject = new JSONObject(); try { if (StringUtils.isEmpty(number)) { throw new Exception("number不能为空"); } WTPart part = PartUtils.getPart(number, false); Console.log("part===>", part); if (ObjectUtil.isNotEmpty(part)) { jsonObject.set("name", part.getName()); jsonObject.set("number", part.getNumber()); } } catch (WTException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return jsonObject; }
-
通过API创建部件
private JSONObject createAndSavePart(PartEntity part) throws WTException { JSONObject jsonObject = null; try { WTObject wtObject = WTObjectUtil.getWTObjectByOid(part.getContainerOid()); WTContainer container = null; if (ObjectUtil.isNotEmpty(wtObject) && wtObject instanceof WTContainer) { container = (WTContainer) wtObject; }else { throw new WTException("wtObject为空"); } WTContainerRef containerReference = WTContainerRef.newWTContainerRef(container); WTPart wtPart = WTPart.newWTPart(part.getNumber(), part.getName(), QuantityUnit.EA); wtPart.setContainerReference(containerReference); Folder location = null; try { location = FolderHelper.service.getFolder("/Default/机械部件", containerReference); } catch (WTException e) { location = FolderHelper.service.saveFolderPath("/Default/机械部件", containerReference); } wtPart.setPartType(PartType.SEPARABLE); wtPart.setSource(Source.MAKE); ViewHelper.assignToView(wtPart, ViewHelper.service.getView("Design")); PersistenceHelper.manager.save(wtPart); WTPart newPart = (WTPart) PersistenceHelper.manager.refresh(wtPart); jsonObject = new JSONObject(); jsonObject.putOpt(IBAConstants.NAME, IBAUtils.getIBAValue(newPart, IBAConstants.NAME)); jsonObject.putOpt(IBAConstants.NUMBER, IBAUtils.getIBAValue(newPart, IBAConstants.NUMBER)); } catch (Exception e) { e.printStackTrace(); throw new WTException("对象创建失败。(" + e.getMessage() + ")"); } return jsonObject; }
-
递归获取带有层级结构的BOM
public JSONObject getAllChildPart(String oid) throws WTException, RemoteException { List<JsonPartBean> bom = Lists.newArrayList(); JSONObject jsonObject = new JSONObject(); if (StrUtil.isNotEmpty