参数化栈板设计及装载模拟

Chinese forum
Post Reply

你是哪类工程师?

机械
2
50%
电子
0
No votes
化工
0
No votes
生物
0
No votes
建筑
1
25%
软件
0
No votes
其他
1
25%
 
Total votes: 4

QiZhenHua
Posts: 1
Joined: Sat Jul 18, 2020 3:46 am

参数化栈板设计及装载模拟

Post by QiZhenHua » Sat Jul 18, 2020 5:24 am

选择栈板是因为其结构足够简单单一, 仅仅只是一些长方体在空间的不同组合,此次选用的是下面这种结构的:

Image
主要思路是按给定的尺寸在指定的位置画出长方体
首先定义一个函数,在给定的位置(x,y,z)画出给定尺寸(长,宽,高)的长方体,另外给它指定一个名字:

Code: Select all

def makebox(doc,boxname,length,width,height,x,y,z):
    box = doc.addObject("Part::Box",boxname)
    doc.recompute()
    box.Length,box.Width,box.Height = length, width, height
    box.Placement.Base = FreeCAD.Vector(x,y,z)
然后在指定的平面(这里是不同Z值的XY平面)做循环:

Code: Select all

def makepallet(name,x,y,z,dx,xn,dy,yn,dz):
    if xn < 1 : i=1
    else:		i=xn
    while i>0:
        if yn < 1 :	j=1
        else:		j=yn
        while j>0:
            makebox(name+str(i)+str(j),x,y,z,dx*(i-1),dy*(j-1),dz)
            j -= 1
        i -= 1 
接下来是设定参数, 这里使用了9个基本参数,考虑到后期GUI,提前定义其标题,并给出缺省值:

Code: Select all

list_title=["Pallet Length(PX)",
            "Pallet Width(PY)",
            "Pallet Height",
            "Broad Thickness",
            "Support Length",
            "Support Width",
            "Panel Width",
            "Quantity of Panel",
            "Quantity of Bridge",
            "Quantity of Bottom"]
list_data=[1200,1000,120,12,90,90,100,5,3,3 ]
L_pallet        = list_data[0]
W_pallet 	= list_data[1]
H_pallet	= list_data[2]
T_wood		= list_data[3]
L_support 	= list_data[4]
W_support 	= list_data[5]
W_panel 	= list_data[6]
n_panel 	= list_data[7]
n_bridge 	= list_data[8]
n_bottom 	= list_data[9] 
由上面的参数设定各块板子的尺寸及位置参数,涉及到一些简单的数字计算:

Code: Select all

list_bottom =[n_bottom,L_pallet,W_support,T_wood]
list_support=[int(n_bottom*n_bridge),L_support,
                W_support,H_pallet-3*T_wood]
list_bridge =[n_bridge,L_support,W_pallet,T_wood]
list_panel  =[n_panel,L_pallet,W_panel,T_wood]
接下来就可以调用前面定义的函数画板子了,:

Code: Select all

mylist=list_bottom    
makepallet("bottom",mylist[1],mylist[2],mylist[3],
           0,0,(W_pallet-mylist[2])/(n_bottom-1),
           n_bottom,0)
mylist=list_support
makepallet("support",mylist[1],mylist[2],mylist[3],
           (L_pallet-mylist[1])/(n_bridge-1),
           n_bridge,
           (W_pallet-mylist[2])/(n_bottom-1),
           n_bottom,
           list_bottom[3])
mylist=list_bridge
makepallet("bridge",mylist[1],mylist[2],mylist[3],
           (L_pallet-mylist[1])/(n_bridge-1),
           n_bridge,
           0,0,
           list_bottom[3]+list_support[3])
mylist=list_panel
makepallet("panel",mylist[1],mylist[2],mylist[3],
           0,0,
           (W_pallet-mylist[2])/(n_panel-1) ,
           n_panel,
           list_bottom[3]+list_support[3]+list_bridge[3])
如果仅作为简单的测试是没有必要写得上面那么复杂的,主要是后来整合到类及加入GUI后变量倒来倒去搞成这个样子的。
再下来就是GUI的部分,一些简单的label,textinput,button组合,可以看附件代码
装箱模拟部分和上面类似,无非就是在栈板上堆长方体
还可以加些其他的小功能, 如交换箱子的长宽,可以通过按钮实现免去模拟时再次手工输入。

声明:
本文及附件随便用,引用时请注明出处。
实际用于生产时请用FEA校核强度,任何由本文引起的安全问题概不负责!
pallet.FCMacro
(8.46 KiB) Downloaded 120 times
Last edited by QiZhenHua on Sun Aug 02, 2020 7:05 am, edited 1 time in total.

paullee
Posts: 2661
Joined: Wed May 04, 2016 3:58 pm

Re: 参数化栈板设计及装载模拟

Post by paullee » Sun Jul 19, 2020 1:08 am

看來不錯 :D
感謝 !

孙小飞
Posts: 1
Joined: Thu Jul 23, 2020 6:16 am

Re: 参数化栈板设计及装载模拟

Post by 孙小飞 » Thu Jul 23, 2020 6:25 am

QiZhenHua wrote:
Sat Jul 18, 2020 5:24 am
选择栈板是因为其结构足够简单单一, 仅仅只是一些长方体在空间的不同组合,此次选用的是下面这种结构的:
Image
主要思路是按给定的尺寸在指定的位置画出长方体
首先定义一个函数,在给定的位置(x,y,z)画出给定尺寸(长,宽,高)的长方体,另外给它指定一个名字:

Code: Select all

def makebox(doc,boxname,length,width,height,x,y,z):
    box = doc.addObject("Part::Box",boxname)
    doc.recompute()
    box.Length,box.Width,box.Height = length, width, height
    box.Placement.Base = FreeCAD.Vector(x,y,z)
