王虎強(qiáng),李旭明,吳強(qiáng),張振潮,朱博文
(1.洛陽(yáng)軸承研究所有限公司,河南 洛陽(yáng) 471039;2.洛陽(yáng)鐵路信息工程學(xué)校,河南 洛陽(yáng) 471900)
隨著現(xiàn)代工業(yè)的不斷進(jìn)步,軸承的類(lèi)型大幅增加,主機(jī)廠家對(duì)軸承在不同工況下的性能要求也在提高,因此,軸承試驗(yàn)的重要性越來(lái)越得到重視。
軸承試驗(yàn)機(jī)中數(shù)據(jù)采集軟件的性能差異直接影響測(cè)試數(shù)據(jù)的準(zhǔn)確性?,F(xiàn)代數(shù)據(jù)測(cè)試技術(shù)大多通過(guò)在前端數(shù)據(jù)傳感器與計(jì)算機(jī)之間增加接口電路實(shí)現(xiàn),數(shù)據(jù)采樣頻率及精度由兩者共同決定?,F(xiàn)有的軸承試驗(yàn)機(jī)數(shù)據(jù)采集系統(tǒng)較多采用以下2種方式進(jìn)行數(shù)據(jù)通信:1)上位機(jī)與伺服控制系統(tǒng)串口通信,受傳輸距離限制,不便于系統(tǒng)的遠(yuǎn)程控制與拓展;2)通過(guò)控制系統(tǒng)廠家自帶的標(biāo)準(zhǔn)接口程序,但需要授權(quán)的軟件與硬件設(shè)備,費(fèi)用較高。
針對(duì)上述問(wèn)題,采用以下設(shè)計(jì)方案改進(jìn)軸承試驗(yàn)機(jī)的數(shù)據(jù)采集系統(tǒng):上位機(jī)基于LabWindows/CVI開(kāi)發(fā)數(shù)據(jù)采集系統(tǒng),對(duì)試驗(yàn)數(shù)據(jù)進(jìn)行采集、存儲(chǔ)及分析;下位機(jī)采用S7-200 PLC 控制驅(qū)動(dòng)系統(tǒng)并記錄軸承位置,同時(shí)讀取伺服驅(qū)動(dòng)器數(shù)據(jù)并進(jìn)行存儲(chǔ);上位機(jī)與下位機(jī)之間通過(guò)網(wǎng)口進(jìn)行通信,通信基于TCP/IP協(xié)議,采用LIBNODAVE開(kāi)源驅(qū)動(dòng)庫(kù),無(wú)需在工控機(jī)部署任何第三方軟件,僅需要一根網(wǎng)線即可通信,開(kāi)發(fā)、維護(hù)難度較低,且在通信速率與可擴(kuò)展性等方面有較大提升。
LabWindows/CVI 是以ANSIC為核心的開(kāi)發(fā)平臺(tái)[1],其將前端儀器硬件的數(shù)據(jù)采集處理和測(cè)量控制與功能強(qiáng)大、兼容性好的C語(yǔ)言高效結(jié)合在一起,可提供強(qiáng)大的函數(shù)庫(kù)功能,兼容的開(kāi)發(fā)環(huán)境,直觀的函數(shù)面板,為原有了解C語(yǔ)言的開(kāi)發(fā)設(shè)計(jì)人員提供了一個(gè)很好的開(kāi)發(fā)環(huán)境[2]。
在LabWindows/CVI開(kāi)發(fā)環(huán)境中,可以通過(guò)已有的庫(kù)函數(shù)實(shí)現(xiàn)軟件的開(kāi)發(fā)編輯、鏈接、編譯。在設(shè)計(jì)測(cè)試軟件時(shí),可調(diào)用外部已編譯好的動(dòng)態(tài)鏈接庫(kù)(DLL)、驅(qū)動(dòng)程序、靜態(tài)庫(kù)等。因此,嘗試通過(guò)LabWindows/CVI平臺(tái)開(kāi)發(fā)數(shù)據(jù)采集和儀器控制的應(yīng)用程序,充分利用其提供的函數(shù)庫(kù)完成數(shù)據(jù)的采集、分析和顯示。
軸承試驗(yàn)機(jī)數(shù)據(jù)采集系統(tǒng)的拓?fù)浣Y(jié)構(gòu)設(shè)計(jì)如圖1所示。
圖1 數(shù)據(jù)采集系統(tǒng)拓?fù)浣Y(jié)構(gòu)圖Fig.1 Topology diagram of data acquisition system
下位機(jī)系統(tǒng)采用的伺服電動(dòng)機(jī)自帶速度反饋,可通過(guò)PLC實(shí)現(xiàn)調(diào)速和速度監(jiān)控,保證長(zhǎng)時(shí)間的運(yùn)轉(zhuǎn)和控制精度,并可同時(shí)實(shí)現(xiàn)電動(dòng)機(jī)電流的實(shí)時(shí)監(jiān)測(cè),當(dāng)被試軸承摩擦力矩出現(xiàn)異常波動(dòng),會(huì)引起電流的變化,設(shè)備自動(dòng)進(jìn)行報(bào)警或停止運(yùn)行。
電氣部分主要包括驅(qū)動(dòng)控制系統(tǒng)、摩擦力矩測(cè)量系統(tǒng)、振動(dòng)測(cè)量系統(tǒng)和溫度測(cè)量系統(tǒng)。驅(qū)動(dòng)控制系統(tǒng)由交流伺服電動(dòng)機(jī)及其驅(qū)動(dòng)器組成,實(shí)現(xiàn)被測(cè)軸承的驅(qū)動(dòng)及其他控制功能。摩擦力矩、振動(dòng)、溫度測(cè)量系統(tǒng)由相應(yīng)的傳感器、變送器及A/D轉(zhuǎn)換電路組成,實(shí)現(xiàn)試驗(yàn)機(jī)的實(shí)時(shí)數(shù)據(jù)采集功能。溫度、振動(dòng)與扭矩等物理信號(hào)由PLC數(shù)據(jù)采集模塊實(shí)現(xiàn)采集,通過(guò)A/D轉(zhuǎn)換為PLC可讀的數(shù)字量并存儲(chǔ)到指定的存儲(chǔ)地址。PLC控制器通過(guò)讀取指定存儲(chǔ)位置的數(shù)據(jù),對(duì)伺服驅(qū)動(dòng)器進(jìn)行調(diào)節(jié)控制。
上位機(jī)系統(tǒng)的數(shù)據(jù)讀取與寫(xiě)入基于TCP/IP協(xié)議與PLC進(jìn)行通信,直接調(diào)用相關(guān)的接口函數(shù)讀取或?qū)懭胫付ù鎯?chǔ)模塊的數(shù)據(jù),即完成系統(tǒng)的數(shù)據(jù)采集與控制。
西門(mén)子生產(chǎn)的S7系列PLC具有體積小、速度快、標(biāo)準(zhǔn)化等優(yōu)點(diǎn),但與上位機(jī)的通信相對(duì)較弱[3-5]。常見(jiàn)的西門(mén)子上位機(jī)形式有:西門(mén)子 HMI、西門(mén)子 PRODAVE、第三方組態(tài)軟件和OPC Server;通信接口形式為 MPI,PROFIBUS 或工業(yè)以太網(wǎng)[6-7]。這些數(shù)據(jù)通信結(jié)構(gòu)方式都需要特定授權(quán)的軟件和硬件設(shè)備,整體成本較高。LIBNODAVE具有比PRODAVE 更強(qiáng)大的接口程序, 其具有的接口函數(shù)、支持的硬件以及連接方式都比 PRODAVE 多,且其具有免費(fèi)、配置簡(jiǎn)單等優(yōu)點(diǎn)。
試驗(yàn)機(jī)監(jiān)控系統(tǒng)中需導(dǎo)入libnodave.lib,libnodave.lib及nodavesimple.h文件,并在程序主文件中定義增加define BCCWIN 語(yǔ)句。nodavesimple.h文件為庫(kù)函數(shù)頭文件,主要包含所定義的通信接口函數(shù)等。
1)char ip[200]=″10.0.0.24″;
定義PLC地址。
2)_daveOSserialType fds;
定義結(jié)構(gòu)體。
3)daveInterface * di;
定義結(jié)構(gòu)體指針。
4)daveConnection * dc.
定義結(jié)構(gòu)體指針。
1)fds.rfd= openSocket( 102,ip);
fds.wfd=fds.rfd;
打開(kāi)指定IP地址的PLC控制器通信接口,并將返回的句柄存儲(chǔ)到結(jié)構(gòu)體_daveOSserialType 的變量中。
2)di=daveNewInterface(fds,″IF1″,0,122,2);
將結(jié)構(gòu)體指針傳遞給新生成的結(jié)構(gòu)體,PLC的硬件連接信息可通過(guò)daveNewConnection 傳遞,實(shí)現(xiàn)功能函數(shù)調(diào)用的不相關(guān)性。
3)res=daveInitAdapter(di);
對(duì)設(shè)備適配器進(jìn)行初始化。
4)dc=daveNewConnection(di,2,0,1);
res=daveConnectPLC(dc);
與PLC進(jìn)行連接。
在程序調(diào)用結(jié)束后,需要將PLC控制器釋放,防止程序重新啟動(dòng)后出現(xiàn)錯(cuò)誤。
1)res=daveDisConnectPLC(dc);
關(guān)閉PLC控制器連接。
2)res=daveDisconnectAdapter(di);
關(guān)閉PLC設(shè)備適配器。
3)res=closeSocket(ph);
關(guān)閉對(duì)應(yīng)的設(shè)備通信端口。
3.5.1 數(shù)據(jù)寫(xiě)入
1)daveWriteBytes(daveConnection * dc,int area, int DB, int start, int len, void * buffer);
該命令用于數(shù)據(jù)寫(xiě)入,表示向PLC中寫(xiě)入len字節(jié);Area表示數(shù)據(jù)是否要寫(xiě)入FLAG,DATA BLOCKS,INPUTS或OUTPUTS等;DB表示所使用數(shù)據(jù)塊的位置;start為確定第1個(gè)字節(jié); buffer是指向要寫(xiě)入數(shù)據(jù)的緩沖區(qū)。當(dāng)Area為其他區(qū)域類(lèi)型時(shí)設(shè)置為0,在S7-200 SMART中會(huì)將整個(gè)V區(qū)默認(rèn)為數(shù)據(jù)塊DB1。
2)daveWriteManyBytes(daveConnection * dc,int area, int DB, int start, int len, void * buffer);
對(duì)于要寫(xiě)入多個(gè)連續(xù)性的數(shù)據(jù),可以調(diào)用該函數(shù)進(jìn)行一次性處理。
3)daveWriteBits(daveConnection * dc,int area, int DB, int start, int len, void * buffer);
與daveWriteBytes函數(shù)功能類(lèi)似,表示要向PLC寫(xiě)入一位的數(shù)據(jù)。
3.5.2 數(shù)據(jù)讀取
1)daveReadBytes(daveConnection * dc, int area, int DB, int start, int len, void * buffer);
該命令用于數(shù)據(jù)讀取,表示從PLC中讀取 len字節(jié);Area表示數(shù)據(jù)是否來(lái)自FLAG,DATA BLOCKS,INPUTS或OUTPUTS等;DB表示要使用的數(shù)據(jù)塊位置,其他區(qū)域類(lèi)型設(shè)置為0;start表示要讀取第1個(gè)字節(jié)位置;緩沖區(qū)buffer指向調(diào)用程序提供的內(nèi)存塊指針,如果指針不為空,結(jié)果數(shù)據(jù)將被復(fù)制到其中。
2)daveReadManyBytes(daveConnection * dc, int area, int DBnum, int start, int len, void * buffer);
從PLC讀取len字節(jié)。start確定第1個(gè)字節(jié)。與daveReadBytes()不同的是,這個(gè)函數(shù)可以讀取對(duì)于單個(gè)事務(wù)來(lái)說(shuō)太長(zhǎng)的塊。要實(shí)現(xiàn)這一點(diǎn),需要將數(shù)據(jù)與多個(gè)后續(xù)的對(duì)CPU的讀請(qǐng)求一起獲取。
3)daveReadBits(daveConnection * dc, int area, int DB, int start, int len, void * buffer);
從PLC中讀取一位的數(shù)據(jù)。
數(shù)據(jù)庫(kù)用于存儲(chǔ)采集軟件所采集的試驗(yàn)數(shù)據(jù),以便用于后期的設(shè)計(jì)分析。利用結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured Query Language,SQL)是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言,可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各種交互式操作,如對(duì)數(shù)據(jù)的查詢(xún)、導(dǎo)入、刪除等。在本項(xiàng)目中,采用的MariaDB數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL的一個(gè)分支,基于LabWindows的版權(quán)限制,數(shù)據(jù)庫(kù)操作采用MariaDB原有的數(shù)據(jù)庫(kù)接口函數(shù)。
1)MYSQL conn;
定義數(shù)據(jù)庫(kù)連接。
2)MYSQL_RES *res;
定義數(shù)據(jù)結(jié)果集結(jié)構(gòu)體指針。
3)MYSQL_ROW row;
定義用于存儲(chǔ)數(shù)據(jù)行信息的結(jié)構(gòu)體常量。
1)mysql_library_init(0, NULL, NULL);
初始化MYSQL數(shù)據(jù)庫(kù)。
2)mysql_init(&conn);
初始化連接句柄。
3)mysql_real_connect(&conn, ″127.0.0.1″, ″root″, ″123456″, ″data″, 0, NULL, 0);
連接MYSQL數(shù)據(jù)庫(kù)服務(wù)器。
4)mysql_close(&conn);
關(guān)閉MYSQL服務(wù)器的連接。
5)mysql_library_end();
終止使用MYSQL庫(kù)。
1)mysql_real_query(&conn,sql,strlen(sql));
執(zhí)行查詢(xún)或者寫(xiě)入語(yǔ)句。
2) mysql_store_result(&conn);
獲得整個(gè)查詢(xún)語(yǔ)句的查詢(xún)結(jié)果。
3)mysql_num_rows(res);
獲取查詢(xún)結(jié)果條數(shù)。
4)mysql_num_fields(res);
獲取查詢(xún)結(jié)果行數(shù)。
5) mysql_fetch_row(res);
獲取查詢(xún)結(jié)果每一行的具體數(shù)據(jù)。
安裝有基于LabWindows/CVI開(kāi)發(fā)平臺(tái)所設(shè)計(jì)數(shù)據(jù)采集系統(tǒng)的某型試驗(yàn)機(jī)已進(jìn)行了7 000 h的軸承壽命試驗(yàn),模擬了軸承工況,考核了軸承在壽命期內(nèi)的振動(dòng)、摩擦力矩和溫升指標(biāo),并且一臺(tái)試驗(yàn)機(jī)可以精確試驗(yàn)和檢測(cè)多套軸承,操作簡(jiǎn)單。軸承試驗(yàn)過(guò)程中,試驗(yàn)數(shù)據(jù)、報(bào)警信息、試驗(yàn)狀態(tài)等數(shù)據(jù)及時(shí)準(zhǔn)確的上傳到數(shù)據(jù)服務(wù)器中。數(shù)據(jù)采集系統(tǒng)上位機(jī)控制界面如圖2所示,軸承運(yùn)行狀態(tài)的相關(guān)數(shù)據(jù)如圖3所示。在軸承試驗(yàn)過(guò)程中,該系統(tǒng)可實(shí)時(shí)的將軸承的試驗(yàn)狀態(tài)、報(bào)警信息、試驗(yàn)機(jī)運(yùn)行狀態(tài)等數(shù)據(jù)準(zhǔn)確的采集到數(shù)據(jù)服務(wù)器中。查詢(xún)客戶(hù)端可調(diào)用數(shù)據(jù)服務(wù)器接口程序,通過(guò)局域網(wǎng)或互聯(lián)網(wǎng)實(shí)時(shí)查看相關(guān)數(shù)據(jù)。
圖2 上位機(jī)的軟件界面Fig.2 Software interface of host computer
圖3 軸承運(yùn)行數(shù)據(jù)截圖Fig.3 Screenshot of bearing operation data