亚洲欧美国产日韩综合一卡_人成在线精品日韩_国产成人av在线播放不卡_小仙女导航精品导航_日本最新色网网址_中文無碼久久亞洲_蜜臀av午夜在线_精品三級內地國產在線觀看_狼人色精品视频给你_日朝在线黄色视频

串口上位機(jī)軟件開發(fā)教程(串口上位機(jī)源碼)

軟件開發(fā) 3624
今天給各位分享串口上位機(jī)軟件開發(fā)教程的知識(shí),其中也會(huì)對串口上位機(jī)源碼進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、

今天給各位分享串口上位機(jī)軟件開發(fā)教程的知識(shí),其中也會(huì)對串口上位機(jī)源碼進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!

本文目錄一覽:

利用電腦做上位機(jī)開發(fā)一個(gè)軟件,用單片機(jī)做下位機(jī)。在上位機(jī)上點(diǎn)擊軟件上的按鈕能使單片機(jī)輸出一路I/O口

主要涉及到單片機(jī)基礎(chǔ)知識(shí),重點(diǎn)是串口通信,上位機(jī)可以考慮vc和.net,這兩種都可以。.net使用c#語言,感覺比較好上手,我也可以給你點(diǎn)視頻教程,一學(xué)就會(huì)。

上位機(jī)控制軟件開發(fā)

任何一種面向?qū)ο蟮恼Z言都有串口庫。我也研究了一陣子上位機(jī),c水平如果拿著資料,還是可以寫一些小玩意,但是最后放棄了,現(xiàn)在是用別人的架構(gòu)做一點(diǎn)點(diǎn)二次開發(fā),說白了就是寫一點(diǎn)小腳本,也可以將就用。上位機(jī)開發(fā)這個(gè)不是一年半載就可以搞清晰的。我認(rèn)為,所以我放棄了??赡芪矣悬c(diǎn)笨吧。最主要的是作為個(gè)人,我找不到下位機(jī)的驅(qū)動(dòng)和c庫(我說的下位機(jī)是PLC),而這些,我又自己寫不出來。我學(xué)的是c#,我知道幾個(gè)搞機(jī)器視覺的。也是用的c#,好多年了,軟件依然bug層出不窮,賣出去的軟件都沒打包封裝,也不知道怎么想的。當(dāng)然,我也么有嘗試去反編譯他的。。也不一定可以編譯出來。沒意思

如何用access做一個(gè)與串口通信的上位機(jī)軟件~ 急求~

額,這個(gè)比較麻煩我之前做過一個(gè)但是找不到了,access只不過是個(gè)數(shù)據(jù)庫,上位機(jī)實(shí)現(xiàn)通信可以用MFC來做。

正點(diǎn)原子linux開發(fā)板怎么調(diào)試

ui

正點(diǎn)原子Linux開發(fā)板——Qt串口上位機(jī)實(shí)驗(yàn)

門牙會(huì)稍息

原創(chuàng)

關(guān)注

3點(diǎn)贊·53人閱讀

前言:

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

串口上位機(jī)界面設(shè)計(jì):

整個(gè)軟件的界面我都是用ui來設(shè)計(jì)的,其實(shí)也可以用代碼,但是想了想有好多布局相互嵌套比較麻煩。最后就使用了ui界面來設(shè)計(jì)。

ui界面設(shè)計(jì)

串口上位機(jī)程序功能設(shè)計(jì):

然后像串口對象初始化,槽函數(shù),一些邏輯關(guān)系都用代碼來實(shí)現(xiàn),頭文件就只有一些變量、槽的定義。

頭文件

#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 一個(gè)QSerialPort對象

serialPort = new QSerialPort(this);

//通過foreach語句將windows或imx6ull可用串口識(shí)別出來,并添加至對應(yīng)的下拉選擇框

QStringList serialList;

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

serialList += info.portName();

}

ui-comboBox-addItems(serialList);

//設(shè)置串口的信號(hào)與槽

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

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_radioButton_clicked(bool checked)

{

//點(diǎn)擊“打卡串口”button之后的一些串口配置操作,和一些邏輯關(guān)系

if(checked){

//設(shè)置串口端

serialPort-setPortName(ui-comboBox-currentText());

//設(shè)置波特率

serialPort-setBaudRate(ui-comboBox_2-currentText().toInt());

//設(shè)置停止位

serialPort-setStopBits(QSerialPort::StopBits(ui-comboBox_4-currentText().toInt()));

//設(shè)置數(shù)據(jù)位

serialPort-setDataBits(QSerialPort::DataBits(ui-comboBox_6-currentText().toInt()));

//設(shè)置校驗(yàn)位

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, "串口打開錯(cuò)誤提示", "可能被占用了");

return;

}

//打開串口之后其他的選擇按鈕設(shè)置成不可用

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("關(guān)閉串口");

}

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()

{

//將串口中的數(shù)據(jù)打印到textBrowser中

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

}

void Widget::on_pushButton_clicked()

