目录

  • 1.概述
  • 2.计算方法
  • 3.验证策略
  • 4.测试结果
  • 5.测试结果证明截图
    • 100-B-1-B1
    • 100-B-1-B2
    • 100-B-1-B3
    • 100-B-2-B1
    • 100-B-2-B2
    • 150-A-3-B1
    • 200-B-4-B1
    • 250-B-5-B1
    • 250-B-5-B2
    • 250-B-5-B4
    • 250-B-5-B5
    • 80-B-7-B1
    • BRANCH 1 of PIPE 7 of ZONE /PIPES
    • BRANCH 1 of PIPE 8 of ZONE /PIPES
    • BRANCH 1 of PIPE 9 of ZONE /PIPES
    • 50-B-9-B1
    • 50-B-9-B3
    • 50-B-9-B5
    • 150-B-6-B1
    • 100-B-8-B1
    • 100-B-8-B1
    • 100-B-8-B2
    • 40-B-10-B1
    • 40-B-10-B3
    • 80-A-11-B1
    • 100-C-13-B1
    • 100-C-13-B2
    • 100-C-12-B
    • 100-C-12-B2
    • 100-C-12-B3
    • 100-C-12-B4
    • 100-C-12-B5
    • 100-C-12-B6
    • 100-C-12-B8
    • 80-B-14-B1
    • 150-A-57-B1
    • 150-A-57-B2
  • 6.元件库规范
  • 7.异常信息捕捉和提示
    • 7.1没有制定螺栓等级
    • 7.2螺栓等级里没有螺栓元件类型
    • 7.3元件没有设置螺栓参数
    • 7.4其他错误示例
  • 总结和规划
  • 关于12.0.SP6版本的补充说明

1.概述

0.9.3版本主要是重构了螺栓材料统计功能,以sample项目的测试结果为例,螺栓统计的规格和数量与PDMS出的ISO图上标注的螺栓数据一致,有两根不一致的Branch我单独做了说明,我认为按照我的方法计算也是合理的。我本以为螺栓这么一点小东西应该很容易吧,没想到计算起来真是复杂,而且元件属性的订制必须也要符合一致的命名和设置规范,没有统一规范,工具就没有没有办法基于一个标准的计算规则来统计材料,为此我增加了很多元件属性的检查。开发过程经历了三次推倒重来,也算经历了一番波折,最后总算是八九不离十了。因为sample项目的数据量小,材料类别少,所以还有一些判断规则后期需要扩充,以后再说。

2.计算方法

PDMS教程给出的螺栓长度计算公式 = 法兰 + 垫片(对夹元件) + 螺母 + 垫圈 + 露出的丝扣
官方教程说要按5mm圆整,但是我按5mm圆整计算的结果跟iso图总是不一样。
我的计算公式:
螺栓有效长度=法兰(两片) + 垫片(对夹元件) + 螺母 + 垫圈 + 附加长度;
螺栓圆整长度=有效长度按螺栓长度表向上圆整。
计算步骤:

  1. 获取元件的catref;
  2. 遍历元件catref的TEXT,找到STEXT是FLANGE THICKNESS,取RA的序列索引号;
  3. 为什么不在元件的DTSE里找到DKEY是FLTH的节点,因为有很多元件没有DTSE数据;
  4. 在catref的param中解析对应索引号的数值就是法兰厚度;
  5. 同样方法计算对应法兰面的厚度+垫片厚度=螺栓有效长度(净长度length1);
  6. 查找catref的bltfarray,取array的第一个,因为目前发现都只有第一个值;
  7. 获取bltfarray下的bltp,有几个螺栓孔就有几个bolt,以bolt的个数作为螺栓个数;
  8. 获取bltp的btype,根据这个去螺栓等级里找螺栓的类型(例如双头螺柱等),值为BOLT时就是螺栓等级里的默认规格;
  9. 读取螺栓等级表Table(增加几列存储默认值);
  10. 在Table里根据:直径、btype、bsel找到螺栓的描述、材质和boltref(如果btype没有命中,bsel没有命中,取默认值);
  11. 将Table里拿到的螺栓信息回归到bltp,一个bltp就是一个螺栓;
  12. 在Table里根据:直径、btype、bsel找到配件的描述、材质和boltref(如果btype没有命中,bsel没有命中,直接写配件btype名称);
  13. 根据boltref找到配件的名称(在Bitems里)和尺寸(在Bitlength里);
  14. 配件占据的长度=Bitlength里所有配件长度(厚度)的值求和+附加长度值Xtralength=length2;
  15. 螺栓的总净长度=length1+length2=validLength;
  16. 在根据螺栓的直径,在长度表(DTAB)里找到Blength属性;
  17. validLength向上圆整,在Blength的列表数字中找到最近的圆整长度,作为螺栓的最终长度RoundLength;
  18. 将螺栓主体和配件的所有信息组装到材料列表list;
  19. list合并同类项汇总,得到螺栓DataTable