然后在指定的平面(这里是不同Z值的XY平面)做循环:

Code: Select all

def makepallet(name,x,y,z,dx,xn,dy,yn,dz):
    if xn < 1 : i=1
    else:		i=xn
    while i>0:
        if yn < 1 :	j=1
        else:		j=yn
        while j>0:
            makebox(name+str(i)+str(j),x,y,z,dx*(i-1),dy*(j-1),dz)
            j -= 1
        i -= 1 
接下来是设定参数, 这里使用了9个基本参数,考虑到后期GUI,提前定义其标题,并给出缺省值:

Code: Select all

list_title=["Pallet Length(PX)",
            "Pallet Width(PY)",
            "Pallet Height",
            "Broad Thickness",
            "Support Length",
            "Support Width",
            "Panel Width",
            "Quantity of Panel",
            "Quantity of Bridge",
            "Quantity of Bottom"]
list_data=[1200,1000,120,12,90,90,100,5,3,3 ]
L_pallet        = list_data[0]
W_pallet 	= list_data[1]
H_pallet	= list_data[2]
T_wood		= list_data[3]
L_support 	= list_data[4]
W_support 	= list_data[5]
W_panel 	= list_data[6]
n_panel 	= list_data[7]
n_bridge 	= list_data[8]
n_bottom 	= list_data[9] 
由上面的参数设定各块板子的尺寸及位置参数,涉及到一些简单的数字计算:

Code: Select all

list_bottom =[n_bottom,L_pallet,W_support,T_wood]
list_support=[int(n_bottom*n_bridge),L_support,
                W_support,H_pallet-3*T_wood]
list_bridge =[n_bridge,L_support,W_pallet,T_wood]
list_panel  =[n_panel,L_pallet,W_panel,T_wood]
接下来就可以调用前面定义的函数画板子了,:

Code: Select all

mylist=list_bottom    
makepallet("bottom",mylist[1],mylist[2],mylist[3],
           0,0,(W_pallet-mylist[2])/(n_bottom-1),
           n_bottom,0)
mylist=list_support
makepallet("support",mylist[1],mylist[2],mylist[3],
           (L_pallet-mylist[1])/(n_bridge-1),
           n_bridge,
           (W_pallet-mylist[2])/(n_bottom-1),
           n_bottom,
           list_bottom[3])
mylist=list_bridge
makepallet("bridge",mylist[1],mylist[2],mylist[3],
           (L_pallet-mylist[1])/(n_bridge-1),
           n_bridge,
           0,0,
           list_bottom[3]+list_support[3])
mylist=list_panel
makepallet("panel",mylist[1],mylist[2],mylist[3],
           0,0,
           (W_pallet-mylist[2])/(n_panel-1) ,
           n_panel,
           list_bottom[3]+list_support[3]+list_bridge[3])
如果仅作为简单的测试是没有必要写得上面那么复杂的,主要是后来整合到类及加入GUI后变量倒来倒去搞成这个样子的。
再下来就是GUI的部分,一些简单的label,textinput,button组合,可以看附件代码
装箱模拟部分和上面类似,无非就是在栈板上堆长方体
还可以加些其他的小功能, 如交换箱子的长宽,可以通过按钮实现免去模拟时再次手工输入。
本文及附件随便用,引用时请注明出处。
pallet.FCMacro
请问可以做成单独的工作台吗?

felixlee868
Posts: 60
Joined: Wed Jul 03, 2019 8:15 am

Re: 参数化栈板设计及装载模拟

Post by felixlee868 » Wed Jul 29, 2020 3:26 pm

这类与安全相关的设计,最好还是需要经过 FEA 模块的力学模型计算,因为使用不同的材料,对设定的负载,最终产品的安全系数会不同。这种未经力学计算的设计,如果在项目中使用,搞不好会出人命的。

johnwang
Posts: 445
Joined: Sun Jan 27, 2019 12:41 am

Re: 参数化栈板设计及装载模拟

Post by johnwang » Mon Aug 03, 2020 6:18 am

felixlee868 wrote:
Wed Jul 29, 2020 3:26 pm
这类与安全相关的设计,最好还是需要经过 FEA 模块的力学模型计算,因为使用不同的材料,对设定的负载,最终产品的安全系数会不同。这种未经力学计算的设计,如果在项目中使用,搞不好会出人命的。
可以用FreeCAD的fea工具台算一下,看看能装多少吨货。

帮忙贴一下参数设置窗口和最后3D模型. 真棒!
pallet.jpg
pallet.jpg (48.11 KiB) Viewed 1780 times
pallet and goods.jpg
pallet and goods.jpg (31.47 KiB) Viewed 1780 times

paullee
Posts: 2661
Joined: Wed May 04, 2016 3:58 pm

Re: 参数化栈板设计及装载模拟

Post by paullee » Mon Aug 03, 2020 4:57 pm

Wow! 看來很好 !

felixlee868
Posts: 60
Joined: Wed Jul 03, 2019 8:15 am

Re: 参数化栈板设计及装载模拟

Post by felixlee868 » Fri Aug 07, 2020 11:18 am

能否将材料参数提交一下? 贴几张FEM处理后的材料应力,冯氏应力的图?供大家学习?

paullee
Posts: 2661
Joined: Wed May 04, 2016 3:58 pm

Re: 参数化栈板设计及装载模拟

Post by paullee » Fri Aug 07, 2020 4:08 pm

felixlee868 wrote:
Fri Aug 07, 2020 11:18 am
能否将材料参数提交一下? 贴几张FEM处理后的材料应力,冯氏应力的图?供大家学习?
johnwang wrote: Ping

Post Reply