{

//點(diǎn)擊“發(fā)送”button之后,將textEdit中的內(nèi)容寫入串口

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

}

void Widget::on_pushButton_2_clicked()

{

//清屏操作

ui-textEdit-clear();

ui-textBrowser-clear();

}

登錄后復(fù)制

在windows端編寫好程序之后,將工程文件發(fā)送到ubuntu進(jìn)行qmake、make最后通過scp將ARM的可執(zhí)行文件發(fā)送到開發(fā)板,接下來就是驗(yàn)證了

我用的是正點(diǎn)原子出廠的系統(tǒng),所以在驗(yàn)證的時(shí)候需要使用到一個(gè)串口來連接到開發(fā)板執(zhí)行編寫好的上位機(jī)程序,所以一個(gè)串口就被占用了,正點(diǎn)原子教程視頻就用開發(fā)板的另一個(gè)串口來進(jìn)行測試

正點(diǎn)原子教程測試方式

因?yàn)榉偶倩亓思?,我也沒有帶太多的東西,usb轉(zhuǎn)ttl模塊放在了學(xué)校。所以我在想怎么就用一個(gè)串口來完成實(shí)驗(yàn)。困擾我的就是唯一的一個(gè)串口必須留個(gè)上位機(jī),然后要怎么執(zhí)行開發(fā)板上的串口上位機(jī)程序?最初我想到了可以使用網(wǎng)絡(luò)通過Xshell遠(yuǎn)程連接到開發(fā)板就可以執(zhí)行,唯一的串口就拿來驗(yàn)證。

解決完上位機(jī)軟件怎么在imx6ull上執(zhí)行的問題,接下來就是驗(yàn)證了。驗(yàn)證的時(shí)候又出現(xiàn)了一些問題,上位機(jī)軟件不像想象的那樣一邊發(fā)數(shù)據(jù),一邊就接收對應(yīng)的數(shù)據(jù),而出現(xiàn)了一些imx6ull的信息,好像還可以輸入命令,感到非常奇怪。

我以為我的軟件有問題,就在windows上換了一個(gè)串口軟件,結(jié)果還是出現(xiàn)了類似的情況

最后也是在不斷猜想和測試之后找到了原因,就是應(yīng)因?yàn)槲以诮o開發(fā)板上電的時(shí)候接入了串口線,然后先打開了windows上的串口,然后就使用到了串口,導(dǎo)致就相當(dāng)于有一個(gè)串口控制imx6ull開發(fā)板,像Xshell中通過串口連接開發(fā)板一樣。然后我嘗試在windows的上位機(jī)軟件輸入命令想打開一個(gè)qt程序,最后也是成功打開證實(shí)了猜想

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

如果想要實(shí)現(xiàn)實(shí)驗(yàn)最初windows和imx6ull兩個(gè)上位機(jī)互換數(shù)據(jù)的效果的話。要先通過windows中的上位機(jī)軟件輸入命令來打開imx6ull的上位機(jī)軟件,這樣相當(dāng)于windows中的上位機(jī)連接的就是imx6ull的上位機(jī)了,而不是直接控制imx6ull了,之后就可以正常收發(fā)數(shù)據(jù)了。

總結(jié):

學(xué)了qt快半個(gè)月了,這個(gè)串口上位機(jī)算是一個(gè)比較綜合的練習(xí)了,結(jié)合了ui和代碼設(shè)計(jì)。加上最后的調(diào)試也是收獲頗多,如果有usb-ttl模塊的話驗(yàn)證步驟就會(huì)更簡單。

Keil C51實(shí)現(xiàn)單片機(jī)與PC串口(上位機(jī))vb如何編寫

.

實(shí)現(xiàn)你講的功能,必須用VB中的MSComm控件

MSComm 控件有很多重要的屬性,在開始使用MSComm控件之前。需要先了解其屬性、事件或錯(cuò)誤。

屬性 描述

CommPort 設(shè)置或返回通信端口號(hào)

Settings 以字符串的形式設(shè)置或返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位

PortOpen 設(shè)置或返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口

Input 返回和刪除接收緩沖區(qū)中的字符

Output 將字符串寫入發(fā)送緩沖區(qū)

CommEvent 屬性為通信事件或錯(cuò)誤返回下列值之一。在該控件的對象庫中也可以找到這些常量。

有關(guān)具體的描述,找相應(yīng)的教材仔細(xì)看吧。

VB.的MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備(如Modem).還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯(cuò)誤和事件,從而可以用它創(chuàng)建全雙工 、事件驅(qū)動(dòng)的、高效實(shí)用的通信程序。但在實(shí)際通信軟件設(shè)計(jì)過程中,MSComm控件并非像想像中那樣完美和容易控制.。