3.验证策略

  1. 没有指定螺栓等级,给出提示,计算终止;
  2. 指定了螺栓等级但没有数据,给出提示,计算终止;
  3. 管段头部(的法兰面)没有连接任何元件,不计算螺栓;
  4. 可以判断一个元件的上下游是否缺少垫片,发现缺少,计算终止;
  5. 元件库CATE的BTSE和BLTP属性是否有缺失,如果缺失,给出提示,计算终止;
  6. 两个相连的法兰面螺栓参数是否一致,主要是指螺栓孔直径和螺栓孔个数。如果不一致,给出提示,计算终止;
  7. 对于上述判断5和6,如果对夹型元件与配对法兰的螺栓属性不一致,不判断对夹型元件螺栓点集参数,以法兰元件的螺栓参数继续计算(该策略其实是对不规范元件库的一种妥协,sample项目的元件库有很多仪表、控制阀甚至是法兰的螺栓参数设置都是空白,我觉得一般的工程公司做正式的项目还是应该把元件库属性要做完整,后面两个策略8和9意见相同);
  8. 对于上述判断5和6,如果仪表类元件与配对法兰的螺栓属性不一致,不判断仪表类元件螺栓点集参数,以法兰元件的螺栓参数继续计算;
  9. 对于上述判断5和6,如果特殊件类元件与配对法兰的螺栓属性不一致,不判断特殊件类元件螺栓点集参数,以法兰元件的螺栓参数继续计算;

4.测试结果

下表是对sample项目36个有螺栓的branch进行测试的记录,复查为ok就表示PipeLine出的螺栓材料跟PDMSISO图显示的材料完全一致,有两个不一致的地方我认为我的计算方式也有道理,下面会讲解。

5.测试结果证明截图

如果Branch分了多张sheet页,每一张我都截图,最后一张带上我的界面显示整个Branch的螺栓材料表,对部分Branch的计算策略和结果做了解释说明。

100-B-1-B1




100-B-1-B2

100-B-1-B3

100-B-2-B1


100-B-2-B2

150-A-3-B1

200-B-4-B1

250-B-5-B1

250-B-5-B2

250-B-5-B4

250-B-5-B5

80-B-7-B1

BRANCH 1 of PIPE 7 of ZONE /PIPES

我自己改了一个管线名称叫80-B-20-B1

这是PDMS显示的信息

我的日志信息

BRANCH 1 of PIPE 8 of ZONE /PIPES

和PIPE7相同

BRANCH 1 of PIPE 9 of ZONE /PIPES

和PIPE7相同

50-B-9-B1




有8个螺栓PDMS算成70mm长,我算的是80mm,PDMS出图的时候有螺栓报错信息

报错的就是这个FCV-114

M16对应的配件尺寸

M16螺栓长度表

所以螺栓的有效长度是18+1.5+18+13+2+2+13+3=70.5mm;
向下圆整是没意义的,根据长度表,超过70mm圆整后应该长度是80mm;
所以我算的螺栓长度是80mm。

50-B-9-B3

50-B-9-B5

150-B-6-B1

100-B-8-B1


100-B-8-B1


100-B-8-B2

40-B-10-B1

Sht1没有螺栓

PDMS算的是70mm,我算的是80mm,原因跟50-B-9-B1一样。

40-B-10-B3

80-A-11-B1


PDMS算出来的螺栓,我没有计算螺栓,因为两个法兰的螺栓参数不正确,螺栓BTSE下面竟然没有螺栓点BLTP,我觉得你要是个仪表件啥的就算了,法兰这样就太说不过去了,所以我判为不出材料,然后给出报错提示并能精确定位到出问题的元件,请你改好了元件库再来出材料。

