串口上位機軟件開(kāi)發(fā)教程(上位機串口助手)

軟件開(kāi)發(fā) 2525
今天給各位分享串口上位機軟件開(kāi)發(fā)教程的知識,其中也會(huì)對(duì)上位機串口助手進(jìn)行解釋,如果能(néng)碰巧解決你現在面(miàn)臨的問題,别忘了關注本站,現在開(kāi)始吧!本文目錄一覽: 1、

今天給各位分享串口上位機軟件開(kāi)發(fā)教程的知識,其中也會(huì)對(duì)上位機串口助手進(jìn)行解釋,如果能(néng)碰巧解決你現在面(miàn)臨的問題,别忘了關注本站,現在開(kāi)始吧!

本文目錄一覽:

利用電腦做上位機開(kāi)發(fā)一個軟件,用單片機做下位機。在上位機上點擊軟件上的按鈕能(néng)使單片機輸出一路I/O口

主要涉及到單片機基礎知識,重點是串口通信,上位機可以考慮vc和.net,這(zhè)兩(liǎng)種(zhǒng)都(dōu)可以。.net使用c#語言,感覺比較好(hǎo)上手,我也可以給你點視頻教程,一學(xué)就會(huì)。

如何用access做一個與串口通信的上位機軟件~ 急求~

額,這(zhè)個比較麻煩我之前做過(guò)一個但是找不到了,access隻不過(guò)是個數據庫,上位機實現通信可以用MFC來做。

正點原子linux開(kāi)發(fā)闆怎麼(me)調試

ui

正點原子Linux開(kāi)發(fā)闆——Qt串口上位機實驗

門牙會(huì)稍息

原創

關注

3點贊·53人閱讀

前言:

最近在學(xué)習嵌入式qt開(kāi)發(fā),然後(hòu)跟著(zhe)教程編寫了一個簡單的串口上位機程序,在編寫的時候還(hái)算比較順利,但在調試的時候花了點功夫,折騰了一下午。最後(hòu)還(hái)是理清了思路,解決了問題,特寫此博客進(jìn)行記錄和總結。

串口上位機界面(miàn)設計:

整個軟件的界面(miàn)我都(dōu)是用ui來設計的,其實也可以用代碼,但是想了想有好(hǎo)多布局相互嵌套比較麻煩。最後(hòu)就使用了ui界面(miàn)來設計。

ui界面(miàn)設計

串口上位機程序功能(néng)設計:

然後(hòu)像串口對(duì)象初始化,槽函數,一些邏輯關系都(dōu)用代碼來實現,頭文件就隻有一些變量、槽的定義。

頭文件

#include "widget.h"

#include "ui_widget.h"

#include QMessageBox

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui-setupUi(this);

//lcd屏的分辨率是1024X600

this-setFixedSize(QSize(1024, 600));

//new 一個QSerialPort對(duì)象

serialPort = new QSerialPort(this);

//通過(guò)foreach語句將(jiāng)windows或imx6ull可用串口識别出來,并添加至對(duì)應的下拉選擇框

QStringList serialList;

foreach(const QSerialPortInfo info, QSerialPortInfo::availablePorts()){

serialList += info.portName();

}

ui-comboBox-addItems(serialList);

//設置串口的信号與槽

connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_radioButton_clicked(bool checked)

{

//點擊“打卡串口”button之後(hòu)的一些串口配置操作,和一些邏輯關系

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āi)錯誤提示", "可能(néng)被(bèi)占用了");

return;

}

//打開(kāi)串口之後(hòu)其他的選擇按鈕設置成(chéng)不可用

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("打開(kāi)串口");

}

}

void Widget::readData()

{

//將(jiāng)串口中的數據打印到textBrowser中

ui-textBrowser-insertPlainText(serialPort-readAll());

}

void Widget::on_pushButton_clicked()

{

//點擊“發(fā)送”button之後(hòu),將(jiāng)textEdit中的内容寫入串口

serialPort-write(ui-textEdit-toPlainText().toUtf8());

}

void Widget::on_pushButton_2_clicked()

{

//清屏操作

ui-textEdit-clear();

ui-textBrowser-clear();

}

登錄後(hòu)複制

在windows端編寫好(hǎo)程序之後(hòu),將(jiāng)工程文件發(fā)送到ubuntu進(jìn)行qmake、make最後(hòu)通過(guò)scp將(jiāng)ARM的可執行文件發(fā)送到開(kāi)發(fā)闆,接下來就是驗證了

我用的是正點原子出廠的系統,所以在驗證的時候需要使用到一個串口來連接到開(kāi)發(fā)闆執行編寫好(hǎo)的上位機程序,所以一個串口就被(bèi)占用了,正點原子教程視頻就用開(kāi)發(fā)闆的另一個串口來進(jìn)行測試

