串口上位機(jī)軟件開發教程(vc編寫串口上位機(jī)軟件)

軟件開發 2474
本篇文章(zhāng)給大家談談串口上位機(jī)軟件開發教程,以及vc編寫串口上位機(jī)軟件對應的(de)知識點,希望對各位有(yǒu)所幫助,不要忘了收藏本站喔。 本文目錄一(yī)覽: 1、串口屏開發流程是怎樣的(de)

本篇文章(zhāng)給大家談談串口上位機(jī)軟件開發教程,以及vc編寫串口上位機(jī)軟件對應的(de)知識點,希望對各位有(yǒu)所幫助,不要忘了收藏本站喔。

本文目錄一(yī)覽:

串口屏開發流程是怎樣的(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)查找喔。

掃碼二維碼