一般悅來,計(jì)算機(jī)都有一個(gè)或多個(gè)串行端口,它們依次為com1、Com2、…,這些串口還提供了外部設(shè)備與pC進(jìn)行數(shù)據(jù)傳輸和皿信的通道。這些串口在CPU和外設(shè)之間充當(dāng)解釋器的角色。當(dāng)字符數(shù)據(jù)從CPU發(fā)送給外設(shè)時(shí),這些字符數(shù)據(jù)將被轉(zhuǎn)換成串行比特流數(shù)據(jù);當(dāng)接收數(shù)據(jù)時(shí),比特流數(shù)據(jù)被轉(zhuǎn)換為字符數(shù)據(jù)傳遞給CPU,再進(jìn)一步說,在操作系統(tǒng)方面,Windows用通信驅(qū)動(dòng)程序(COMM.DRV)調(diào)用API函數(shù)發(fā)送和接收數(shù)據(jù),當(dāng)用通信控件或聲明調(diào)用API函數(shù)時(shí),它門由COMM. DRV解釋并傳遞給設(shè)備驅(qū)動(dòng)程序,作為一個(gè)vB程序員,要編寫通信程序.只需知道通信控件提供給Windows通信AP1函數(shù)的接口即可.換句話說,只需設(shè)定和監(jiān)視通信控件的屬性和事件即可。

MSComm控件提供了兩種處理通信的方法:

1.事件驅(qū)動(dòng)通信,是一種功能很強(qiáng)的處理串口活動(dòng)的方法。在大多數(shù)情況下,用戶需要獲知事件發(fā)生的時(shí)間,例如,在CD(Carrier Detect)線或RTS(Request To Send)線上有字符到達(dá)或發(fā)生了改變等。在這種情況下,使用MSComm控件的OnComm事件捕獲和處理這些通信事件。OnComm也可以捕獲和處理通信中的錯(cuò)誤。要獲取所有事件和通信錯(cuò)誤的完整清單,參閱CommEvent屬性。

2.程序員也可以在每個(gè)重要的程序功能之后檢查CommEvent屬性的值來檢測事件和通信錯(cuò)誤。這對小的自含程序可能比較常用。例如,如果編寫一個(gè)簡單的電話撥號(hào)程序,那么在接收了每個(gè)字符后都產(chǎn)生一個(gè)事件并沒有意義,因?yàn)槟阒淮蛩銖恼{(diào)制解調(diào)器中接收OK響應(yīng)信息。

使用的每個(gè)MSComm控件都與一個(gè)串口對應(yīng)。如果在應(yīng)用程序中需要訪問多個(gè)串口,必須使用多個(gè)MSComm控件??梢栽赪indows 控制面板中修改串口地址的中斷地址。

用Mscomm控件 編寫通信程序

在VB中新建一個(gè)工程文件。

添加Microsoft Comm Control 組件,

在簡體Form1中加入Command命令按鈕并取名為CmdTest,MSComm控件取名為SComm1,加入如下程序代碼。

Private Sub cmdTestClick ( ) '打開串口

MSComml.CommPort =2 '設(shè)定Com2

If MSComml.PortOpen = False Then

MSComm1.Settings = "9600,n,8,1" '9600波特率,無校驗(yàn),8位數(shù)據(jù)位,1位停止位

MSComm1.PortOpen = True '打開串口

End if

MSComm1.OutBufferCount = 0 '清空發(fā)送緩沖區(qū)

MSComm1.InBufferCount = 0 '滑空接收緩沖區(qū)

'發(fā)送字符數(shù)據(jù)時(shí)注意必須用回車符(vbcr)結(jié)束

MSComm1.Output="This is a qood book ! " vbCr

'潑打電話號(hào)碼或發(fā)送AT命令

MSComm1.Output = "ATDT 05778191898 , vbCr

'發(fā)送字符數(shù)組數(shù)據(jù)時(shí)注意ByteArray必須事先定義賦值

Dim ByteArray as byte( )

'定義動(dòng)態(tài)數(shù)組

ReDim ByteArray(1)

'重定義數(shù)組大小

ByteArray ( 0 ) =0

ByteArray ( 1 ) = 1

MSComm1.Output = ByteArray

End Sub

private Sub MScommEvent( )

Select Case MSComm1.CommEvent

Case comEvReceive

Dim Buffer As Variant

MSComm1.InputLen = 0

'接收二進(jìn)制數(shù)據(jù)

MSComm1.InputMode= ComInputModeBinary

Buffer=MSComm1.Input

'接收字符數(shù)據(jù)

MSComm1.InputMode=comInputModeText

Buffer = MSComml.Input

Case else

End Select

End sub

串口屏開發(fā)流程是怎樣的

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

第一:設(shè)計(jì)自己的UI草圖和邏輯

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

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

第四:把設(shè)計(jì)好的工程文件下載到屏幕里面,用電腦按照開發(fā)文檔的通訊協(xié)議發(fā)指令進(jìn)行模擬設(shè)計(jì)的邏輯。

第五:開發(fā)控制板電路板和程序。(建議可以用現(xiàn)成的開發(fā)板去驗(yàn)證軟件)

串口上位機(jī)軟件開發(fā)教程的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于串口上位機(jī)源碼、串口上位機(jī)軟件開發(fā)教程的信息別忘了在本站進(jìn)行查找喔。

掃碼二維碼