張現(xiàn)廣 江濤 洪揚(yáng) 朱燁 徐皓
摘要 為解決魚(yú)用疫苗注射器的設(shè)計(jì)與試制過(guò)程中需要多次改動(dòng)模型、重復(fù)勞動(dòng)較多的問(wèn)題,基于Solidworks二次開(kāi)發(fā)技術(shù)和數(shù)據(jù)庫(kù)技術(shù),采用C#編程語(yǔ)言開(kāi)發(fā)了一種氣動(dòng)魚(yú)用疫苗注射器底座的參數(shù)化設(shè)計(jì)系統(tǒng)。借助該系統(tǒng),設(shè)計(jì)人員可以通過(guò)僅選擇氣缸的缸徑、行程即可讀取數(shù)據(jù)庫(kù)中的氣缸參數(shù)信息,繼而快速構(gòu)建注射器底座的模型,極大提升了設(shè)計(jì)效率。此外,該系統(tǒng)結(jié)合數(shù)據(jù)庫(kù)技術(shù),實(shí)現(xiàn)了對(duì)大量氣缸安裝尺寸數(shù)據(jù)的有效管理。
關(guān)鍵詞 氣動(dòng)魚(yú)用疫苗注射器;Solidworks二次開(kāi)發(fā);數(shù)據(jù)庫(kù)技術(shù);參數(shù)化設(shè)計(jì)
中圖分類號(hào) TP311.52文獻(xiàn)標(biāo)識(shí)碼 A
文章編號(hào) 0517-6611(2020)22-0209-04
doi:10.3969/j.issn.0517-6611.2020.22.056
Parametric Design of Fish Vaccine Syringe Base Based on Secondary Development of Soildworks
ZHANG Xian-guang, JIANG Tao, HONG Yang et al (Institute of Fishery Machinery and Instruments,Chinese Academy of Fishery Sciences,Shanghai 200092)
Abstract In order to solve the problems of many times of model changes and repeated labor in the design and trail production process of fish vaccine syringes, this paper used C# programming language to develop a parametric design system for a pneumatic fish vaccine syringe base,based on Solidworks secondary development technology and database technology. With this system, designers can read the parameter information of cylinders in the database by simply selecting the cylinder bore and stroke of the cylinder, and then quickly build a model of the syringe base, which has greatly improved the design efficiency.In addition, the system combined with database technology has achieved effective management of a large number of cylinder installation dimension data.
Key words Pneumatic fish vaccine syringe;Solidworks secondary development;Database technology;Parametric design
基金項(xiàng)目 國(guó)家大宗淡水魚(yú)產(chǎn)業(yè)技術(shù)體系項(xiàng)目(CARS-45-20)。
作者簡(jiǎn)介 張現(xiàn)廣(1994—),男,山東費(fèi)縣人,研究實(shí)習(xí)員,碩士,從事漁業(yè)裝備技術(shù)研究。
收稿日期 2020-04-12;修回日期 2020-05-08
注射疫苗是魚(yú)類養(yǎng)殖過(guò)程中重要的魚(yú)病防控手段,目前國(guó)內(nèi)大多采用手工注射方式,勞動(dòng)強(qiáng)度大且人力成本高,魚(yú)用疫苗應(yīng)用受到一定程度的制約[1]。為解決上述問(wèn)題,中國(guó)水產(chǎn)科學(xué)研究院漁業(yè)機(jī)械儀器研究所的科研團(tuán)隊(duì)針對(duì)草魚(yú)幼苗的疫苗注射設(shè)計(jì)了一套魚(yú)用疫苗自動(dòng)化注射裝備[2]。其中,該裝備采用一種基于氣動(dòng)驅(qū)動(dòng)的疫苗注射器(圖1)。
滑臺(tái)氣缸和自由安裝氣缸通過(guò)螺釘安裝在注射器底座上。滑臺(tái)氣缸的作用是推動(dòng)整個(gè)注射器的移動(dòng),以實(shí)現(xiàn)注射針頭扎入魚(yú)體;自由安裝氣缸的作用是推動(dòng)注射器的活塞,以實(shí)現(xiàn)疫苗藥水注入魚(yú)體。
在實(shí)際安裝調(diào)試過(guò)程中,對(duì)注射器移動(dòng)行程的需求以及注射藥量的需求往往會(huì)發(fā)生變化,需要更換滑臺(tái)氣缸和自由安裝氣缸的選型。然而,不同型號(hào)的滑臺(tái)氣缸和自由安裝氣缸具有不同的安裝尺寸,因此需要對(duì)注射器底座的相關(guān)尺寸參數(shù)進(jìn)行修改。不同尺寸參數(shù)的注射器底座結(jié)構(gòu)相同,但可供選擇的氣缸型號(hào)很多(2種氣缸的不同型號(hào)排列組合更多),且不同型號(hào)氣缸的安裝尺寸參數(shù)復(fù)雜。因此,如果每換一種氣缸的型號(hào),就人工修改相關(guān)尺寸數(shù)據(jù),這不僅會(huì)增加設(shè)計(jì)人員的勞動(dòng)量,而且會(huì)降低設(shè)計(jì)效率。
目前,參數(shù)化產(chǎn)品設(shè)計(jì)思想在產(chǎn)品的生產(chǎn)設(shè)計(jì)和制造過(guò)程中得到了廣泛應(yīng)用,大大提高了產(chǎn)品的設(shè)計(jì)質(zhì)量和效率[3]。為解決上述問(wèn)題,筆者基于Solidworks二次開(kāi)發(fā)技術(shù)和數(shù)據(jù)庫(kù)技術(shù),以Visual Studio 2019 Community為開(kāi)發(fā)工具,以C#為編程語(yǔ)言,采用尺寸驅(qū)動(dòng)的方法,針對(duì)氣動(dòng)注射器的底座設(shè)計(jì)了一個(gè)參數(shù)化設(shè)計(jì)系統(tǒng)。
1 參數(shù)化設(shè)計(jì)系統(tǒng)總體概述
1.1 參數(shù)化設(shè)計(jì)系統(tǒng)的總體構(gòu)思
如圖2所示,參數(shù)化設(shè)計(jì)系統(tǒng)的主要思想如下:結(jié)合各種型號(hào)滑臺(tái)氣缸和自由安裝氣缸的安裝尺寸圖紙,將影響氣缸安裝尺寸的參數(shù)儲(chǔ)存到數(shù)據(jù)庫(kù)中;在Solidworks三維建模軟件中建立注射器底座的參數(shù)化模板;利用Solidworks二次開(kāi)發(fā)API對(duì)Solidworks三維建模軟件進(jìn)行二次開(kāi)發(fā),將注射器底座的參數(shù)化模板關(guān)鍵尺寸參數(shù)進(jìn)行控制;構(gòu)建人機(jī)交互界面,在該界面中構(gòu)建可供設(shè)計(jì)人員選擇的氣缸缸徑與行程等參數(shù)。程序根據(jù)設(shè)計(jì)人員所選的缸徑與行程,在數(shù)據(jù)庫(kù)中查詢與之對(duì)應(yīng)的氣缸安裝尺寸數(shù)據(jù),并利用查詢到的數(shù)據(jù)修改注射器底座參數(shù)化模板的相關(guān)尺寸參數(shù),繼而在Solidworks三維建模軟件中快速構(gòu)建出新的注射器底座模型。
1.2 參數(shù)化設(shè)計(jì)系統(tǒng)的形式
基于Solidworks二次開(kāi)發(fā)的應(yīng)用程序的形式有2種:基于COM技術(shù)的AddIn插件程序形式和基于OLE技術(shù)的獨(dú)立可執(zhí)行程序exe形式。其中,Addin插件以“.dll”動(dòng)態(tài)鏈接庫(kù)的形式集成到Solidworks主程序中[4],與Solidworks運(yùn)行在同一個(gè)進(jìn)程中;exe形式的獨(dú)立可執(zhí)行程序運(yùn)行于Solidworks主程序之外,需要通過(guò)API對(duì)Solidworks進(jìn)行跨進(jìn)程調(diào)用, 該過(guò)程的實(shí)現(xiàn)方式參見(jiàn)文獻(xiàn)[5-6]。
AddIn插件的運(yùn)行速度不一定快于exe獨(dú)立可執(zhí)行程序,運(yùn)行效率取決于程序運(yùn)行的瓶頸[7]。但后者的穩(wěn)定性較好[6],考慮到程序運(yùn)行的穩(wěn)定性,該課題的開(kāi)發(fā)形式為可exe獨(dú)立可執(zhí)行程序形式。
1.3 參數(shù)化設(shè)計(jì)系統(tǒng)的人機(jī)交互界面
如圖3所示,在Visual Studio 2019 Community開(kāi)發(fā)環(huán)境中創(chuàng)建一個(gè)winform窗體,并在該窗體中加入菜單控件、容器控件、標(biāo)簽控件、下拉框控件、復(fù)選框控件、文本框控件、按鈕控件以及圖片框控件。用戶通過(guò)這些控件可以實(shí)現(xiàn)“打開(kāi)Solidworks”“加載模型模板”等功能。
在進(jìn)行參數(shù)化設(shè)計(jì)時(shí),設(shè)計(jì)人員通過(guò)選擇界面中的下拉框來(lái)選擇氣缸缸徑和行程以及作用形式等參數(shù)。程序?qū)⒏鶕?jù)設(shè)計(jì)人員所選的參數(shù),在數(shù)據(jù)庫(kù)中查詢與之對(duì)應(yīng)的氣缸安裝尺寸數(shù)據(jù),即可快速生成新的注射器底座模型。
2 基于SQL Server2014的氣缸安裝尺寸數(shù)據(jù)庫(kù)設(shè)計(jì)
2.1 氣缸安裝尺寸分析 結(jié)合圖1可知,滑臺(tái)氣缸和自由安裝氣缸通過(guò)螺紋連接安裝在注射器的底座上。在滑臺(tái)氣缸安裝尺寸示意圖(圖4a)中,X1、X2、X3、Y2代表通孔的位置,D1代表通孔直徑。在如圖4b所示的自由安裝氣缸安裝尺寸示意圖中,X4、X5、Y3 代表通孔的位置,Y4、D2 代表通孔直徑。H代表氣缸桿在初始位置的伸出長(zhǎng)度。為方便對(duì)針管進(jìn)行調(diào)節(jié),氣缸桿在初始位置與氣缸安裝底座上的針管限位肩保持4 mm的間隙。
圖4中Y1和Y4代表氣缸的寬度,從美觀及結(jié)構(gòu)穩(wěn)定性的角度看,底座的寬度應(yīng)當(dāng)與最大的氣缸寬度值相等。
氣缸的型號(hào)取決于氣缸的行程和缸徑。不同型號(hào)氣缸的上述尺寸是不同的。市場(chǎng)上的滑臺(tái)氣缸和自由安裝氣缸均是標(biāo)準(zhǔn)化和系列化的,不同廠家生產(chǎn)的同類型號(hào)氣缸的安裝尺寸是相同的[8]。因此,可結(jié)合各種型號(hào)滑臺(tái)氣缸和自由安裝氣缸的安裝尺寸圖紙,整理出氣缸行程以及氣缸缸徑與安裝尺寸的關(guān)系,并將其儲(chǔ)存到數(shù)據(jù)庫(kù)中。
2.2 氣缸安裝尺寸數(shù)據(jù)庫(kù)的設(shè)計(jì) 在SQL Server 2014數(shù)據(jù)庫(kù)中建立名為“Injector”的數(shù)據(jù)庫(kù),并在該數(shù)據(jù)庫(kù)中建立名為“FreeMountCylinder”和“SlideCylinder”的數(shù)據(jù)表,分別用于儲(chǔ)存固定氣缸和滑臺(tái)氣缸的參數(shù)?;_(tái)氣缸參數(shù)的數(shù)據(jù)表及其E-R圖如圖5所示。
2.3 基于ADO.NET的數(shù)據(jù)庫(kù)通信
ADO.NET是一種數(shù)據(jù)庫(kù)訪問(wèn)架構(gòu),其搭建了應(yīng)用程序與數(shù)據(jù)源之間的通信橋梁[9]。ADO.NET包含2個(gè)重要對(duì)象:DataSet和DataAdapeter。DataSet對(duì)象相當(dāng)于一個(gè)計(jì)算機(jī)本地內(nèi)存中的數(shù)據(jù)容器,而DataAdapeter對(duì)象則充當(dāng)了數(shù)據(jù)源與DataSet對(duì)象之間的橋梁:SQL Server數(shù)據(jù)中的數(shù)據(jù)通過(guò)其填充到DataSet對(duì)象中,此時(shí)應(yīng)用程序與數(shù)據(jù)庫(kù)之間的通信便可以斷開(kāi),以減輕數(shù)據(jù)庫(kù)服務(wù)器的壓力。
以滑臺(tái)氣缸的參數(shù)化設(shè)計(jì)過(guò)程為例,描述參數(shù)化設(shè)計(jì)應(yīng)用程序與數(shù)據(jù)庫(kù)通信的機(jī)理。由于篇幅所限,對(duì)于一些眾所周知的功能代碼不再贅述,如數(shù)據(jù)庫(kù)的連接與關(guān)閉等。
當(dāng)用戶在參數(shù)化設(shè)計(jì)系統(tǒng)人機(jī)交互界面中的下拉框選取滑臺(tái)氣缸的缸徑與行程參數(shù),并點(diǎn)選確認(rèn)按鈕后,應(yīng)用程序開(kāi)始與數(shù)據(jù)庫(kù)建立連接,并通過(guò)SQL語(yǔ)句查詢用戶所選參數(shù)對(duì)應(yīng)的各安裝尺寸:
……
/*SQL查詢語(yǔ)句,表示在SlideCylinder數(shù)據(jù)表中查詢與用戶所選缸徑、行程相對(duì)應(yīng)的安裝參數(shù)*/
sql_str = "select L1,L2,L3,L7,P from SlideCylinder where GJ = + comboBox1.SelectedItem.ToString() + and XC= + comboBox2.SelectedItem.ToString() + ";
//聲明一個(gè)DataSet對(duì)象,并用DataAdapter對(duì)象進(jìn)行填充
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql_str, con);
da.Fill(ds, "SlideCylinder");
//將查詢到的安裝尺寸參數(shù)顯示到文本框中供用戶查看
textBox1.Text = ds.Tables[0].Rows[0]["L1"].ToString();
……
……
3 基于Solidworks二次開(kāi)發(fā)的注射器底座的關(guān)鍵尺寸參數(shù)控制
3.1 尺寸驅(qū)動(dòng)法
基于Solidworks二次開(kāi)發(fā)的參數(shù)化設(shè)計(jì)通常有2種方法[10]:一種方法是將從草圖繪制到生成特征這一整個(gè)建模過(guò)程完全用程序代碼實(shí)現(xiàn),從無(wú)到有生成模型。這種方法常被成為程序驅(qū)動(dòng)法,較為復(fù)雜,通常僅用于設(shè)計(jì)外形結(jié)構(gòu)不確定的零件;另一種方法是預(yù)先定義某個(gè)零件的模板[11],將影響零件結(jié)構(gòu)的尺寸參數(shù)定義為變量,通過(guò)對(duì)這些變量賦予不同的值,生成一系列參數(shù)不同、結(jié)構(gòu)相似的零件。這種方式稱為尺寸驅(qū)動(dòng)法,具有代碼簡(jiǎn)潔的特點(diǎn),適用于對(duì)參數(shù)不同而結(jié)構(gòu)相似的零件進(jìn)行快速建模。結(jié)合氣動(dòng)注射器的結(jié)構(gòu)特點(diǎn),該系統(tǒng)采用尺寸驅(qū)動(dòng)法進(jìn)行參數(shù)化設(shè)計(jì)。
3.2 注射器底座參數(shù)化模板 在Solidworks軟件三維建模軟件中預(yù)先構(gòu)建注射器底座的三維模型,如圖6所示。
Solidworks軟件構(gòu)建三維模型的基本步驟如下:先繪制草圖,再對(duì)草圖進(jìn)行拉伸、旋轉(zhuǎn)、切除等操作(對(duì)草圖進(jìn)行的上述操作稱之為“特征”)形成實(shí)體。因此,在參數(shù)化設(shè)計(jì)過(guò)程中,可以通過(guò)Solidworks API編輯草圖中的尺寸參數(shù)以及編輯特征的尺寸參數(shù)(比如編輯拉伸的距離)來(lái)修改實(shí)體的某些參數(shù)。
結(jié)合注射器底座參數(shù)化模板的建模過(guò)程,對(duì)于X1、X4、X5、Y2、Y3、L8、D1、D2通過(guò)編輯“草圖”中的尺寸進(jìn)行控制;對(duì)于尺寸X2和X3以及底座的寬度通過(guò)編輯“特征”中的尺寸進(jìn)行控制。
3.3 關(guān)鍵尺寸驅(qū)動(dòng)的實(shí)現(xiàn)
Solidworks二次開(kāi)發(fā)API提供了豐富的、可用于編輯模型草圖和特征的對(duì)象?!癕odelDoc2”類中的“ModelDoc2. Parameter(“String StringIn”).SystemValue”屬性代表了草圖或者特征中的一些參數(shù)。其中,String StringIn為字符串型變量,代表參數(shù)的名稱。比如,就注射器底座的Solidworks模型而言,ModelDoc2.Parameter("D1@草圖3").SystemValue代表“草圖3”中名稱為“D1”的參數(shù)值;ModelDoc2.Parameter("D1@陣列(線性)1").SystemValue代表 “陣列(線性)1” 特征中陣列的數(shù)量。
通過(guò)Solidworks API對(duì)模型尺寸進(jìn)行修改的基本流程如下:聲明并實(shí)例化一個(gè)“ModelDoc2”對(duì)象,通過(guò)改變“ModelDoc2”對(duì)象中的“ModelDoc2. Parameter("String StringIn").SystemValue”屬性,來(lái)修改底座參數(shù)化模板中的尺寸數(shù)據(jù)。其流程如圖7a所示。
以修改“草圖3”中的D1為例:
……
ModelDoc2 SwPartDoc = (ModelDoc2)swApp.ActiveDoc;
double x1;
……
/*用x1對(duì)草圖3中的D1進(jìn)行賦值。變量x1的單位為mm,但屬性“SystemValue”的單位為m,因此需要除以1 000進(jìn)行單位換算。
*/SwPartDoc.Parameter("D1@草圖3").SystemValue = x1 / 1000.0;
對(duì)于不同型號(hào)的滑臺(tái)氣缸,其基座上會(huì)有4個(gè)或者6個(gè)大小不等的安裝螺紋孔。注射器底座參數(shù)化模板上的滑臺(tái)氣缸安裝通孔數(shù)量應(yīng)當(dāng)與滑臺(tái)氣缸基座螺紋孔的數(shù)量對(duì)應(yīng)。該部分的處理方法如下:在設(shè)計(jì)注射器底座參數(shù)化模板的三維模型時(shí),預(yù)先采用“草圖”→“拉伸切除”的流程生成最左側(cè)的2個(gè)孔,隨后對(duì)拉伸切除形成的孔特征進(jìn)行“陣列”。陣列數(shù)為2或3。陣列特征中 “陣列數(shù)量”為2時(shí),則共有4個(gè)滑臺(tái)氣缸安裝通孔;“陣列數(shù)量”為3時(shí),則共有6個(gè)滑臺(tái)氣缸安裝通孔(陣列數(shù)量包含陣列源)。
在參數(shù)化設(shè)計(jì)時(shí),通過(guò)修改陣列的數(shù)量來(lái)控制安裝通孔的數(shù)量。其流程如圖7b所示,具體實(shí)現(xiàn)代碼如下:
ModelDoc2 SwPartDoc = (ModelDoc2)swApp.ActiveDoc;
double x2;
……
SwPartDoc.Parameter("D3@陣列(線性)1").SystemValue = x2/1000.0;//表示陣列間距,即滑臺(tái)氣缸安裝通孔橫向間距。
……
/* textBox3文本框顯示在數(shù)據(jù)庫(kù)中查詢到的X3的值,若不為空則陣列數(shù)為3,否則陣列數(shù)為2*/
……
if (!string.IsNullOrEmpty(textBox3.Text))
SwPartDoc.Parameter("D1@陣列(線性)1").SystemValue = 3;
else
SwPartDoc.Parameter("D1@陣列(線性)1").SystemValue = 2;
……
如“2.1”所述,底座的寬度取決于最寬的氣缸,即在數(shù)據(jù)庫(kù)中查詢到的Y1與Y4中的最大值。將此最大值賦值給特征“凸臺(tái)-拉伸1”的拉伸長(zhǎng)度,實(shí)現(xiàn)代碼如下:
……
double temp= Math.Max(y1,y4);
SwPartDoc.Parameter("D1@凸臺(tái)-拉伸1").SystemValue= temp/ 1000.0;
……
4 結(jié)論
為了減少魚(yú)用疫苗注射器設(shè)計(jì)過(guò)程中對(duì)氣缸安裝底座建模的工作量,提高設(shè)計(jì)質(zhì)量和效率,基于SolidWorks二次開(kāi)發(fā)API 和開(kāi)發(fā)數(shù)據(jù)庫(kù)技術(shù)開(kāi)發(fā)了魚(yú)用疫苗注射器底座的參數(shù)化設(shè)計(jì)系統(tǒng)。在進(jìn)行設(shè)計(jì)工作時(shí),設(shè)計(jì)人員只需要在系統(tǒng)的人機(jī)界面中選取氣缸的缸徑與行程參數(shù),便可以實(shí)現(xiàn)底座三維模型的快速建模,對(duì)于提高設(shè)計(jì)效率具有重要的意義。
參考文獻(xiàn)
[1] 王忠良,王蓓,魯義善,等.水產(chǎn)疫苗研究開(kāi)發(fā)現(xiàn)狀與趨勢(shì)分析[J].生物技術(shù)通報(bào),2015,31(6):55-59.
[2] 洪揚(yáng), 陳曉龍, 朱燁,等. 魚(yú)類疫苗自動(dòng)注射裝置設(shè)計(jì)與應(yīng)用[J].安徽農(nóng)業(yè)科學(xué),2019,47(17):220-221,237.
[3]丁剛.基于Solidworks的農(nóng)機(jī)底盤(pán)部件結(jié)構(gòu)參數(shù)化設(shè)計(jì)[J].農(nóng)機(jī)化研究,2019,41(11):264-268.
[4] 湯海霞.齒輪油泵參數(shù)化設(shè)計(jì)的研究與實(shí)現(xiàn)[J].無(wú)線互聯(lián)科技,2018,15(14):72-73,77.
[5] 劉金鳳,張現(xiàn)廣.基于Solidworks二次開(kāi)發(fā)的發(fā)動(dòng)機(jī)活塞參數(shù)化設(shè)計(jì)[J].汽車實(shí)用技術(shù),2019(16):62-65.
[6] 陳永康.SOLIDWORKS API二次開(kāi)發(fā)實(shí)例詳解:微視頻版[M].北京:機(jī)械工業(yè)出版社,2018:24-26.
[7] 江洪. SolidWorks二次開(kāi)發(fā)實(shí)例解析[M].北京:機(jī)械工業(yè)出版社,2004.
[8] 成大先. 機(jī)械設(shè)計(jì)手冊(cè):氣壓傳動(dòng)[M].北京:化學(xué)工業(yè)出版社,2004.
[9] 明日科技. C#從入門到精通[M].北京:清華大學(xué)出版社,2019:243-245.
[10] 張軍偉,王士軍,鄭曉龍.基于SolidWorks尺寸驅(qū)動(dòng)法二次開(kāi)發(fā)的滾珠絲杠三維建模[J].組合機(jī)床與自動(dòng)化加工技術(shù),2015(11):22-24.
[11] 夏衛(wèi)明,駱桂林,王義平,等.基于SolidWorks的液壓缸快速設(shè)計(jì)插件的二次開(kāi)發(fā)[J].鍛壓技術(shù),2011,36(2):131-136.