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

Chinese forum

Moderator: paullee

Forum rules
论坛规矩 / 論壇規矩 , 有用的资讯 / 有用的資訊
重要:寻求帮助之前,请先看看这里 /
重要:尋求幫助之前,請先看看這裡

另外,对论坛用户 友善!阅读FreeCAD 行为准则!
/ 另外,對論壇用戶 友善! 閱讀FreeCAD
行為準則
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 »

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

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 8335 times
Last edited by QiZhenHua on Sun Aug 02, 2020 7:05 am, edited 1 time in total.
paullee
Veteran
Posts: 5098
Joined: Wed May 04, 2016 3:58 pm

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

Post by paullee »

看來不錯 :D
感謝 !
孙小飞
Posts: 1
Joined: Thu Jul 23, 2020 6:16 am

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

Post by 孙小飞 »

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: 126
Joined: Wed Jul 03, 2019 8:15 am

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

Post by felixlee868 »

这类与安全相关的设计,最好还是需要经过 FEA 模块的力学模型计算,因为使用不同的材料,对设定的负载,最终产品的安全系数会不同。这种未经力学计算的设计,如果在项目中使用,搞不好会出人命的。
User avatar
johnwang
Veteran
Posts: 1345
Joined: Sun Jan 27, 2019 12:41 am

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

Post by johnwang »

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

帮忙贴一下参数设置窗口和最后3D模型. 真棒!
pallet.jpg
pallet.jpg (48.11 KiB) Viewed 164433 times
pallet and goods.jpg
pallet and goods.jpg (31.47 KiB) Viewed 164433 times
hfc series CAE workbenches for FreeCAD (hfcNastran95, hfcMystran, hfcFrame3DD, hfcSU2 and more)
paullee
Veteran
Posts: 5098
Joined: Wed May 04, 2016 3:58 pm

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

Post by paullee »

Wow! 看來很好 !
felixlee868
Posts: 126
Joined: Wed Jul 03, 2019 8:15 am

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

Post by felixlee868 »

能否将材料参数提交一下? 贴几张FEM处理后的材料应力,冯氏应力的图?供大家学习?
paullee
Veteran
Posts: 5098
Joined: Wed May 04, 2016 3:58 pm

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

Post by paullee »

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