版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、“串口通信實時曲線 Qt保存日期文件名配置自動保存 CRC算法”軟件設(shè)計文檔積分下載可免費提供技術(shù)支持,需要本程序源代碼的可聯(lián)系作者目錄 TOC o 1-5 h z 1設(shè)計目的2基本功能2 HYPERLINK l bookmark8 o Current Document 開發(fā)環(huán)境22使用說明2頁面介紹2 HYPERLINK l bookmark13 o Current Document 調(diào)試窗口的使用33全局及運行流程4主函數(shù)流程4 HYPERLINK l bookmark18 o Current Document 數(shù)據(jù)發(fā)送流程4 HYPERLINK l bookmark20 o Curren
2、t Document 數(shù)據(jù)接收流程5 HYPERLINK l bookmark22 o Current Document 全局數(shù)據(jù)5配置數(shù)據(jù)5 HYPERLINK l bookmark24 o Current Document 通信結(jié)構(gòu)體5 HYPERLINK l bookmark26 o Current Document 4串口通信設(shè)計6 HYPERLINK l bookmark28 o Current Document 接口層 Port 6數(shù)據(jù)成員6構(gòu)造函數(shù)6超時函數(shù)7打開端口 7關(guān)閉串口 7 HYPERLINK l bookmark30 o Current Document 消息發(fā)送函數(shù)
3、7 HYPERLINK l bookmark32 o Current Document 簡單處理函數(shù) 7 HYPERLINK l bookmark34 o Current Document 解析消息函數(shù)7 HYPERLINK l bookmark36 o Current Document CRC#算8計算函數(shù)8 HYPERLINK l bookmark38 o Current Document 5各功能頁面8 HYPERLINK l bookmark40 o Current Document 主頁面 MainDialog 8界面設(shè)計8類設(shè)計8構(gòu)造函數(shù)9 HYPERLINK l bookmark
4、42 o Current Document 顯示發(fā)送計數(shù) 10 HYPERLINK l bookmark44 o Current Document 加載配置文件 10 HYPERLINK l bookmark46 o Current Document 保存最新配置 10 HYPERLINK l bookmark48 o Current Document 獲取頁面的參數(shù)配置 101 TOC o 1-5 h z 獲取本機所有串口 10 HYPERLINK l bookmark50 o Current Document 根據(jù)配置設(shè)置頁面 11 HYPERLINK l bookmark52 o Cur
5、rent Document 打開端口槽函數(shù) 11 HYPERLINK l bookmark54 o Current Document 關(guān)閉端口槽函數(shù) 11 HYPERLINK l bookmark56 o Current Document 定時發(fā)送函數(shù) 11 HYPERLINK l bookmark58 o Current Document 周期發(fā)送處理 11 HYPERLINK l bookmark60 o Current Document 發(fā)送處理過程 11 HYPERLINK l bookmark62 o Current Document 接收處理過程 12 HYPERLINK l bo
6、okmark64 o Current Document 更新本機端口時機 12 HYPERLINK l bookmark66 o Current Document 曲線頁面Figure 12界面設(shè)計12類設(shè)計12構(gòu)造函數(shù) 13隱藏曲線14縮放曲線15復(fù)位曲線15顯示曲線15 HYPERLINK l bookmark68 o Current Document 實時記錄頁面 RecordDialog 15界面設(shè)計15類設(shè)計 15構(gòu)造函數(shù)16開始記錄16關(guān)閉記錄16 HYPERLINK l bookmark72 o Current Document 記錄路徑選擇 17是否記錄17接收處理17 HYP
7、ERLINK l bookmark74 o Current Document 實時記錄功能 171設(shè)計目的基本功能通過向定時發(fā)送獲取數(shù)據(jù)的命令,接收底層反饋的數(shù)據(jù),并完成兩路實時曲線的繪制。通信數(shù)據(jù)格式,采用定長的結(jié)構(gòu)體完成封裝;通信數(shù)據(jù)采用Modbus CRC16完成校驗和;曲線畫圖采用Qt自帶的QChart功能;帶有配置數(shù)據(jù)自動保存,打開后自動加載;帶有數(shù)據(jù)記錄功能,以當(dāng)前日期保存的文件。MARK-Q32000-開發(fā)環(huán)境采用Windows系統(tǒng)下的Qt 5.10.1版本,串口庫有使用Qt自帶的串口類。2使用說明頁面介紹運行程序后,會直接進入主頁面。選擇好需要的串口號,波特率后,點擊打開串口。
8、打開主頁面如下:! MainCilwg爰口號 COHL T浪精書JE九11:豁保記錄|前 收千超時混第115ZOO ,打開雷口羌閉睪140校財試)22 H5&7TUGa:復(fù)位 | 顯示目標曾目*:值復(fù)位49151: -S -:3 nV苗36I .1 15&Ti如果打開成功,可點擊按照發(fā)送按鈕完成數(shù)據(jù)的發(fā)送。如果收到特定格式的回復(fù)報文,則會有接收數(shù)據(jù)出現(xiàn)在接收窗口。示例中采用的溫度值和一個整數(shù)值的曲線窗口。MARK-Q28121-調(diào)試窗口的使用為方便編碼即調(diào)試,設(shè)計中使用了調(diào)試窗口,方便控制臺打印信息。開啟調(diào)試窗口的方法是:在項目代碼目錄的.pro項目文件中添加一行:CONFIG += cons
9、ole嘏示控制臺提示窗口,以方便調(diào)試MARK-281213全局及運行流程主函數(shù)流程數(shù)據(jù)發(fā)送流程調(diào)用底層發(fā)送函數(shù),對話框獲取到發(fā)送按鈕事件后, 通過接口層的發(fā)送函數(shù),組裝數(shù)據(jù)幀后, 完成發(fā)送。數(shù)據(jù)發(fā)送流程如下。發(fā)送流程1數(shù)據(jù)接收流程當(dāng)子線程獲得數(shù)據(jù)后,先將數(shù)據(jù)保存。如果達到幀長度的要求,則調(diào)用解析函數(shù)進行解 析。數(shù)據(jù)接收流程如下。串口接收槽保存到緩存長度及CRC正確主界面解析顯示曲線全局數(shù)據(jù)配置數(shù)據(jù)功能:配置數(shù)據(jù)說明:端口配置數(shù)據(jù),可保持到配置文件中typedef struct(QString name;/ 串口端口名稱qint32 baudRate;/ 串口波特率int replyTimeou
10、t;/ 無應(yīng)答是否提示超時 0-no Prompt, default, 1-Prompt Reply Timoutint isCycleSend;/是否周期定時發(fā)送int cycleTime;/周期定時發(fā)送的間隔時間20msunsigned char hdwAddr;/底層的硬件地址(參考)ConfigData;通信結(jié)構(gòu)體功能:通信數(shù)據(jù)結(jié)構(gòu)體說明:示意用typedef struct(unsigned char addr;/地址,區(qū)別硬件用unsigned char command;/命令類型,獲取曲線的命令號為04union/使用聯(lián)合體,可根據(jù)不同的情況復(fù)用此存儲空間unsigned char
11、 param;/ 命令帶參數(shù)unsigned char state;/ 返回的狀態(tài)字;unsigned short data2;/ 兩路曲線數(shù)據(jù)unionstructchar crcL;低字節(jié)char crcH;/ 高字節(jié));unsigned short crc;/ 采用 Modbus CRC校驗方法);RecvStruct;/發(fā)送的數(shù)據(jù)結(jié)構(gòu)體4串口通信設(shè)計串口通信采用分層設(shè)計思想,以更好的處理需求變化。接口層 Port主要完成串口類的 處理,協(xié)議數(shù)據(jù)的組裝及解析。處理后的數(shù)據(jù)交給主窗口的應(yīng)用層負責(zé)數(shù)據(jù)的處理及顯示。接口層 Port數(shù)據(jù)成員int sendCounts;/ 發(fā)送幀計數(shù) /32m
12、ark-Q32000-int recvCounts;/ 接收幀計數(shù)QSerialPort *m_serial = nullptr;/ 串口對象指針QMutex mutex;/同步操作,用于多線程操作時的互斥bool isOpened = false;/標志串口是否打開狀態(tài)int bufSendLength = 0;/存儲上次發(fā)送的數(shù)據(jù)長度;unsigned char bufSend1024;/ 發(fā)送緩存QByteArray recvData;/接收數(shù)據(jù)緩存數(shù)組int minRecvFrameSize;/最短幀(固定/變長)長度,默認為頭部長度,可提高解析效率QTimer* mIoTimer;
13、/檢測對方的響應(yīng)是否超時QMessageBox* msgBoxIoTimeout;/ 超時后提構(gòu)造函數(shù)Port:Port(QObject *parent)minRecvFrameSize = sizeof(RecvStruct);/最短幀長度,判斷是否接受完成用,使用本整數(shù),可加快解析處理過程mIoTimer = new QTimer(parent);/ 超時定時器mIoTimer-setSingleShot(true); 設(shè)為單次定時器connect(mIoTimer, SIGNAL(timeout(), this, SLOT(onIoTimeout();/ 定時器的超時處理函數(shù)msgBox
14、IoTimeout = new QMessageBox(QMessageBox:Critical, ERROR, Wait PeplyTimeout.);/超時彈出先將對話框資源定義好,這樣可避免彈出多個對話框。提高效率msgBoxIoTimeout-setModal(false);/設(shè)為非模式對話框,不壟斷輸入,實現(xiàn)申請好對話框,可防止反復(fù)彈出很多個框的現(xiàn)象m_serial = new QSerialPort(parent);/ 串 口對象sendCounts = 0;/發(fā)送幀計數(shù)recvCounts = 0;/接收幀計數(shù)/28mark-Q28121connect(m_serial, &QS
15、erialPort:readyRead, this, &Port:slotRecvData);/ 關(guān)聯(lián)串口 的讀取 信號connect(this, SIGNAL(receivedSignal(),this, SLOT(procRead(),Qt:QueuedConnection);/ 連接自定義的接收后通知處理的信號和槽,采用隊列緩存機制超時函數(shù)函數(shù)功能:超時處理函數(shù)輸入輸出:null返回值:void說明:等待應(yīng)答超時void Port:onIoTimeout()打開端口函數(shù)功能:打開端口輸入輸出:const QString &serialPortName 串 口名,qint32 serial
16、BaudRate 波特率返回值:int 0-成功,-1參數(shù)錯誤,-2打開失敗說明:對外接口函數(shù)int startPort(const QString &serialPortName, qint32 serialBaudRate)/ 打開串口關(guān)閉串口函數(shù)功能:關(guān)閉串口輸入輸出:null返回值:int 0-成功說明:void Port:closePort()消息發(fā)送函數(shù)函數(shù)功能:消息發(fā)送輸入輸出:unsigned char addr 硬件地址,char command 命令號,unsigned short param 參數(shù),unsigned short inputCrc 手工 CRC返回值:int
17、 0:正常發(fā)送,-1:發(fā)送失敗說明:發(fā)送失敗暫不處理,若發(fā)送失敗或無響應(yīng),用戶會再次點擊發(fā)送。int Port:sendMsg(unsigned char addr, char command,unsigned short param,unsigned short inputCrc)簡單處理函數(shù)函數(shù)功能:簡單處理接收數(shù)據(jù)輸入輸出:返回值:說明:void Port:procRead()解析消息函數(shù)函數(shù)功能:解析消息輸入輸出:QByteArray *pPortRecv接收緩存區(qū)返回值:int 0:need more需要更多數(shù)據(jù)才能解析0:false-已完成解析說明:int Port:parseMs
18、g(QByteArray *pPortRecv)CR印算采用查表方式完成 Modbus CRC16的計算。計算函數(shù)函數(shù)功能:計算 Modbus CRC16值輸入輸出: unsigned char * pucFrame, unsigned short usLen返回值:unsigned short說明:unsigned short mbCrc16(unsigned char * pucFrame, unsigned short usLen)5各功能頁面主頁面 MainDialog界面設(shè)計界面設(shè)計如下:J1整DO,打開串口 .而 叵定時友SG01舊歸值1 復(fù)位 j顯示目你o & 邛 0 o.a.o
19、.o,4 B 2 4 1 -曰飄1比it :S5E35|目也值I 7 3 pIP g I wr s9 2 &4 己 二Moi#類設(shè)計類的成員包括:class MainDialog : public QDialog (Q_OBJECT public:explicit MainDialog(QWidget *parent = 0);MainDialog();void showSendCount(int count);/ 顯示發(fā)送計數(shù)void loadConfigData();/從配置文件中加載保存的配置參數(shù)void saveCon巾gFile();/保存配置參數(shù)到文件中void freshConf
20、igData(ConfigData &configData);/ 獲取界面的最新參數(shù)void getSerialPort();獲取本機所有串口號void showUIConfigData(const ConfigData& configData);/ 將參數(shù)顯示到頁面上void recvMsg(RecvStruct *head,int len);/ 接收到數(shù)據(jù)后的頁面處理void showData(QPlainTextEdit*plain, unsigned char*buf,unsigned int bufLen);/顯示接收的數(shù)據(jù)到文本框/32mark-Q32000- private sl
21、ots:void onCycleSendTimeout();/周期循環(huán)發(fā)送的定時器超時函數(shù)void on_btnOpen_clicked();/ 打開串 口 的槽函數(shù)void on_btnClose_clicked();/ 關(guān)閉串口的槽函數(shù) /28mark-Q-28121void on_btnSend_clicked();/ 點擊發(fā)送void on_checkCycle_clicked(bool checked);/ 是否勾選循環(huán)發(fā)送的處理過程void on_btnDataRecord_clicked();/打開實時數(shù)據(jù)記錄對話框void on_cbSerialPort_highlighted
22、(const QString &arg1);/當(dāng)用戶選擇時,來更新一次本機的串口號void on_checkBoxTimeout_clicked(bool checked);public:Ui:MainDialog *ui;RecordDialog* recordDialog;/ 實時數(shù)據(jù)記錄對話框QVector figure;/曲線框,本程序顯示了兩個曲線框QTimer* cycleSendTimer; /周期發(fā)送的定時器 bool freshComPort = true;/ 是否更新本機串口號 ;構(gòu)造函數(shù)MainDialog:MainDialog(QWidget *parent):QDia
23、log(parent), ui(new Ui:MainDialog) ui-setupUi(this);recordDialog = new RecordDialog(this);/ 創(chuàng)建實時記錄數(shù)據(jù)對話框Figure* fig = new Figure(0,this);/ 創(chuàng)建 1 號曲線窗口 /28mark-Q28121 fig-setGeometry(0,115,this-width(),260);/ 設(shè)置曲線窗口 的大小 figure.append(fig);/加到曲線向量里,以便后面引用 fig = new Figure(1,this);/ 創(chuàng)建 2 號曲線窗口 fig-setGeo
24、metry(0,380,this-width(),260);/ 設(shè)置曲線窗口 的大小 figure.append(fig);/加到曲線向量里,以便后面引用Qt:WindowFlags flags=Qt:Dialog;/獲得對話框的窗口參數(shù),以便設(shè)置外觀flags |=Qt:WindowMinMaxButtonsHint;/顯示最大最小化按鈕flags |=Qt:WindowCloseButtonHint;/ 顯示關(guān)閉按鈕setWindowFlags(flags);/ 設(shè)置窗 口參數(shù)ui-plainRecv-setMaximumBlockCount(50);/ 設(shè)定最大存儲 50 文本段落,超長
25、的從 頭部刪除cycleSendTimer = new QTimer(this);/ 循環(huán)發(fā)送定時器connect(cycleSendTimer, SIGNAL(timeout(), this, SLOT(onCycleSendTimeout();/ 循環(huán) 發(fā)送超時觸發(fā)函數(shù),Qt:QueuedConnectionloadConfigData();/加載配置參數(shù),并根據(jù)參數(shù)顯示界面顯示發(fā)送計數(shù)函數(shù)功能:顯示發(fā)送計數(shù)輸入輸出:返回值:說明:由協(xié)議層調(diào)用void MainDialog:showSendCount(int count)加載配置文件函數(shù)功能:加載配置文件,并顯示界面上輸入輸出:返回值:v
26、oid說明:加載.ini配置文件,可打開可運行目錄下的XXX.ini文件以便加深理解void MainDialog:loadConfigData()保存最新配置函數(shù)功能:保存最新配置到文件輸入輸出:返回值:void說明:void MainDialog:saveConfigFile()獲取頁面的參數(shù)配置函數(shù)功能:獲取頁面最新的參數(shù)配置輸入輸出:ConfigData &configData返回值:void說明:void MainDialog:freshConfigData(ConfigData &configData)獲取本機所有串口 函數(shù)功能:獲取本機所有串口 輸入輸出:10返回值:void說明
27、:void MainDialog:getSerialPort()根據(jù)配置設(shè)置頁面函數(shù)功能:查找本機支持的串口端口號并根據(jù)配置文件,重新顯示UI界面輸入輸出:null返回值:void說明:將配置文件的值放到第一個上,以便用戶選擇void MainDialog:showUIConfigData(const ConfigData& configData)打開端口槽函數(shù)函數(shù)功能:打開端口輸入輸出:null返回值:void說明:void MainDialog:on_btnOpen_clicked()關(guān)閉端口槽函數(shù)函數(shù)功能:關(guān)閉端口輸入輸出:null返回值:void說明:void MainDialog:o
28、n_btnClose_clicked()定時發(fā)送函數(shù)函數(shù)功能:用戶點擊定時發(fā)的處理過程輸入輸出:bool checked選中了返回值:void說明:void MainDialog:on_checkCycle_clicked(bool checked)周期發(fā)送處理函數(shù)功能:周期發(fā)送超時處理輸入輸出:返回值:void說明:void MainDialog:onCycleSendTimeout()發(fā)送處理過程函數(shù)功能:用戶點擊發(fā)送的處理過程輸入輸出:返回值:void說明:11void MainDialog:on_btnSend_clicked()接收處理過程函數(shù)功能:接收到本頁面相關(guān)消息的處理流程輸入
29、輸出:RecvStruct*head數(shù)據(jù)包頭,int len 長度返回值:void說明:接收到消息后,會自動調(diào)用此函數(shù)void MainDialog:recvMsg(RecvStruct*head,int len)更新本機端口時機函數(shù)功能:用戶選擇端口號時調(diào)用輸入輸出:返回值:void說明:可防止用戶先打開本軟件,后插上USB轉(zhuǎn)串口工具后,無法及時刷新出串口信息的情況void MainDialog:on_cbSerialPort_highlighted(const QString &arg1)曲線頁面Figure界面設(shè)計界面設(shè)計如下:類設(shè)計類的成員包括:class Figure : publi
30、c QWidget Q_OBJECT32mark-Q32000-public:explicit Figure(int channel,QWidget *parent = 0);Figure();void resetCurves();復(fù)位曲線,重新開始顯示void showCurve(float value);/ 根據(jù)數(shù)據(jù),顯示曲線 private slots:void on_btnShowTarget_clicked(bool checked);/ 顯示或隱藏目標曲線 void on_btnReset_clicked();/ 點擊復(fù)位曲線12void on_scaleDiv_activated
31、(const QString &arg1);/ 縮放值改變時調(diào)用 private:Ui:Figure *ui;int channel;/通道標識,用于多個曲線窗口的識別處理unsigned long tickCount = 0;/ 畫圖的點數(shù)統(tǒng)計double countTime = 0;/畫圖的x軸累加時間QChart *chart;/采用QChart作為畫圖控件QChartView *chartView;/可獨立顯示QChart曲線的視圖QLineSeries *targetSeries;/ 曲線-目標值曲線QLineSeries *realSeries;/ 曲線-實際值曲線QVector
32、targetValue;/ 存儲數(shù)據(jù)用于動態(tài)挪動曲線,vec target valueQVector realValue;/存儲數(shù)據(jù)(本項目采用的,可避免曲線點多了之后變慢的 問題,可能也有其它辦法)vec real valuedouble scaleMAXCURVENUM尸1,1;曲線的縮放因子,用于縮放以便觀察,默認為 1 QValueAxis *axisX;/X 坐標軸QValueAxis *axisY;/Y 坐標軸;構(gòu)造函數(shù)Figure:Figure(int channel, QWidget *parent):QWidget(parent),ui(new Ui:Figure)ui-se
33、tupUi(this);this-channel = channel,區(qū)分兩個畫圖控件,用特定化顯示chart = new QChart();/QChart 畫圖對象chart-setAnimationOptions(QChart:NoAnimation);/設(shè)置曲線或網(wǎng)格線的動畫效果/28mark-Q28121/chart-createDefaultAxes();/如果是靜態(tài)數(shù)據(jù)的話,也可以創(chuàng)建默認坐標軸/chart要先添加series再加載軸,加載軸的過程是先添加軸到chart上,再加軸到series 上。axisX = new QValueAxis(chart);/ 在 chart 上創(chuàng)
34、建 X 軸axisX-setRange(0, XSPAN);殷定X軸的范圍,單位秒 axisX-setTickCount(XSPAN+1);/股定網(wǎng)格數(shù)量,包括兩端 axisX-setLabelFormat(%d);/ 設(shè)定 X 軸格式,d 為整數(shù) axisX-setTitleText(Time(s);/ 設(shè)定 X 軸標題axisY = new QValueAxis(chart);/ 在 chart 上創(chuàng)建 X 軸/ axisY-setLabelFormat(%g);/設(shè)定丫 軸數(shù)據(jù)格式,g 浮點數(shù)/ chart-addAxis(axisY Qt:AlignLeft);/ 坐標軸放到左邊if(
35、0 = channel)/ 第一個圖表axisY-setTitleText(溫度( C);/設(shè)定 Y軸標題 ui-lbName-setText(溫度( C):);/上面的 QLabel 顯示 axisY-setRange(-40,200);/設(shè)定 Y 軸范圍13else if(1 = channel)/ 第二個圖表(axisY-setTitleText(整數(shù)(0 x);/ 設(shè)定 Y軸標題ui-lbName-setText(整數(shù)(16bit):); 上面的 QLabel 顯示 axisY-setRange(0,65535);/設(shè)定 Y 軸范圍 axisY-setLabelFormat(%i);/
36、 設(shè)定 丫軸格式,i 為整數(shù) targetSeries = new QLineSeries(chart);/ 生成一條曲線,存放目標值 targetSeries-setName(目標);/ 設(shè)定曲線名稱 realSeries = new QLineSeries(chart);/ 生成一條曲線,存放實際值 realSeries-setName(實際);/ 設(shè)定曲線名稱 chart-addSeries(targetSeries);/ 將曲線添加到 QChart 上 chart-setAxisX(axisX,targetSeries);/ 添力口 X 軸 chart-setAxisY(axisYta
37、rgetSeries);/ 添力口 丫軸 chart-addSeries(realSeries);/ 將曲線添加到 QChart 上 chart-setAxisX(axisX,realSeries);/添力口 X 軸 chart-setAxisY(axisYrealSeries);/ 添力口 Y軸 /chart-legend()-hide();chart-legend()-setVisible(true);/ 顯示曲線標題chart-legend()-setAlignment(Qt:AlignRight);/ 放到右側(cè)顯示QFont font = chart-legend()-font();/
38、 獲取字體font.setItalic(!font.italic();/ 修改字體形式chart-legend()-setFont(font);/ 再次設(shè)置字體targetSeries-setUseOpenGL(true);/加快速度,OpenGL開啟后曲線不能隱藏,需要先 關(guān)閉 OpenGL再調(diào)用 hide(),setVisible(false)否則無效realSeries-setUseOpenGL(true);/ 加快速度,打開 OpenGL 后曲線不能隱藏, hide(),setVisible(false)無效chartView = new QChartView(chart,this);
39、/ 生成 QChartView 的兩種方式,像這樣自行 創(chuàng)建?;蛘卟捎锰嵘椒▽崿F(xiàn),如提升-基類不變,填寫 QChartView全局包含。/chartView-setGeometry(0,0,this-width(),this-height();/ 設(shè)定 QChartView 的尺寸 ui-verticalLayout-addWidget(chartView);/ 添加到垂直布局里面 /chartView-setRenderHint(QPainter:Antialiasing);/ 設(shè)置抗鋸齒 chartView-setRubberBand(QChartView:RectangleRubber
40、Band);/ 拖動縮放 chartView-show();realSeries-setVisible(true);/ 開啟 OPenGL后無法隱藏 on_btnShowTarget_clicked(true);/ 顯示目標值曲線 隱藏曲線函數(shù)功能:用戶點擊隱藏目標曲線的處理過程輸入輸出:bool checked選中了返回值:void說明:隱藏曲線需要關(guān)閉OpenGLvoid Figure:on_btnShowTarget_clicked(bool checked)14縮放曲線函數(shù)功能:用戶點擊縮放值框的處理過程輸入輸出:const QString &arg1縮放值返回值:void說明:voi
41、d Figure:on_scaleDiv_activated(const QString &arg1)復(fù)位曲線函數(shù)功能:復(fù)位曲線輸入輸出:返回值:void說明:void Figure:resetCurves()顯示曲線函數(shù)功能:顯示曲線輸入輸出:float value動態(tài)數(shù)據(jù)返回值:void說明:接收到消息后,會調(diào)用此函數(shù)void Figure:showCurve(float value)實時記錄頁面 RecordDialog界面設(shè)計界面設(shè)計如下:LI開啟實時記錄當(dāng)前記錄文件名;|工錄選/|關(guān)閉類設(shè)計類的成員包括:class RecordDialog : public QDialog15Q_O
42、BJECTpublic:explicit RecordDialog(QWidget *parent = 0);RecordDialog();void recvMsg(unsigned short samplingPeriod, unsigned short status, float value1, float value2);接收到新的數(shù)據(jù)void realRecord(QString &format);/ 實時記錄功能void beginRecord();/ 開始記錄void closeRecord();/ 關(guān)閉記錄private slots:void on_directionSelect
43、_clicked();/ 選擇并更改路徑void on_isRealRecord_clicked(bool checked);/ 是否打開實時記錄功能void on_btnClose_clicked();/關(guān)閉對話框,用隱藏替代 /32mark-Q32000-private:Ui:RecordDialog *ui;QString recordDir;/ 記錄的路徑QString fileName;/記錄的文件名,以日期命名QFile recordFile;/Qt 的文件對象QTextStream textStream;/Qt 文本文件流bool startRecord;/標記是否開始記錄 ;構(gòu)
44、造函數(shù)RecordDialog:RecordDialog(QWidget *parent):QDialog(parent),ui(new Ui:RecordDialog)(ui-setupUi(this);recordDir = QDir:currentPath()+ /RealRecord;/ 記錄的路徑,默認為當(dāng)前路徑下 的./RealRecordfileName = ;/文件名清空,采用日期命名startRecord = false;/標志是否開始記錄開始記錄函數(shù)功能:開始記錄輸入輸出:null返回值:void說明:由用戶點擊主對話框的打開串口按鈕觸發(fā)void RecordDialog:
45、beginRecord()關(guān)閉記錄16函數(shù)功能:關(guān)閉記錄輸入輸出:null返回值:void說明:由用戶點擊主對話框的關(guān)閉串口按鈕觸發(fā)void RecordDialog:closeRecord()記錄路徑選擇函數(shù)功能:記錄路徑選擇輸入輸出:null返回值:void說明:由用戶路徑選擇來完成void RecordDialog:on_directionSelect_clicked()是否記錄函數(shù)功能:是否記錄復(fù)選框被點擊輸入輸出:bool checked選中返回值:void說明:void RecordDialog:on_isRealRecord_clicked(bool checked)接收處理函數(shù)功能:接收到記錄消息的處理輸入輸出:unsigned short samplingPeriod 采樣頻率 ,unsigned short status 狀態(tài)字,float valuel 數(shù)據(jù) 1, float value2 數(shù)據(jù) 2返回值:void說明:接收到消息后,會自動調(diào)用此函數(shù)void RecordDialog:recvMsg(unsigned short samplingPer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌加盟店合同范例
- 四方造價咨詢合同范例
- 醫(yī)生聘用簡約合同范例
- 農(nóng)業(yè)扶持資金合同范例
- 東北大米代理合同模板
- 商業(yè)土地切割合同范例
- 外墻裝修驗收合同范例
- 企業(yè)食堂配送合同范例
- 公司盆栽養(yǎng)殖合同模板
- 合作分銷協(xié)議合同范例
- 水利工程生產(chǎn)安全重大事故隱患判定標準(修訂稿)
- 血液凈化標準操作規(guī)程
- 有限空間監(jiān)理實施細則
- 我家鄉(xiāng)宜興介紹課件
- 4.2+酶催化細胞的化學(xué)反應(yīng)(教學(xué)課件)-【知識精講精研】高一生物 (滬科版2020必修1)
- 森林資源概況課件
- 胰腺癌的影像學(xué)表現(xiàn)課件
- 電梯維保報價單【模板】
- 2023年四川涼山州木里重點國有林保護局招聘18人筆試備考試題及答案解析
- 思想意識形態(tài)滲透就在你我身邊
- 2023跨界聯(lián)名營銷趨勢報告-SocialBeta
評論
0/150
提交評論