曹智梅
(廣東松山職業(yè)技術學院,廣東 韶關 512126)
桿件在軸向拉伸或壓縮時會產生內力,這個內力也叫軸力[1]。軸力大小會對桿件的強度產生直接的影響,是工程計算中一個重要的參數(shù)。軸力的計算通常采用截面法,為了保證無論取桿件左邊作為研究對象還是右邊作為研究對象,計算出的數(shù)值均為同一個值,需要在計算前假設軸力為拉力,如果計算出的軸力為負值,則表示桿件在此截面處所受的軸力為壓力。為了更好地展現(xiàn)軸力的正負及相對大小關系,將各段的軸力沿軸線方向表達在一張圖中,這張圖也叫軸力圖。實際工作中,由于不能正確理解軸力的正負規(guī)定,或者截面法的運用不熟練,常常導致軸力計算不正確,軸力圖繪制錯誤,從而影響桿件的強度校核結果。手工繪制軸力圖的正確與否完全取決于工程技術人員的水平,容易出現(xiàn)失誤,且時間成本高,若能借助編程軟件來實現(xiàn)軸力圖的自動生成,則可以將工程技術人員從繁瑣的計算中解脫出來,提高工作效率。
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 桿件軸力圖
橫截面面積的大小對軸力圖是無影響的,所以在繪制軸力圖時,可以假設整個桿件的橫截面尺寸是不變的,即用一個等直桿來替代。
要想實現(xiàn)軸力圖的自動生成,就需要考慮桿件的各種受力情況,并針對一般受力狀態(tài)進行分析,找出軸力圖繪制過程中的變量,并將這些變量用函數(shù)關系式來表達,在繪圖命令中使用這些變量作為參數(shù),繪制成所需要的軸力圖[3-4]。
桿件外力的受力截面是軸力圖上的分段點,所以桿件受到的外力越多,分的段數(shù)就越多。相鄰的2個外力受力點間為1段,而對于不同的桿件,有可能只分成1段,也可能是2段,甚至多段,桿件的段數(shù)分得更多,計算及控制的量也會越多。在考慮桿件實際情況時,外力通常不會多于6個,如圖2所示的桿件受力圖中,在A、C、D、E、H、B這6個橫截面均受外力作用,所以在后面的研究中,主要以6個外力作用的5段桿來展示,至于受更多外力的桿件,建議讀者參照自行開發(fā)。
圖2 桿件受力圖
具體計算時,各段的長短對軸力計算不產生影響,所以可以假設桿件均勻分成5段。在對具體桿件進行分析時,可能有的截面并沒有受到外力的影響,所以每一個截面均需要設置按鍵來取消外力。
桿件上外力的大小和方向是計算軸力的依據(jù)。當截面上存在外力時,需要設置桿件外力的方向,方向只有2個,即向左還是向右。在圖2所示的桿件受力圖中,桿件受到FA、FC、FD、FE、FH、FB這6個外力作用,外力的方向可以進行更改,根據(jù)真實桿件受力時力的個數(shù)和方向進行設置。
所有橫截面外力的大小由文本框輸入,文本框只能輸入數(shù)字、負號和小數(shù)點。如果某一截面對應的文本框輸入帶負號的力時,表示此截面的實際受力方向與當前顯示方向相反。
軸力的計算需要分段進行,設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]。
為了保證無論外力的方向是向右還是向左,計算公式都正確,特引入符號系數(shù),當力的方向向左時,符號系數(shù)為-1,當力的方向向右時,符號系數(shù)為1。這樣就可以解決無論力的方向是向左還是向右,軸力的計算均正確。假設A、C、D、E、H、B這6個受力截面符號系數(shù)分別為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窗口中的坐標是一個已知數(shù),設為O(X0,Y0)。A1點的X坐標與O點相同,Y坐標表示為AC段的軸力a,由于VB繪圖是以緹作為坐標單位,而緹的單位數(shù)值很小,為了更好地觀察軸力圖的輪廓線,將a放大k倍(根據(jù)實際情況,可以取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坐標為已知數(shù),設C截面的X坐標為XC,同理也可以求出其余10個點的坐標,如C1的坐標為(XC,Y0-k*a),C2的坐標為(XC,Y0-k*b),通過VB中的直線命令將這12個點依次連接起來就是我們所需要的軸力圖輪廓線。
同一個軸力圖上,各段的軸力輪廓線水平高度位置只需要用相對大小關系表達即可。所以當軸力過小時,可以在圖示上將軸力圖的水平輪廓線位置高度比例放大;當軸力過大時,又可以將軸力圖的水平輪廓線高度位置比例縮小,這樣保證不管計算的軸力大小如何,軸力圖的顯示既美觀又能全部展示。
軸力圖上需要顯示軸力的數(shù)值,數(shù)值的顯示分為正和負2種,正的數(shù)值在水平輪廓線的上方,負的數(shù)值在水平輪廓線的下方。數(shù)值的位置也隨著水平輪廓線的位置而變化,保證距離在水平輪廓線上方或下方一個固定的位置。
如果桿件相鄰的2段或多段的軸力數(shù)值相同,只保留其中一個數(shù)值顯示,可以考慮保留桿件靠中部的數(shù)值[6]。
外力的單位一般只有N和kN兩種,將單位作為選擇項,由操作者自行選擇,在輸入外力大小的文本框中不輸入單位,這樣單位就不參與運算,保證輸入的簡潔,簡化計算過程。
當軸力≠0時,軸力圖上需要正負圓圈符號,軸力圖上正方向的軸力區(qū)域出現(xiàn)“+”符號,軸力圖上負方向的軸力區(qū)域,出現(xiàn)“-”符號,可以用到1個圓的繪制命令和2條直線的繪制命令來實現(xiàn)。正向圓圈符號只比負向圓圈符號多了一條垂直線,所以可以用到條件判斷語句,當軸力>0時,才繪制垂直線,否則只繪制1個圓和1條水平線。
圓圈符號的大小沒有確切規(guī)定,圓圈符號的圓心位置可以設置為該段軸力圖靠中部位置,當軸力=0時,此段不顯示圓圈符號。相鄰2段軸力符號相同時,只顯示其中一段的圓圈符號。
軸力圖上的剖面線是由多條等距垂直線構成,桿件同一段中繪制的剖面線長度相同,取合適的間距,將桿件沿軸線長度進行等分,然后對X軸上的每一個等分點作軸力圖水平輪廓線的垂直線,這些垂直線就構成了剖面線。
VB作為一種編程軟件,可以很好地實現(xiàn)各種計算、條件判斷、循環(huán)和跳轉,為軸力圖的自動生成提供了技術支持。用VB軟件來實現(xiàn)軸力圖自動生成,需要認真分析軸力圖中的變量,并將繪圖中可能遇到的條件編譯為一條條的語言,形成清晰邏輯鏈路和技術路線。
在編制程序過程中,首先要設置好外力的大小和方向,接著需要計算出各段的軸力,將軸力表達為外力的函數(shù),再利用VB軟件中的繪制直線命令完成軸力圖輪廓線的繪制,并根據(jù)實際情況顯示出軸力的數(shù)值和軸力的正負圓圈符號,最后繪制軸力圖上的剖面線,完成繪制軸力圖的全部工作。
在編程時,對計算出的軸力的原值保持不變,將其賦值給軸力的新值,計算軸力新值絕對值的最大值,并以Max來表示。為了避免軸力過大超出屏幕或軸力過小圖形無法看清的情況,需要根據(jù)Max的不同取值區(qū)間來改變軸力圖輪廓線的實際位置。
當外力修改后,為了避免上一個軸力圖對下一個軸力圖的影響,需要設置“清除屏幕”按鈕將軸力圖取消。
軸力圖自動生成算法流程圖如圖4所示[7]。
軸力圖自動生成系統(tǒng)界面如圖5所示,整個界面中左側為受力情況,中間部分為軸力圖的繪圖區(qū)域,右側為各段軸力值顯示區(qū)域。最下部分設置“外力平衡檢測”“計算各段軸力”“繪制軸力圖”“清除屏幕”“完成”等5個按鍵,界面干凈整潔。默認情況下只在桿件的AB兩個端點受力,數(shù)值為10,單位為N。是一個拉桿的受力狀態(tài)[8-9]。
圖4 軸力圖自動生成算法流程圖
圖5 AB桿軸力圖自動生成系統(tǒng)界面
由于VB中沒有現(xiàn)成的箭頭顯示,編程時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
桿件上外力的大小由文本框輸入,文本框只能輸入數(shù)字、負號和小數(shù)點。如果文本框輸入帶負號的力時,表示力的實際方向與當前顯示方向相反[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
計算外力是否平衡時,引入符號系數(shù),用變量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 "桿件受力不平衡,請重新輸入各截面的外力!"
根據(jù)上述變量分析,得到了軸力的計算公式,其中用變量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,再對軸力新值進行數(shù)學處理。如果軸力新值太大的,則需要比例縮小,如果軸力新值太小,則需要比例放大。編寫的程序如下:
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
軸力圖上需要顯示軸力的數(shù)值可以用Label的Caption來實現(xiàn),每一段新建一個正方向的Label和一個負方向的Label,當軸力≥0時,正方向的Label的Caption顯示,反之,負方向的Label的Caption顯示,并將選擇的單位顯示在圖上。AC段的軸力數(shù)值及力的單位顯示程序如下,其他段的程序類似。
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所示,F(xiàn)A、FC、FD、FE、FH、FB所對應文本框中依次輸入30、0、20、0、20、10,力的單位選擇kN時,單擊“繪制軸力圖”按鈕,繪制出的軸力圖如圖6所示;單擊“計算各段軸力”按鈕,界面右部列出了各軸力值,可以驗證繪制的軸力圖和計算的各段軸力均正確。換用不同的數(shù)值來測試,其結果的正確性也得到了驗證。
圖6 軸力圖自動生成
本程序中,為了研究方便:1)只將桿件分成了均勻的5段,數(shù)值為定數(shù),有一定的局限性,也忽略了桿件各段的實際長度,在接下來的研究中,可以將桿件的分段數(shù)和各段的長度設置成變量;2)忽略了桿件橫截面面積的變化,下一步在桿件軸力計算之后,可以將桿件的各橫截面面積、材料許用應力等參數(shù)引入,實現(xiàn)自動計算各段所受的正應力,自動判斷危險截面,同時自動完成桿件強度條件的校核。
本文在研究軸力圖繪制的基礎上,應用VB軟件實現(xiàn)了軸力圖的自動生成,主要研究工作如下。
1)克服了VB軟件中沒有箭頭的難題,將外力的顯示用VB中Label的Caption向左和向右符號“←”和“→”來展示,直觀、方便、簡潔。
2)將外力方向的影響以符號系數(shù)引入,推導出各段軸力的計算公式,并準確判斷桿件外力是否平衡。
3)解決了軸力過大和過小的情況下,軸力圖繪制不完整不清晰的問題,保證了VB程序界面的整潔性和完整性。
4)將軸力圖上的輪廓線、剖面線、軸力數(shù)值位置、軸力正負圓圈符號都設置成了外力的變量,實現(xiàn)了軸力圖自動生成,自動調節(jié)。
5)應用VB軟件的圖形繪制、條件判斷等語句,實現(xiàn)了軸力圖的自動生成,并完成了多種情況下軸力圖正確性、可靠性的驗證,極大地方便了工程技術人員,有很高的應用價值和推廣價值。