正點原子教程測試方式

因爲放假回了家,我也沒(méi)有帶太多的東西,usb轉ttl模塊放在了學(xué)校。所以我在想怎麼(me)就用一個串口來完成(chéng)實驗。困擾我的就是唯一的一個串口必須留個上位機,然後(hòu)要怎麼(me)執行開(kāi)發(fā)闆上的串口上位機程序?最初我想到了可以使用網絡通過(guò)Xshell遠程連接到開(kāi)發(fā)闆就可以執行,唯一的串口就拿來驗證。

解決完上位機軟件怎麼(me)在imx6ull上執行的問題,接下來就是驗證了。驗證的時候又出現了一些問題,上位機軟件不像想象的那樣(yàng)一邊發(fā)數據,一邊就接收對(duì)應的數據,而出現了一些imx6ull的信息,好(hǎo)像還(hái)可以輸入命令,感到非常奇怪。

我以爲我的軟件有問題,就在windows上換了一個串口軟件,結果還(hái)是出現了類似的情況

最後(hòu)也是在不斷猜想和測試之後(hòu)找到了原因,就是應因爲我在給開(kāi)發(fā)闆上電的時候接入了串口線,然後(hòu)先打開(kāi)了windows上的串口,然後(hòu)就使用到了串口,導緻就相當于有一個串口控制imx6ull開(kāi)發(fā)闆,像Xshell中通過(guò)串口連接開(kāi)發(fā)闆一樣(yàng)。然後(hòu)我嘗試在windows的上位機軟件輸入命令想打開(kāi)一個qt程序,最後(hòu)也是成(chéng)功打開(kāi)證實了猜想

執行./list命令打開(kāi)了蛇姐list程序(qt程序的路徑是/home/root/qt_project/list)

如果想要實現實驗最初windows和imx6ull兩(liǎng)個上位機互換數據的效果的話。要先通過(guò)windows中的上位機軟件輸入命令來打開(kāi)imx6ull的上位機軟件,這(zhè)樣(yàng)相當于windows中的上位機連接的就是imx6ull的上位機了,而不是直接控制imx6ull了,之後(hòu)就可以正常收發(fā)數據了。

總結:

學(xué)了qt快半個月了,這(zhè)個串口上位機算是一個比較綜合的練習了,結合了ui和代碼設計。加上最後(hòu)的調試也是收獲頗多,如果有usb-ttl模塊的話驗證步驟就會(huì)更簡單。

上位機控制軟件開(kāi)發(fā)

任何一種(zhǒng)面(miàn)向(xiàng)對(duì)象的語言都(dōu)有串口庫。我也研究了一陣子上位機,c水平如果拿著(zhe)資料,還(hái)是可以寫一些小玩意,但是最後(hòu)放棄了,現在是用别人的架構做一點點二次開(kāi)發(fā),說白了就是寫一點小腳本,也可以將(jiāng)就用。上位機開(kāi)發(fā)這(zhè)個不是一年半載就可以搞清晰的。我認爲,所以我放棄了。可能(néng)我有點笨吧。最主要的是作爲個人,我找不到下位機的驅動和c庫(我說的下位機是PLC),而這(zhè)些,我又自己寫不出來。我學(xué)的是c#,我知道(dào)幾個搞機器視覺的。也是用的c#,好(hǎo)多年了,軟件依然bug層出不窮,賣出去的軟件都(dōu)沒(méi)打包封裝,也不知道(dào)怎麼(me)想的。當然,我也麼(me)有嘗試去反編譯他的。。也不一定可以編譯出來。沒(méi)意思

串口屏開(kāi)發(fā)流程是怎樣(yàng)的

串口屏的開(kāi)發(fā)流程

第一:設計自己的UI草圖和邏輯

第二:制作圖片(一般用PS等軟件做,相對(duì)應串口屏的分辨率)

第三 : 使用串口屏廠商提供的上位機和開(kāi)發(fā)資料,設計UI和交互邏輯。

第四:把設計好(hǎo)的工程文件下載到屏幕裡(lǐ)面(miàn),用電腦按照開(kāi)發(fā)文檔的通訊協議發(fā)指令進(jìn)行模拟設計的邏輯。

第五:開(kāi)發(fā)控制闆電路闆和程序。(建議可以用現成(chéng)的開(kāi)發(fā)闆去驗證軟件)

關于串口上位機軟件開(kāi)發(fā)教程和上位機串口助手的介紹到此就結束了,不知道(dào)你從中找到你需要的信息了嗎 ?如果你還(hái)想了解更多這(zhè)方面(miàn)的信息,記得收藏關注本站。

掃碼二維碼