100-C-13-B1

100-C-13-B2

100-C-12-B

100-C-12-B2

100-C-12-B3

100-C-12-B4


这里我不计螺栓的原因跟80-A-11-B1一样

100-C-12-B5

100-C-12-B6


没有连接任何元件,不计算螺栓。

100-C-12-B8

80-B-14-B1


提示了螺栓不匹配,这里的不匹配主要是检查螺栓孔直径和螺栓个数,为什么不匹配螺栓还是计算出了结果呢,因为根据上文提到的验证策略789,这里我觉得应该增加一个开关,让用户选择强规则检查还是弱规则检查,强规则的话则严格要求螺栓属性匹配,不匹配的话不出材料给错误提示,弱规则的话则按验证策略789计算。

150-A-57-B1

150-A-57-B2

6.元件库规范

要正确的出螺栓材料,元件库要有一定的命名规范和数据设置规则:

  1. 材料等级要设置螺栓等级
  2. 法兰连接面目前只判断了FBB和FBD(已实现,在0.9.3.3版本里已经改为用户自定义类型);
  3. 对夹元件的法兰面目前只判断了WFBB和WFBD(已实现,在0.9.3.3版本里已经改为用户自定义类型);
  4. 法兰面厚度属性字段的STEXT必须命名为FLANGE THICKNESS;
  5. 对夹元件长度属性字段的STEXT必须命名为LAY LENGTH或THICKNESS;
  6. CATE的属性字段TEXT必须命名为XXX-PAX或者PAX-XXX格式;
  7. 垫片厚度必须设置在params数组的顺序第二位;
  8. 螺栓点集(BTSE)下应设置螺栓点(BLTP);

7.异常信息捕捉和提示

7.1没有制定螺栓等级


7.2螺栓等级里没有螺栓元件类型


7.3元件没有设置螺栓参数


7.4其他错误示例

#[E10056]:Element[23584/10335]上游缺少垫片 2020/7/11 21:36:59
#[E10084]:Element[23584/5736]的螺栓点集(BTSE)中没有设置螺栓点(BLTP),请检查元件库 2020/7/11 23:12:34
#[E10081]:Element[23584/5736]螺栓属性有误,请检查元件库CATE的BTSE和BLTP属性 2020/7/11 23:12:34
#[E10082]:Element[23584/5764]与Element[23584/5766]的螺栓参数设置不匹配! 2020/7/11 23:34:05
#[I10051]:Branch[80-B-20-B1]头部(的法兰面)没有连接任何元件,不计算螺栓 2020/7/13 0:37:47
#[I10051]:Branch[80-B-20-B1]尾部(的法兰面)没有连接任何元件,不计算螺栓 2020/7/13 0:37:47

总结和规划

  1. 计算真是太复杂了,做完以后已经不想说话了,只想静静,不要问我静静是谁;
  2. 目前的计算还有很多判断依据是写死的,未来考虑改成可配置式,这样就便于灵活扩展,比如可以用户自定义参与计算和判断的法兰面形式(已实现,在0.9.3.3版本里已经改为用户自定义类型);
  3. 元件属性的命名规则是否做成可配置,我个人感觉意义不大,一个元件库按照标准的命名方式做就可以了,没必要五花八门地命名;

关于12.0.SP6版本的补充说明

  1. 7月20日发布0.8.5版,更新内容为同步更新到0.9.3;
  2. 12.0.SP6默认使用旧螺栓等级计算方法,请改为使用新螺栓等级计算方法,Pipeline只支持新螺栓等级计算方法;
  3. 需要注意一个细节:12.0.SP6与12.1.SP4在获取CATREF的属性param时的写法不同。
DbDouble[] catParams = catref.GetDbDoubleArray(DbAttributeInstance.PARA);//12.1.SP4写法string[] catParams = catref.GetAsStringArray(DbAttributeInstance.PARA);//12.0.SP6写法

