曹智梅
(广东松山职业技术学院,广东 韶关 512126)
杆件在轴向拉伸或压缩时会产生内力,这个内力也叫轴力[1]。轴力大小会对杆件的强度产生直接的影响,是工程计算中一个重要的参数。轴力的计算通常采用截面法,为了保证无论取杆件左边作为研究对象还是右边作为研究对象,计算出的数值均为同一个值,需要在计算前假设轴力为拉力,如果计算出的轴力为负值,则表示杆件在此截面处所受的轴力为压力。为了更好地展现轴力的正负及相对大小关系,将各段的轴力沿轴线方向表达在一张图中,这张图也叫轴力图。实际工作中,由于不能正确理解轴力的正负规定,或者截面法的运用不熟练,常常导致轴力计算不正确,轴力图绘制错误,从而影响杆件的强度校核结果。手工绘制轴力图的正确与否完全取决于工程技术人员的水平,容易出现失误,且时间成本高,若能借助编程软件来实现轴力图的自动生成,则可以将工程技术人员从繁琐的计算中解脱出来,提高工作效率。
VB软件是一种可视化的窗口编程软件,其操作简单,编译性好[2]。本文将VB的强大编译功能与绘制轴力图的逻辑思维相结合,编制一套轴力图自动生成软件,提高轴力图的生成效率和准确率,为工程技术人员提供便利。
杆件轴力的计算要采用截面法,截面法有截、取、代、平4个步骤。第1步为截,即用假想的横截面将杆件截开;第2步为取,即取其中一个部分作为研究对象(取左部分或右部分);第3步为代,即用一个力来替代移除部分对研究部分的作用,这个力要假设为拉力,这个拉力也就是要求的轴力,同时研究部分所受的外力要标识于杆件上;第4步为平,即以杆件取出部分为研究对象,在杆件轴向上列平衡方程,从而求解出此段杆的轴力,当求解的轴力为负值时,表示杆件所受的内力为压力,当求解的轴力为正值时,表示杆件所受的内力为拉力。值得注意的是,在计算轴力时,首先要将所有外力计算出来。在后面的分析中,要将所有外力作为已知量。
在轴力图的绘制中,首先应知道杆件所受的外力,当有某个未知外力时,需要利用平衡方程进行求解。然后将每一个受力点和杆件的2个端点均作为分段点,对杆件进行分段,接着利用截面法来计算每一段的轴力,取横坐标为杆件的轴线X,纵坐标为轴力的大小FN,将计算出来的各段轴力绘制在一张图上,当轴力为正时,绘制在X轴的上方,当轴力为负时,绘制在X轴的下方,当轴力为0时,绘制在X轴上。
当杆件AB只在轴的2个端点横截面上受FA和FB两个力,且两个力的大小均为10 N时,则用截面法可以求出整个杆件所受的轴力为拉力,且大小也为10 N,绘制的轴力图如图1所示。
图1 杆件轴力图
横截面面积的大小对轴力图是无影响的,所以在绘制轴力图时,可以假设整个杆件的横截面尺寸是不变的,即用一个等直杆来替代。
要想实现轴力图的自动生成,就需要考虑杆件的各种受力情况,并针对一般受力状态进行分析,找出轴力图绘制过程中的变量,并将这些变量用函数关系式来表达,在绘图命令中使用这些变量作为参数,绘制成所需要的轴力图[3-4]。
杆件外力的受力截面是轴力图上的分段点,所以杆件受到的外力越多,分的段数就越多。相邻的2个外力受力点间为1段,而对于不同的杆件,有可能只分成1段,也可能是2段,甚至多段,杆件的段数分得更多,计算及控制的量也会越多。在考虑杆件实际情况时,外力通常不会多于6个,如图2所示的杆件受力图中,在A、C、D、E、H、B这6个横截面均受外力作用,所以在后面的研究中,主要以6个外力作用的5段杆来展示,至于受更多外力的杆件,建议读者参照自行开发。
图2 杆件受力图
具体计算时,各段的长短对轴力计算不产生影响,所以可以假设杆件均匀分成5段。在对具体杆件进行分析时,可能有的截面并没有受到外力的影响,所以每一个截面均需要设置按键来取消外力。
杆件上外力的大小和方向是计算轴力的依据。当截面上存在外力时,需要设置杆件外力的方向,方向只有2个,即向左还是向右。在图2所示的杆件受力图中,杆件受到FA、FC、FD、FE、FH、FB这6个外力作用,外力的方向可以进行更改,根据真实杆件受力时力的个数和方向进行设置。
所有横截面外力的大小由文本框输入,文本框只能输入数字、负号和小数点。如果某一截面对应的文本框输入带负号的力时,表示此截面的实际受力方向与当前显示方向相反。
轴力的计算需要分段进行,设AC、CD、DE、EH、HB这5段的轴力分别为a、b、c、d、e,当杆件所受外力的方向如图2所示时,由截面法可知,AC段的轴力a等于横截面A处的外力FA,即a=FA;同理,CD段的轴力b=a-FC,DE段的轴力c=b-FD,EH段的轴力d=c-FE,HB段的轴力e=d-FH[5]。
为了保证无论外力的方向是向右还是向左,计算公式都正确,特引入符号系数,当力的方向向左时,符号系数为-1,当力的方向向右时,符号系数为1。这样就可以解决无论力的方向是向左还是向右,轴力的计算均正确。假设A、C、D、E、H、B这6个受力截面符号系数分别为afh、bfh、cfh、dfh、efh,ffh,则上述各段轴力可以求解,其计算公式如下:
a=-afh*FA
b=a-bfh*FC
c=b-cfh*FD
d=c-dfh*FE
e=d-efh*FH
轴力图上横坐标表示杆件的轴线,而纵坐标表示杆件各横截面的轴力大小(见图3)。绘制的轴力轮廓线有5条水平轮廓线(A1C1、C2D1、D2E1、E2H1、H2B1),还有6条垂直轮廓线(OA1、C1C2、D1D2、E1E2、H1H2、B1B2),这11条直线就有12个端点,以O点为生标原点,找出这12个点的坐标,就可以绘制出轴力图的轮廓线。
图3 轴力图轮廓线
坐标原点O在VB窗口中的坐标是一个已知数,设为O(X0,Y0)。A1点的X坐标与O点相同,Y坐标表示为AC段的轴力a,由于VB绘图是以缇作为坐标单位,而缇的单位数值很小,为了更好地观察轴力图的轮廓线,将a放大k倍(根据实际情况,可以取k=100),即A1点的坐标为(X0,Y0-k*a)。当a>0时,直线A1C1在X轴的上方;当a<0时,直线A1C1在X轴的下方;当a=0时,直线A1C1落在X轴上。
实际上C、D、E、H、B这5个截面的X坐标为已知数,设C截面的X坐标为XC,同理也可以求出其余10个点的坐标,如C1的坐标为(XC,Y0-k*a),C2的坐标为(XC,Y0-k*b),通过VB中的直线命令将这12个点依次连接起来就是我们所需要的轴力图轮廓线。
同一个轴力图上,各段的轴力轮廓线水平高度位置只需要用相对大小关系表达即可。所以当轴力过小时,可以在图示上将轴力图的水平轮廓线位置高度比例放大;当轴力过大时,又可以将轴力图的水平轮廓线高度位置比例缩小,这样保证不管计算的轴力大小如何,轴力图的显示既美观又能全部展示。
轴力图上需要显示轴力的数值,数值的显示分为正和负2种,正的数值在水平轮廓线的上方,负的数值在水平轮廓线的下方。数值的位置也随着水平轮廓线的位置而变化,保证距离在水平轮廓线上方或下方一个固定的位置。
如果杆件相邻的2段或多段的轴力数值相同,只保留其中一个数值显示,可以考虑保留杆件靠中部的数值[6]。
外力的单位一般只有N和kN两种,将单位作为选择项,由操作者自行选择,在输入外力大小的文本框中不输入单位,这样单位就不参与运算,保证输入的简洁,简化计算过程。
当轴力≠0时,轴力图上需要正负圆圈符号,轴力图上正方向的轴力区域出现“+”符号,轴力图上负方向的轴力区域,出现“-”符号,可以用到1个圆的绘制命令和2条直线的绘制命令来实现。正向圆圈符号只比负向圆圈符号多了一条垂直线,所以可以用到条件判断语句,当轴力>0时,才绘制垂直线,否则只绘制1个圆和1条水平线。
圆圈符号的大小没有确切规定,圆圈符号的圆心位置可以设置为该段轴力图靠中部位置,当轴力=0时,此段不显示圆圈符号。相邻2段轴力符号相同时,只显示其中一段的圆圈符号。
轴力图上的剖面线是由多条等距垂直线构成,杆件同一段中绘制的剖面线长度相同,取合适的间距,将杆件沿轴线长度进行等分,然后对X轴上的每一个等分点作轴力图水平轮廓线的垂直线,这些垂直线就构成了剖面线。
VB作为一种编程软件,可以很好地实现各种计算、条件判断、循环和跳转,为轴力图的自动生成提供了技术支持。用VB软件来实现轴力图自动生成,需要认真分析轴力图中的变量,并将绘图中可能遇到的条件编译为一条条的语言,形成清晰逻辑链路和技术路线。
在编制程序过程中,首先要设置好外力的大小和方向,接着需要计算出各段的轴力,将轴力表达为外力的函数,再利用VB软件中的绘制直线命令完成轴力图轮廓线的绘制,并根据实际情况显示出轴力的数值和轴力的正负圆圈符号,最后绘制轴力图上的剖面线,完成绘制轴力图的全部工作。
在编程时,对计算出的轴力的原值保持不变,将其赋值给轴力的新值,计算轴力新值绝对值的最大值,并以Max来表示。为了避免轴力过大超出屏幕或轴力过小图形无法看清的情况,需要根据Max的不同取值区间来改变轴力图轮廓线的实际位置。
当外力修改后,为了避免上一个轴力图对下一个轴力图的影响,需要设置“清除屏幕”按钮将轴力图取消。
轴力图自动生成算法流程图如图4所示[7]。
轴力图自动生成系统界面如图5所示,整个界面中左侧为受力情况,中间部分为轴力图的绘图区域,右侧为各段轴力值显示区域。最下部分设置“外力平衡检测”“计算各段轴力”“绘制轴力图”“清除屏幕”“完成”等5个按键,界面干净整洁。默认情况下只在杆件的AB两个端点受力,数值为10,单位为N。是一个拉杆的受力状态[8-9]。
图4 轴力图自动生成算法流程图
图5 AB杆轴力图自动生成系统界面
由于VB中没有现成的箭头显示,编程时6个截面中每个截面的力有2种可能(向右或向左),且2个力不能同时显示,采用单选项形式设置,12个力分别采用Label的Caption中“←”和“→”符号来展示。单击“A截面”按键,可以将A截面的外力取消,程序如下:
Private Sub Command1_Click()
Label37.Visible = True '显示字母A
Label4.Visible = False '不显示FA
Label22.Visible = False '不显示向左的箭头
Label17.Visible = False '不显示向右的箭头
Label37.ForeColor = vbBlack '显示字母A为黑色
Text1.Text = 0 '文本框1中输入0
Option1.Value = False '向左选项不选中
Option2.Value = False '向右选项不选中
End Sub
杆件上外力的大小由文本框输入,文本框只能输入数字、负号和小数点。如果文本框输入带负号的力时,表示力的实际方向与当前显示方向相反[10]。文本框设置的程序如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 46 And Not CBool(InStr(tetx1, ".")) Then Exit Sub
If KeyAscii = 45 And Not CBool(InStr(tetx1, "-")) Then Exit Sub
If KeyAscii = 8 Then Exit Sub
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub
计算外力是否平衡时,引入符号系数,用变量HL来计算所有外力的合力,如果合力不为0,则需要重新输入外力,程序编写如下:
hl = afh * Val(Text1.Text) + bfh * Val(Text2.Text) + cfh * Val(Text3.Text) + dfh * Val(Text4.Text) + efh * Val(Text5.Text) + ffh * Val(Text6.Text)
If hl <> 0 Then MsgBox "杆件受力不平衡,请重新输入各截面的外力!"
根据上述变量分析,得到了轴力的计算公式,其中用变量a、b、c、d、e来表示AC、CD、DE、EH、HB这5段的轴力,其AC段计算轴力的程序如下,其他段轴力如此类推。
If Label22.Visible = True Then
a = Val(Text1.Text)
afh = -1
Else
a = -Val(Text1.Text)
afh = 1
End If '计算AC段轴力
为了保证绘制的轴力图完整显示,需要先将计算的轴力分别赋予新值a1、b1、c1、d1、e1,再对轴力新值进行数学处理。如果轴力新值太大的,则需要比例缩小,如果轴力新值太小,则需要比例放大。编写的程序如下:
a1 = a ‘换行 b1 = b ‘换行 c1 = c ‘换行 d1 = d ‘换行 e1 = e ‘换行
If a = 0 And b = 0 And c = 0 And d = 0 And e = 0 Then GoTo CC '如果杆件不受力,则直接跳转到绘图的步骤
max = Abs(a1)
If max < Abs(b1) Then max = Abs(b1)
If max < Abs(c1) Then max = Abs(c1)
If max < Abs(d1) Then max = Abs(d1)
If max < Abs(e1) Then max = Abs(e1)
Do Until max < 10
a1 = a1 * 0.75
b1 = b1 * 0.75
c1 = c1 * 0.75
d1 = d1 * 0.75
e1 = e1 * 0.75
max = max * 0.75
Loop '当轴力新值较大时,缩小处理
Do Until max > 3
a1 = a1 * 2
b1 = b1 * 2
c1 = c1 * 2
d1 = d1 * 2
e1 = e1 * 2
max = max * 2
Loop '当轴力新值较小时,放大处理
本例中的坐标原点O的坐标为(4 920, 3 360),AC段水平轮廓线偏离X轴的位置用轴力的新值控制,即100 * a1,其绘制轴力图的11条轮廓线的程序如下:
CC: Line (4920, 3360)-(4920, 3360 - 100 * a1), vbRed '1绘制OA1垂直段
Line (4920, 3360 - 100 * a1)-(5520, 3360 - 100 * a1), vbRed '2绘制A1C1水平线
Line (5520, 3360 - 100 * a1)-(5520, 3360 - 100 * b1), vbRed '3绘制C1C2段垂直线
Line (5520, 3360 - 100 * b1)-(6120, 3360 - 100 * b1), vbRed ' 4绘制C2D1水平段
Line (6120, 3360 - 100 * b1)-(6120, 3360 - 100 * c1), vbRed ' 5绘制D1D2段垂直线
Line (6120, 3360 - 100 * c1)-(6720, 3360 - 100 * c1), vbRed ' 6绘制D2E1水平段
Line (6720, 3360 - 100 * c1)-(6720, 3360 - 100 * d1), vbRed ' 7绘制E1E2段垂直线
Line (6720, 3360 - 100 * d1)-(7320, 3360 - 100 * d1), vbRed ' 8绘制E2H1水平段
Line (7320, 3360 - 100 * d1)-(7320, 3360 - 100 * e1), vbRed ' 9绘制H1H2段垂直线
Line (7320, 3360 - 100 * e1)-(7920, 3360 - 100 * e1), vbRed ' 10绘制H2B1水平段
Line (7920, 3360 - 100 * e1)-(7920, 3360), vbRed '11绘制B1B2段垂直线
编程时,引入力的单位变量danwei,当选择的单位为N时,danwei就为N,当选择的单位为kN时,danwei就为kN,编写的程序如下:
If Option13.Value = True Then danwei = Option13.Caption Else danwei = Option14.Caption
轴力图上需要显示轴力的数值可以用Label的Caption来实现,每一段新建一个正方向的Label和一个负方向的Label,当轴力≥0时,正方向的Label的Caption显示,反之,负方向的Label的Caption显示,并将选择的单位显示在图上。AC段的轴力数值及力的单位显示程序如下,其他段的程序类似。
If a >= 0 Then
Label44.Caption = a & danwei
Label44.Top = 3360 - 100 * a1 - 300
Else
Label49.Caption = a & danwei
Label49.Top = 3360 - 100 * a1 + 200
End If
正号圆圈比负号圆圈只多了一条垂直线,2个可以写在同一个绘图程序中,AC段正负圆圈符号程序如下,其余段的程序类似。
If a * b < 0 Then
Circle (5220 - 75, (3360 - 50 * a1)), 70
Line (5220 - 75 - 60, (3360 - 50 * a1))-(5220 - 75 + 60, (3360 - 50 * a1))
If a > 0 Then
Line (5220 - 75, (3360 - 50 * a1 + 60))-(5220 - 75, (3360 - 50 * a1 - 60))
End If
End If 'AC轴力图正负圆圈符号显示
轴力图上的剖面线都是垂直线,只需要取好间距即可,本程序中取间距为150缇,AC段需绘制4条剖面线,程序如下,其余段的程序类似。
Line (4920 + 1 * 150, 3360)-(4920 + 1 *150, 3360 - 100 * a1), vbRed '1AC段剖面线1
Line (4920 + 2 * 150, 3360)-(4920 + 2 * 150, 3360 - 100 * a1), vbRed '1AC段剖面线2
Line (4920 + 3 * 150, 3360)-(4920 + 3 * 150, 3360 - 100 * a1), vbRed '1AC段剖面线3
Line (4920 + 4 * 150, 3360)-(4920 + 4 * 150, 3360 - 100 * a1), vbRed '1AC段剖面线4
当力的方向如图6所示,FA、FC、FD、FE、FH、FB所对应文本框中依次输入30、0、20、0、20、10,力的单位选择kN时,单击“绘制轴力图”按钮,绘制出的轴力图如图6所示;单击“计算各段轴力”按钮,界面右部列出了各轴力值,可以验证绘制的轴力图和计算的各段轴力均正确。换用不同的数值来测试,其结果的正确性也得到了验证。
图6 轴力图自动生成
本程序中,为了研究方便:1)只将杆件分成了均匀的5段,数值为定数,有一定的局限性,也忽略了杆件各段的实际长度,在接下来的研究中,可以将杆件的分段数和各段的长度设置成变量;2)忽略了杆件横截面面积的变化,下一步在杆件轴力计算之后,可以将杆件的各横截面面积、材料许用应力等参数引入,实现自动计算各段所受的正应力,自动判断危险截面,同时自动完成杆件强度条件的校核。
本文在研究轴力图绘制的基础上,应用VB软件实现了轴力图的自动生成,主要研究工作如下。
1)克服了VB软件中没有箭头的难题,将外力的显示用VB中Label的Caption向左和向右符号“←”和“→”来展示,直观、方便、简洁。
2)将外力方向的影响以符号系数引入,推导出各段轴力的计算公式,并准确判断杆件外力是否平衡。
3)解决了轴力过大和过小的情况下,轴力图绘制不完整不清晰的问题,保证了VB程序界面的整洁性和完整性。
4)将轴力图上的轮廓线、剖面线、轴力数值位置、轴力正负圆圈符号都设置成了外力的变量,实现了轴力图自动生成,自动调节。
5)应用VB软件的图形绘制、条件判断等语句,实现了轴力图的自动生成,并完成了多种情况下轴力图正确性、可靠性的验证,极大地方便了工程技术人员,有很高的应用价值和推广价值。