宣 翔,劉 悅
(1.中國電子科技集團公司第三十八研究所,安徽 合肥 230088;2.長鑫存儲技術有限公司,安徽 合肥 230601)
隨著現(xiàn)代雷達指標的不斷提升,雷達伺服系統(tǒng)朝著高精度、高響應方向不斷發(fā)展,伺服系統(tǒng)性能的提升不僅對伺服系統(tǒng)配套的電氣元件性能提出更高的要求,也對系統(tǒng)調(diào)試發(fā)起了更大的挑戰(zhàn)。傳統(tǒng)的雷達伺服調(diào)試由于缺乏人機交互界面,調(diào)試過程中更多依賴于工程人員的項目經(jīng)驗和對電氣元件的理解從而給出輸出變量,且被控元件相應的反饋信號只能依賴于工程人員通過控制軟件中的數(shù)據(jù)記錄分析以及通過示波器在通信端點完成曲線記錄。
基于傳統(tǒng)雷達伺服調(diào)試過程中操作復雜、變量給定模糊不清且狀態(tài)反饋顯示困難等狀況,本文設計開發(fā)的一種針對雷達伺服調(diào)試的系統(tǒng),通過控制器局域網(wǎng)絡(CAN)總線、串口通信等多種方式與外部元件進行信息交互,繪制實時動態(tài)曲線圖記錄電機轉(zhuǎn)速、電流等狀態(tài)信息,且在測試過程中實時編輯控制指令并發(fā)送。
用戶界面是否美觀以及易操作是衡量一個UI界面友好與否的重要標準,用戶界面部分作為本系統(tǒng)重要的組成部分,布局和設計均基于以上兩點完成。
QT平臺作為當今界面設計時常用的軟件平臺,其采用的C++編程語言作為內(nèi)核語言,設計人員在編程時可以實時進行效果仿真和調(diào)試。同時,該平臺包含多種實用的外部庫,設計人員通過庫的調(diào)用即可實現(xiàn)與計算機和驅(qū)動之間的互連,并實現(xiàn)向程序添加圖片、多媒體等功能,操作簡單。本系統(tǒng)基于QT平臺在界面開發(fā)時的以上優(yōu)勢,采用該平臺完成用戶界面的設計。本系統(tǒng)界面設計結(jié)構主要包括如圖 1所示的部分,主頁面下包括測試模式和實驗模式2種模式,測試模式主要包括用于顯示數(shù)字信號輸入輸出狀態(tài)的點燈模塊,曲線繪制模塊主要顯示如電流、電壓、速度等實時連續(xù)變化的變量用以記錄,而串口、CAN通信模塊則用于與外部元件實時通信,獲取對方狀態(tài)并下達相應指令。實驗模式下參數(shù)調(diào)整模塊用于改變用戶的自定義參數(shù),并通過指令下達模塊下達相應的指令。
信號與槽機制作為QT平臺的核心機制,它的本質(zhì)是一種用于對象之間通信的機制,當對象改變其狀態(tài)時,信號就由該對象發(fā)射出去,槽用于接收信號,并在收到信號后立即執(zhí)行相應的成員函數(shù),信號與槽取代了函數(shù)指針,使得通信程序的編寫變得更加簡潔明了。其中,信號與槽之間的關系可以描述為:多個信號可以連接到1個槽,1個信號可以連接到多個槽,圖2展示了信號與槽之間的關系。
圖2 信號與槽關系模型
QT中標準的信號與槽格式為:
connect(Object1,Signal1,Object2,Slot1);
本文設計了點燈模塊用于直觀地顯示如速度到達等數(shù)字變量,如條件滿足,則顯示為綠色,如條件不滿足顯示為紅色,或其他的一些警告性情況,呈紅黃色交替顯示。
QT平臺常采用QpushButton類按鈕用于變量狀態(tài)顯示,QpushButton本身為矩形,本文需要將其變?yōu)閳A形且顯示為特定的圖片,這里采用改變樣式表的方法,將需要顯示的圖片樣式添加到Button的樣式表中,并采用setStyleSheet函數(shù)進行設定,例如setStyleSheet(“QpushButton{border-image:url(:/new/prefix1/green.ico);}”);即將Button設置為綠色圓形按鈕圖片。為實現(xiàn)數(shù)字變量改變時按鈕顯示狀態(tài)隨之改變的功能,本文采用了changeButtonico()函數(shù),代碼如下:
void Button::changeButtonico()
{
if(speedIsOK)
ui->button_speed->setStyleSheet(“QpushButton{border-image:url(:/new/prefix1/green.ico);}”);
else
ui->button_speed->setStyleSheet(“QpushButton{border-image:url(:/new/prefix1/red.ico);}”);
為實現(xiàn)警告性情況按鈕狀態(tài)呈紅黃交替顯示,速度到達模塊報警,本文采用了QTimer類timeout函數(shù),通過信號與槽機制將QTimer計時器與用于圖片交替顯示的icoChange()函數(shù)相連,實現(xiàn)代碼如下:
connect(m_timer,SIGNAL(timeout()),this,SLOT(icoChange());
m_timer=new QTimer(this);m_timer->start(10);
在icoChange()函數(shù)中,采用了int m_count變量:
m_count+=1;
if(m_count%2)
ui->button_speed->setStyleSheet(“QpushButton{border-image:url(:/new/prefix1/red.ico);}”);
else
ui->button_speed->setStyleSheet(“QpushButton{border-image:url(:/new/prefix1/yellow.ico);}”);
if(m_count==100)
m_count=0;
通過整型變量隨時間計數(shù)器自加,并向2取余,實現(xiàn)交替改變,當m_count到達既定數(shù)值時需要置位0,函數(shù)循環(huán)調(diào)用,從而實現(xiàn)狀態(tài)的循環(huán)顯示。
QT中采用QPainter類繪制圖形,當控件重繪頻繁時,例如實時采集到變量數(shù)值變化并繪制成曲線圖時,由于屏幕高頻率刷新,從而引起屏幕閃爍,重回頻率越高,閃爍越明顯[1]。雙緩沖機制的原理是繪制控件時,首先將要繪制的內(nèi)容繪制在1個圖片中,再將圖片一次性繪制到控件上,通過這種方式,可以使圖片的擦寫過程在幕后進行,避免閃爍的效果,原理如圖3所示。本文數(shù)據(jù)采集后繪制的曲線圖使得屏幕刷新頻率較高,因此需要采用雙緩沖機制繪制圖形。
圖3 雙緩沖機制原理圖
代碼的實現(xiàn)主要通過refreshPixmap()函數(shù),首先將當前的pix圖像賦值給一個臨時的tmpPix圖像,然后采用QPainter類將采集到的圖像信息以及固有的一些屬性如坐標軸、刻度等在該臨時圖像上進行繪制,隨后通過drawPixmap()函數(shù)將臨時圖像繪制到painter上,再通過事件event調(diào)用painter,從而實現(xiàn)了實時繪制曲線圖,擦寫過程均在幕后完成。
void Curve::refreshPixmap()
{
QPainter painter(this);
tmpPix=pix;
QPainter pp(&tmpPix);
QPen pen;
QColor color(Qt::white);
pen.setColor(color)
pen.setWidth(2);
pp.setPen(pen);
pp.senRenderHint(QPainter::Antialiasing,true);
int pointx=45,pointy=620;//確認坐標軸起點
int width=930-pointx,height=580;
pp.drawRect(5,5,950-10,650-10);
pp.drawLine(pointx,pointy,width+pointx,pointy);
pp.drawLine(pointx,pointy-height,pointx,pointy);
QPen penDegree;
…
painter.drawPixmap(900,700,tmpPix);
}
伺服調(diào)試過程中通常需要實時記錄實驗數(shù)據(jù),如曲線圖、儀表值等等,為滿足調(diào)試過程的需求,本系統(tǒng)添加了工具欄,列出了如文件保存、圖片打印、文本打印以及放大、旋轉(zhuǎn)等常用工具,如圖4所示。
圖4 工具欄界面圖
例如圖像打印只需要調(diào)用QPrinter以及QPrintDialog 2個類即可調(diào)用打印機及其屬性,并將圖像打印到文件中。
串口通信的概念是按位發(fā)送和接收字節(jié),其重要參數(shù)分為:波特率、數(shù)據(jù)位、奇偶校驗位、停止位。串口調(diào)試模塊需要利用到計算機串口驅(qū)動,通過設置串口參數(shù)實現(xiàn)與外部端口的通信。QT平臺提供了第三方串口庫,只需要在QTpro添加QT +=serialport代碼即可在相應的子程序引用
foreach(const QSerial PortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->portNameBox->addItem(serial.PortName());
serial.close();
}
}
UI界面設計中,調(diào)用QpushButton以及QTextEdit類,可以繪制文本輸入和接收框以及相應的按鈕。按鈕是否可用通過setEnabel(bool)函數(shù)進行設置,例如發(fā)送數(shù)據(jù)按鈕與其他設置參數(shù)按鈕不能同時操作,因此應設置相應的邏輯關系,按鈕通過addItem()函數(shù)即可增加選項用于選擇,完成后的串口界面如圖5所示。
圖5 串口調(diào)試模塊界面圖
CAN通信模塊是基于CAN總線協(xié)議設計的,CAN總線的概念是控制器局域網(wǎng),其特點主要包括節(jié)點不分主從,通過報文ID進行過濾,速度較快且具備錯誤檢測功能。
CAN通信模塊通過QLineEidt類進行設計,由于該類采用的數(shù)據(jù)是QString類型,而QString類型數(shù)據(jù)為了清晰展示,通常采用空格符對數(shù)據(jù)進行分割,從而增加了數(shù)據(jù)的長度。本文為避免數(shù)據(jù)傳輸過程冗長,采用了將QString類轉(zhuǎn)換為char型數(shù)據(jù)進行傳輸,從而減少串口傳輸?shù)臄?shù)據(jù)量。
通過分析雷達伺服調(diào)試過程中可能要采集的數(shù)據(jù)以及需要下達的指令數(shù)據(jù),系統(tǒng)需要的有效數(shù)據(jù)可能多達10個字節(jié),包括電流、速度、電壓數(shù)值等等。因此,數(shù)據(jù)包結(jié)構設計如表1所示。
表1 數(shù)據(jù)包結(jié)構表
為保證數(shù)據(jù)完整性,CAN通信模塊通常采用一種算法對原始數(shù)據(jù)計算出1個校驗值,并將校驗值一同發(fā)出,接收方用相同的方法計算出校驗值進行數(shù)據(jù)校驗,本文采用了目前行業(yè)內(nèi)比較常用的CRC循環(huán)校驗法,該方法具有偵錯能力強、系統(tǒng)消耗小等優(yōu)點,適用于本系統(tǒng),主要實現(xiàn)代碼如下:
void CAN_com::CRC_check()
{
if (enable==1)
{
for(int i=0;i { crc=data[i]^crc; for(int j=0;j<7;j++) { tmp1=crc &&0X 0001; if (tmp1=0X0001) crc=crc》1^0XA001; else crc=crc》1; } } } } 參數(shù)調(diào)整和指令下達模塊即變量輸入輸出模塊,根據(jù)雷達伺服系統(tǒng)常用的參數(shù),參數(shù)調(diào)整和指令下達模塊通常包括速度設定,電流門限、電壓門限、使能、比例、積分、微分(PID)參數(shù)調(diào)整等。本系統(tǒng)通過在界面上提供輸入框改變變量值,并通過串口或CAN通信方式送達可編程邏輯控制器(PLC)或其他被控元件,實現(xiàn)參數(shù)變更和指令下達的功能[3]。 在某項目中,采用本系統(tǒng)進行雷達伺服系統(tǒng)調(diào)試,通過串口通信建立雷達伺服系統(tǒng)和本軟件調(diào)試系統(tǒng)的連接,計算機端采用USB轉(zhuǎn)串口模塊,PLC通過IO量與多種被控元件如接近開關、水平傳感器等建立連接,通過CAN總線建立與伺服電機的連接從而接收伺服電機各項反饋量并向其下達控制指令,各被控元件及伺服電機結(jié)合傳動結(jié)構件集成為雷達伺服系統(tǒng),系統(tǒng)組成圖如圖6所示。 圖6 系統(tǒng)組成圖 系統(tǒng)上電后,打開串口界面,搜索串口端口號,建立串口連接。通過數(shù)據(jù)采集,接收到伺服電機電壓為380 V,通過加載使能,給定相應速度,收集并繪制伺服系統(tǒng)某關節(jié)部分位置曲線,曲線顯示其完成循環(huán)往復運動,與實際運動狀態(tài)擬合。同時,調(diào)試系統(tǒng)采集到各被控元件的狀態(tài)信息,并通過伺服調(diào)試系統(tǒng)界面的各點燈模塊加以顯示。經(jīng)分析,本系統(tǒng)實時采集了被控元件的狀態(tài)信息,并繪制了相應變量的狀態(tài)曲線,通過參數(shù)調(diào)整和指令下達模塊可以實時改變輸出變量的狀態(tài)從而實現(xiàn)控制被控元件的功能。系統(tǒng)簡單明了,操作簡易,適合伺服調(diào)試人員現(xiàn)場調(diào)試。系統(tǒng)調(diào)試界面如圖7所示。 圖7 雷達伺服調(diào)試系統(tǒng)界面 通過實際應用可以發(fā)現(xiàn),本系統(tǒng)信息顯示和人工操作完全可以滿足雷達伺服系統(tǒng)調(diào)試的需要。 本文通過QT平臺設計了一款用于雷達伺服系統(tǒng)調(diào)試的系統(tǒng),該系統(tǒng)包含了伺服系統(tǒng)常用的參數(shù)設定、通信方式和狀態(tài)顯示,極大簡化了伺服調(diào)試人員調(diào)試過程。此外,該系統(tǒng)性能穩(wěn)定且價格低廉,具有一定的發(fā)展前景。3.3 參數(shù)調(diào)整和指令下達模塊
4 應用實例
5 結(jié)束語