PDMS二次开发(十)——螺栓材料统计功能重构开发介绍相关推荐

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,做项目经验之~【多用户关注共同的参数的统计功能】开发总结、再来个独立访客(Unique Visitor,简称UV)统计番外篇~整起

    实验室项目来了一个新需求:因为我们那个系统主要是人家用下位机把一些路面参数.空气湿度等参数测出来之后发送到我们阿里云服务器上的pg数据库中,然后我们对数据进行页面上的展示.然后公司那边说有个需求,就是 ...

  2. 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! .

    http://blog.csdn.net/xiaominghimi/article/details/6127578 http://www.androidegg.com/portal.php?mod=v ...

  3. 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! ....

    http://blog.csdn.net/xiaominghimi/article/details/6127578 http://www.androidegg.com/portal.php?mod=v ...

  4. 【安卓开发】简单记账app功能实现开发-期末大作业个人总结

    说在前面: 由于这一次的大作业涉及到的代码部分过于长,所以博客里不放相关代码: 工程&apk&记账app原型&素材资源链接:https://download.csdn.net/ ...

  5. 小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能...

    转载来源:编程小石头 我们在做小程序支付相关的开发时,总会遇到这些难题.小程序调用微信支付时,必须要有自己的服务器,有自己的备案域名,有自己的后台开发.这就导致我们做小程序支付时的成本很大. 本节就来 ...

  6. PDMS二次开发(三)——小试牛刀之材料DOTD属性批处理工具

    需求 DOTD工具是用于设置材料的汇料开关属性,属性有两个Mtocomponent和Mtotube,当Mtocomponent设置为DOTD时,该材料在抽取材料表的时候会被忽略,当Mtotube设置为 ...

  7. 专题开发十二:JEECG微云快速开发平台-基础用户权限

      专题开发十二:JEECG微云快速开发平台-基础用户权限 11.3.4自定义按钮权限 Jeecg中,目前按钮权限设置,是通过对平台自己封装的按钮标签(<t:dgFunOpt等)进行设置.而在开 ...

  8. 累斗累---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十)

    有时候,我感觉事情就好像大螃蟹,总是一串一串的. 我刚聊过新项目如何收集需求,就有人跟我提老产品升级需求的管理. 有人说:老师,我看了许多IT项目管理的书籍,也讲到需求管理.但他们是需求调研.需求分析 ...

  9. 质量管理14条原则、敏捷开发宣言、敏捷开发十二原则

    一.质量管理大师爱德华·戴明博士经典的质量管理14条原则 1. Create constancy of purpose toward improvement of product and servic ...

  10. PDMS二次开发产品Naki.CI(二):升级到1.0.1版本

    目录 1.概述 2.升级功能介绍 3.GPART元件特性 4.GPART应用场景 5.下载地址 1.概述 1.0.1版本重点增加了GPART功能,GPART功能是CI的一个重要功能,使得编码的应用得到 ...

最新文章

  1. 程序员因重复记录日志撑爆ELK被辞退!
  2. 自动驾驶汽车视觉- 图像特征提取与匹配技术
  3. 定义一个有参宏SWAP(t,x,y),用以交换t类型的两个参数的值
  4. 比CRUD多一点儿(三):UPDATE、DELETE语句
  5. Linux(三)——mysql服务
  6. linux下时间同步的两种方法分享
  7. VS2015配置内核WDK7600环境,32位下.
  8. ACL'22 | 使用对比学习增强多标签文本分类中的k近邻机制
  9. Java_Arrays.fill() 初始化二维数组一个指定值
  10. 亲测可用:推荐一个免费下载外文文献的网站
  11. android设置屏幕高度和宽度设置,android获取屏幕高度和宽度的实现方法
  12. 高效建站(华为云服务器建站IIS篇)
  13. CentOS8配置yum/dnf镜像源
  14. 在训练的时候loss增大怎么办
  15. Hadoop是什么,主要有哪些优势?
  16. keyshot渲染图文教程_keyshot基础图文教程,手把手教你用keyshot制作动画效果
  17. 给小白程序员的建议!
  18. 中国大茴香行业利润及销量增长情况报告(新版)2021-2026年
  19. 全局地址池和接口地址池
  20. 免费超大量邮件发送服务Amazon SES和Mailgun提供SMTP和API支持

热门文章

  1. HTML注册页面代码实现(案例)
  2. Echart报错: Map china not exists. You can download map file on
  3. 继承ActionSupport
  4. python学习笔记爬虫——爬取网络表情包
  5. 10分钟入门HTML
  6. 各种组织的marker gene
  7. Cadence下载安装
  8. 耶鲁博弈论 第2节 学会换位思考
  9. html loading 页面加载中(百分比)
  10. JavaScript基础