串口上位機(jī)軟件開發教程(vc編寫串口上位機(jī)軟件)
本篇文章(zhāng)給大家談談串口上位機(jī)軟件開發教程,以及vc編寫串口上位機(jī)軟件對應的(de)知識點,希望對各位有(yǒu)所幫助,不要忘了收藏本站喔。
本文目錄一(yī)覽:
- 1、串口屏開發流程是怎樣的(de)
- 2、如(rú)何用access做(zuò)一(yī)個與串口通信的(de)上位機(jī)軟件~ 急求~
- 3、上位機(jī)控制軟件開發
- 4、正點原子(zǐ)linux開發闆怎麽調試
串口屏開發流程是怎樣的(de)
串口屏的(de)開發流程
第一(yī):設計自(zì)己的(de)UI草(cǎo)圖和(hé)邏輯
第二:制作圖片(一(yī)般用PS等軟件做(zuò),相對應串口屏的(de)分辨率)
第三 : 使用串口屏廠商(shāng)提供的(de)上位機(jī)和(hé)開發資料,設計UI和(hé)交互邏輯。
第四:把設計好的(de)工程文件下載到屏幕裏面,用電腦按照開發文檔的(de)通訊協議發指令進行(xíng)模拟設計的(de)邏輯。
第五:開發控制闆電路闆和(hé)程序。(建議可(kě)以用現成的(de)開發闆去(qù)驗證軟件)
如(rú)何用access做(zuò)一(yī)個與串口通信的(de)上位機(jī)軟件~ 急求~
額,這個比較麻煩我(wǒ)之前做(zuò)過一(yī)個但是找不到了,access隻不過是個數據庫,上位機(jī)實現通信可(kě)以用MFC來做(zuò)。
上位機(jī)控制軟件開發
任何一(yī)種面向對象的(de)語言都有(yǒu)串口庫。我(wǒ)也研究了一(yī)陣子(zǐ)上位機(jī),c水平如(rú)果拿着資料,還是可(kě)以寫一(yī)些小玩意,但是最後放棄了,現在是用别人的(de)架構做(zuò)一(yī)點點二次開發,說白了就是寫一(yī)點小腳本,也可(kě)以将就用。上位機(jī)開發這個不是一(yī)年(nián)半載就可(kě)以搞清晰的(de)。我(wǒ)認為(wèi),所以我(wǒ)放棄了。可(kě)能我(wǒ)有(yǒu)點笨吧(ba)。最主要的(de)是作為(wèi)個人,我(wǒ)找不到下位機(jī)的(de)驅動和(hé)c庫(我(wǒ)說的(de)下位機(jī)是PLC),而這些,我(wǒ)又自(zì)己寫不出來。我(wǒ)學(xué)的(de)是c#,我(wǒ)知道(dào)幾個搞機(jī)器視(shì)覺的(de)。也是用的(de)c#,好多年(nián)了,軟件依然bug層出不窮,賣出去(qù)的(de)軟件都沒打包封裝,也不知道(dào)怎麽想的(de)。當然,我(wǒ)也麽有(yǒu)嘗試去(qù)反編譯他的(de)。。也不一(yī)定可(kě)以編譯出來。沒意思
正點原子(zǐ)linux開發闆怎麽調試
ui
正點原子(zǐ)Linux開發闆——Qt串口上位機(jī)實驗
門牙會稍息
原創
關注
3點贊·53人閱讀
前言:
最近在學(xué)習嵌入式qt開發,然後跟着教程編寫了一(yī)個簡單的(de)串口上位機(jī)程序,在編寫的(de)時候還算比較順利,但在調試的(de)時候花了點功夫,折騰了一(yī)下午。最後還是理(lǐ)清了思路,解決了問題,特寫此博客進行(xíng)記錄和(hé)總結。
串口上位機(jī)界面設計:
整個軟件的(de)界面我(wǒ)都是用ui來設計的(de),其實也可(kě)以用代碼,但是想了想有(yǒu)好多布局相互嵌套比較麻煩。最後就使用了ui界面來設計。
ui界面設計
串口上位機(jī)程序功能設計:
然後像串口對象初始化,槽函數,一(yī)些邏輯關系都用代碼來實現,頭文件就隻有(yǒu)一(yī)些變量、槽的(de)定義。
頭文件
#include "widget.h"
#include "ui_widget.h"
#include QMessageBox
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui-setupUi(this);
//lcd屏的(de)分辨率是1024X600
this-setFixedSize(QSize(1024, 600));
//new 一(yī)個QSerialPort對象
serialPort = new QSerialPort(this);
//通過foreach語句将windows或imx6ull可(kě)用串口識别出來,并添加至對應的(de)下拉選擇框
QStringList serialList;
foreach(const QSerialPortInfo info, QSerialPortInfo::availablePorts()){
serialList += info.portName();
}
ui-comboBox-addItems(serialList);
//設置串口的(de)信号與槽
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_radioButton_clicked(bool checked)
{
//點擊“打卡串口”button之後的(de)一(yī)些串口配置操作,和(hé)一(yī)些邏輯關系
if(checked){
//設置串口端
serialPort-setPortName(ui-comboBox-currentText());
//設置波特率
serialPort-setBaudRate(ui-comboBox_2-currentText().toInt());
//設置停止位
serialPort-setStopBits(QSerialPort::StopBits(ui-comboBox_4-currentText().toInt()));
//設置數據位
serialPort-setDataBits(QSerialPort::DataBits(ui-comboBox_6-currentText().toInt()));
//設置校驗位
switch(ui-comboBox_5-currentIndex()){
case 0:
serialPort-setParity(QSerialPort::Parity::NoParity);
break;
case 1:
serialPort-setParity(QSerialPort::Parity::EvenParity);
break;
case 2:
serialPort-setParity(QSerialPort::Parity::OddParity);
break;
case 3:
serialPort-setParity(QSerialPort::Parity::SpaceParity);
break;
case 4:
serialPort-setParity(QSerialPort::Parity::MarkParity);
break;
default:
break;
}
serialPort-setFlowControl(QSerialPort::NoFlowControl);
if(!serialPort-open(QSerialPort::ReadWrite)){
QMessageBox::about(this, "串口打開錯誤提示", "可(kě)能被占用了");
return;
}
//打開串口之後其他的(de)選擇按鈕設置成不可(kě)用
ui-comboBox-setEnabled(false);
ui-comboBox_2-setEnabled(false);
ui-comboBox_4-setEnabled(false);
ui-comboBox_5-setEnabled(false);
ui-comboBox_6-setEnabled(false);
ui-radioButton-setText("關閉串口");
}
else{
serialPort-close();
ui-comboBox-setEnabled(true);
ui-comboBox_2-setEnabled(true);
ui-comboBox_4-setEnabled(true);
ui-comboBox_5-setEnabled(true);
ui-comboBox_6-setEnabled(true);
ui-radioButton-setText("打開串口");
}
}
void Widget::readData()
{
//将串口中的(de)數據打印到textBrowser中
ui-textBrowser-insertPlainText(serialPort-readAll());
}
void Widget::on_pushButton_clicked()
{
//點擊“發送”button之後,将textEdit中的(de)內(nèi)容寫入串口
serialPort-write(ui-textEdit-toPlainText().toUtf8());
}
void Widget::on_pushButton_2_clicked()
{
//清屏操作
ui-textEdit-clear();
ui-textBrowser-clear();
}
登錄後複制
在windows端編寫好程序之後,将工程文件發送到ubuntu進行(xíng)qmake、make最後通過scp将ARM的(de)可(kě)執行(xíng)文件發送到開發闆,接下來就是驗證了
我(wǒ)用的(de)是正點原子(zǐ)出廠的(de)系統,所以在驗證的(de)時候需要使用到一(yī)個串口來連接到開發闆執行(xíng)編寫好的(de)上位機(jī)程序,所以一(yī)個串口就被占用了,正點原子(zǐ)教程視(shì)頻就用開發闆的(de)另一(yī)個串口來進行(xíng)測試
正點原子(zǐ)教程測試方式
因為(wèi)放假回了家,我(wǒ)也沒有(yǒu)帶太多的(de)東西,usb轉ttl模塊放在了學(xué)校。所以我(wǒ)在想怎麽就用一(yī)個串口來完成實驗。困擾我(wǒ)的(de)就是唯一(yī)的(de)一(yī)個串口必須留個上位機(jī),然後要怎麽執行(xíng)開發闆上的(de)串口上位機(jī)程序?最初我(wǒ)想到了可(kě)以使用網絡通過Xshell遠程連接到開發闆就可(kě)以執行(xíng),唯一(yī)的(de)串口就拿來驗證。
解決完上位機(jī)軟件怎麽在imx6ull上執行(xíng)的(de)問題,接下來就是驗證了。驗證的(de)時候又出現了一(yī)些問題,上位機(jī)軟件不像想象的(de)那樣一(yī)邊發數據,一(yī)邊就接收對應的(de)數據,而出現了一(yī)些imx6ull的(de)信息,好像還可(kě)以輸入命令,感到非常奇怪。
我(wǒ)以為(wèi)我(wǒ)的(de)軟件有(yǒu)問題,就在windows上換了一(yī)個串口軟件,結果還是出現了類似的(de)情況
最後也是在不斷猜想和(hé)測試之後找到了原因,就是應因為(wèi)我(wǒ)在給開發闆上電的(de)時候接入了串口線,然後先打開了windows上的(de)串口,然後就使用到了串口,導緻就相當于有(yǒu)一(yī)個串口控制imx6ull開發闆,像Xshell中通過串口連接開發闆一(yī)樣。然後我(wǒ)嘗試在windows的(de)上位機(jī)軟件輸入命令想打開一(yī)個qt程序,最後也是成功打開證實了猜想
執行(xíng)./list命令打開了蛇姐list程序(qt程序的(de)路徑是/home/root/qt_project/list)
如(rú)果想要實現實驗最初windows和(hé)imx6ull兩個上位機(jī)互換數據的(de)效果的(de)話。要先通過windows中的(de)上位機(jī)軟件輸入命令來打開imx6ull的(de)上位機(jī)軟件,這樣相當于windows中的(de)上位機(jī)連接的(de)就是imx6ull的(de)上位機(jī)了,而不是直接控制imx6ull了,之後就可(kě)以正常收發數據了。
總結:
學(xué)了qt快半個月了,這個串口上位機(jī)算是一(yī)個比較綜合的(de)練習了,結合了ui和(hé)代碼設計。加上最後的(de)調試也是收獲頗多,如(rú)果有(yǒu)usb-ttl模塊的(de)話驗證步驟就會更簡單。
串口上位機(jī)軟件開發教程的(de)介紹就聊到這裏吧(ba),感謝你花時間閱讀本站內(nèi)容,更多關于vc編寫串口上位機(jī)軟件、串口上位機(jī)軟件開發教程的(de)信息别忘了在本站進行(xíng)查找喔。
-
上一(yī)篇
小程序開發價格湖南岚鴻(小程序開發頂尖湖南岚鴻信 賴) -
下一(yī)篇
第三方小程序開發平台(第三方小程序開發平台有(yǒu)哪些)