引言
卡套管和铜管备料的时候,现场备料师傅通常会根据工程图计算出管道下料长度,首次弯管时在图纸上注明对应规格管道的下料长度,方便批量下料及后续弯管作业,可不可以在绘图的时候使用软件自动获取管件的下料长度呢?答案是肯定的。
使用SolidWorks绘制管道模型,该软件有官方插件Routing,但是本文不着重讲如何使用这款插件,我从事过的单位没有使用Routing,一般用扫描管道的方式,接下来我就介绍如何用VBA获取管道的下料长度。
准备
首先我们要在车间里收集数据,管道弯后扣除,比如直径20mm、厚度1.5mm的铜管弯90°后的扣除量,这里类似半径的折弯扣除。为了让大家直观的了解,我用下图说明扣除的问题,假设管道折弯后一条边是30mm一条边是60mm,折弯角度是90度,圆角半径是5mm,如果该管道的折弯扣除是2mm那么折弯前的长度就是88mm,就是说原材料88mm的管子,如果要完成90°,圆角是R5的折弯它的扣除就是2mm,下图就是30+60-88=2mm。需要注意的是和管材的厚度也是有关系的,不同的厚度扣除也不一样。
折弯扣除示意图
有了折弯的表就有了扣除的依据,通过在脚本里设定公式就可以得到原材料管子的长度了。
原理
此方法是通过读取R角来算出原材料的长度。
需要说明的是,这里只读取R角,因为我工作过的单位,R角大小和管材的规格有着对应关系,这里只需获取R角就能得到相对应的扣除量。如果没有对应的话就要获取扫描草图的长度,同时识别管材厚度、直径,再更具折弯的R角具体大小来获取对应的扣除。
举例
STEP 1
获取"3D草图"("3DSketch")特征。
For Each fa In swFeatm
If InStr(fa.Name, "3D草图") <> 0 Or InStr(fa.Name, "3DSketch") <> 0 Then
boolstatus = swModel.Extension.SelectByID2(fa.Name, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Exit For
End If
Next
STEP 2
获取圆角的半径,计算圆弧数量,有一次圆角就要计一次扣除,最后把长度累加起来再剪掉扣除,就得到了管材原材料的长度。
Set swFeat = swSelMgr.GetSelectedObject5(1)
swModel.ClearSelection2 True
If Not swFeat Is Nothing Then
Set swSketch = swFeat.GetSpecificFeature2
vSketchSeg = swSketch.GetSketchSegments
For i = 0 To UBound(vSketchSeg)
Set swSketchSeg = vSketchSeg(i)
' Ignore construction lines
If swSketchSeg.ConstructionGeometry = False Then
' Ignore text
If swSketchLINE = swSketchSeg.GetType Then
nLength = nLength + swSketchSeg.GetLength
End If
If swSketchARC = swSketchSeg.GetType Then
ARLength = swSketchSeg.GetLength
Set swSkArc = swSketchSeg
Radius = Round(swSkArc.GetRadius, 3) '获取弯弧半径
RD = ARLength / Radius
If Round(RD, 6) = Round(0.5 * PI, 6) Then
nARC = nARC + 1 '计数弯弧数量
ElseIf Round(RD, 6) = Round(PI, 6) Then
nARC = nARC + 2
ARLength = 0.5 * ARLength
End If
Select Case Radius
Case 0.025 ’半径25mm的对应扣除10mm
CutLine = 0.01
Case 0.03, 0.035 ’半径30mm和35mm的对应扣除15mm
CutLine = 0.015
Case 0.04 ’半径40mm的对应扣除20mm
CutLine = 0.02
Case 0.05 ’半径50mm的对应扣除25mm
CutLine = 0.025
Case 0.06 ’半径60mm的对应扣除30mm
CutLine = 0.03
Case Else ’半径60mm以外的对应扣除40mm
CutLine = 0.04
End Select
End If
End If
Next i
End If
nLength = nLength + (4 * ARLength / PI - CutLine) * nARC ’计算原材料长度
SETP3
换算到毫米。
If InStr(Str(Round(nLength * 1000, 1)), ".") <> 0 Then
If Right(Str(Round(nLength * 1000, 1)), 1) = "5" Then
If (CLng(Mid(StrReverse(Str(Round(nLength * 1000, 1))), 3, 1)) Mod 2 <> 1) Then: linelong = Round(nLength * 1000, 0) + 1
End If
End If
STEP4
写入到零件属性。
bRet = swModel.DeleteCustomInfo2("", "下料")
blnretval = swModel.AddCustomInfo3("", "下料", swCustomInfoText, linelong)
结语
以上就是获取长度的方法,第二步种有不少草图相关的API大家可以在bing上查找,有机会后面再逐个介绍。