串口上位機軟件開發(fā)教程(串口上位機源碼)
今天給各位分享串口上位機軟件開發(fā)教程的知識,其中也會對串口上位機源碼進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!
本文目錄一覽:
- 1、利用電腦做上位機開發(fā)一個軟件,用單片機做下位機。在上位機上點擊軟件上的按鈕能使單片機輸出一路I/O口
- 2、上位機控制軟件開發(fā)
- 3、如何用access做一個與串口通信的上位機軟件~ 急求~
- 4、正點原子linux開發(fā)板怎么調試
- 5、Keil C51實現單片機與PC串口(上位機)vb如何編寫
- 6、串口屏開發(fā)流程是怎樣的
利用電腦做上位機開發(fā)一個軟件,用單片機做下位機。在上位機上點擊軟件上的按鈕能使單片機輸出一路I/O口
主要涉及到單片機基礎知識,重點是串口通信,上位機可以考慮vc和.net,這兩種都可以。.net使用c#語言,感覺比較好上手,我也可以給你點視頻教程,一學就會。
上位機控制軟件開發(fā)
任何一種面向對象的語言都有串口庫。我也研究了一陣子上位機,c水平如果拿著資料,還是可以寫一些小玩意,但是最后放棄了,現在是用別人的架構做一點點二次開發(fā),說白了就是寫一點小腳本,也可以將就用。上位機開發(fā)這個不是一年半載就可以搞清晰的。我認為,所以我放棄了??赡芪矣悬c笨吧。最主要的是作為個人,我找不到下位機的驅動和c庫(我說的下位機是PLC),而這些,我又自己寫不出來。我學的是c#,我知道幾個搞機器視覺的。也是用的c#,好多年了,軟件依然bug層出不窮,賣出去的軟件都沒打包封裝,也不知道怎么想的。當然,我也么有嘗試去反編譯他的。。也不一定可以編譯出來。沒意思
如何用access做一個與串口通信的上位機軟件~ 急求~
額,這個比較麻煩我之前做過一個但是找不到了,access只不過是個數據庫,上位機實現通信可以用MFC來做。
正點原子linux開發(fā)板怎么調試
ui
正點原子Linux開發(fā)板——Qt串口上位機實驗
門牙會稍息
原創(chuàng)
關注
3點贊·53人閱讀
前言:
最近在學習嵌入式qt開發(fā),然后跟著教程編寫了一個簡單的串口上位機程序,在編寫的時候還算比較順利,但在調試的時候花了點功夫,折騰了一下午。最后還是理清了思路,解決了問題,特寫此博客進行記錄和總結。
串口上位機界面設計:
整個軟件的界面我都是用ui來設計的,其實也可以用代碼,但是想了想有好多布局相互嵌套比較麻煩。最后就使用了ui界面來設計。
ui界面設計
串口上位機程序功能設計:
然后像串口對象初始化,槽函數,一些邏輯關系都用代碼來實現,頭文件就只有一些變量、槽的定義。
頭文件
#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對象
serialPort = new QSerialPort(this);
//通過foreach語句將windows或imx6ull可用串口識別出來,并添加至對應的下拉選擇框
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之后的一些串口配置操作,和一些邏輯關系
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, "串口打開錯誤提示", "可能被占用了");
return;
}
//打開串口之后其他的選擇按鈕設置成不可用
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()
{
//將串口中的數據打印到textBrowser中
ui-textBrowser-insertPlainText(serialPort-readAll());
}
void Widget::on_pushButton_clicked()
{
//點擊“發(fā)送”button之后,將textEdit中的內容寫入串口
serialPort-write(ui-textEdit-toPlainText().toUtf8());
}
void Widget::on_pushButton_2_clicked()
{
//清屏操作
ui-textEdit-clear();
ui-textBrowser-clear();
}
登錄后復制
在windows端編寫好程序之后,將工程文件發(fā)送到ubuntu進行qmake、make最后通過scp將ARM的可執(zhí)行文件發(fā)送到開發(fā)板,接下來就是驗證了
我用的是正點原子出廠的系統(tǒng),所以在驗證的時候需要使用到一個串口來連接到開發(fā)板執(zhí)行編寫好的上位機程序,所以一個串口就被占用了,正點原子教程視頻就用開發(fā)板的另一個串口來進行測試
正點原子教程測試方式
因為放假回了家,我也沒有帶太多的東西,usb轉ttl模塊放在了學校。所以我在想怎么就用一個串口來完成實驗。困擾我的就是唯一的一個串口必須留個上位機,然后要怎么執(zhí)行開發(fā)板上的串口上位機程序?最初我想到了可以使用網絡通過Xshell遠程連接到開發(fā)板就可以執(zhí)行,唯一的串口就拿來驗證。
解決完上位機軟件怎么在imx6ull上執(zhí)行的問題,接下來就是驗證了。驗證的時候又出現了一些問題,上位機軟件不像想象的那樣一邊發(fā)數據,一邊就接收對應的數據,而出現了一些imx6ull的信息,好像還可以輸入命令,感到非常奇怪。
我以為我的軟件有問題,就在windows上換了一個串口軟件,結果還是出現了類似的情況
最后也是在不斷猜想和測試之后找到了原因,就是應因為我在給開發(fā)板上電的時候接入了串口線,然后先打開了windows上的串口,然后就使用到了串口,導致就相當于有一個串口控制imx6ull開發(fā)板,像Xshell中通過串口連接開發(fā)板一樣。然后我嘗試在windows的上位機軟件輸入命令想打開一個qt程序,最后也是成功打開證實了猜想
執(zhí)行./list命令打開了蛇姐list程序(qt程序的路徑是/home/root/qt_project/list)
如果想要實現實驗最初windows和imx6ull兩個上位機互換數據的效果的話。要先通過windows中的上位機軟件輸入命令來打開imx6ull的上位機軟件,這樣相當于windows中的上位機連接的就是imx6ull的上位機了,而不是直接控制imx6ull了,之后就可以正常收發(fā)數據了。
總結:
學了qt快半個月了,這個串口上位機算是一個比較綜合的練習了,結合了ui和代碼設計。加上最后的調試也是收獲頗多,如果有usb-ttl模塊的話驗證步驟就會更簡單。
Keil C51實現單片機與PC串口(上位機)vb如何編寫
.
實現你講的功能,必須用VB中的MSComm控件
MSComm 控件有很多重要的屬性,在開始使用MSComm控件之前。需要先了解其屬性、事件或錯誤。
屬性 描述
CommPort 設置或返回通信端口號
Settings 以字符串的形式設置或返回波特率、奇偶校驗、數據位和停止位
PortOpen 設置或返回通信端口的狀態(tài)。也可以打開和關閉端口
Input 返回和刪除接收緩沖區(qū)中的字符
Output 將字符串寫入發(fā)送緩沖區(qū)
CommEvent 屬性為通信事件或錯誤返回下列值之一。在該控件的對象庫中也可以找到這些常量。
有關具體的描述,找相應的教材仔細看吧。
VB.的MSComm通信控件提供了一系列標準通信命令的接口,它允許建立串口連接,可以連接到其他通信設備(如Modem).還可以發(fā)送命令、進行數據交換以及監(jiān)視和響應在通信過程中可能發(fā)生的各種錯誤和事件,從而可以用它創(chuàng)建全雙工 、事件驅動的、高效實用的通信程序。但在實際通信軟件設計過程中,MSComm控件并非像想像中那樣完美和容易控制.。
一般悅來,計算機都有一個或多個串行端口,它們依次為com1、Com2、…,這些串口還提供了外部設備與pC進行數據傳輸和皿信的通道。這些串口在CPU和外設之間充當解釋器的角色。當字符數據從CPU發(fā)送給外設時,這些字符數據將被轉換成串行比特流數據;當接收數據時,比特流數據被轉換為字符數據傳遞給CPU,再進一步說,在操作系統(tǒng)方面,Windows用通信驅動程序(COMM.DRV)調用API函數發(fā)送和接收數據,當用通信控件或聲明調用API函數時,它門由COMM. DRV解釋并傳遞給設備驅動程序,作為一個vB程序員,要編寫通信程序.只需知道通信控件提供給Windows通信AP1函數的接口即可.換句話說,只需設定和監(jiān)視通信控件的屬性和事件即可。
MSComm控件提供了兩種處理通信的方法:
1.事件驅動通信,是一種功能很強的處理串口活動的方法。在大多數情況下,用戶需要獲知事件發(fā)生的時間,例如,在CD(Carrier Detect)線或RTS(Request To Send)線上有字符到達或發(fā)生了改變等。在這種情況下,使用MSComm控件的OnComm事件捕獲和處理這些通信事件。OnComm也可以捕獲和處理通信中的錯誤。要獲取所有事件和通信錯誤的完整清單,參閱CommEvent屬性。
2.程序員也可以在每個重要的程序功能之后檢查CommEvent屬性的值來檢測事件和通信錯誤。這對小的自含程序可能比較常用。例如,如果編寫一個簡單的電話撥號程序,那么在接收了每個字符后都產生一個事件并沒有意義,因為你只打算從調制解調器中接收OK響應信息。
使用的每個MSComm控件都與一個串口對應。如果在應用程序中需要訪問多個串口,必須使用多個MSComm控件??梢栽赪indows 控制面板中修改串口地址的中斷地址。
用Mscomm控件 編寫通信程序
在VB中新建一個工程文件。
添加Microsoft Comm Control 組件,
在簡體Form1中加入Command命令按鈕并取名為CmdTest,MSComm控件取名為SComm1,加入如下程序代碼。
Private Sub cmdTestClick ( ) '打開串口
MSComml.CommPort =2 '設定Com2
If MSComml.PortOpen = False Then
MSComm1.Settings = "9600,n,8,1" '9600波特率,無校驗,8位數據位,1位停止位
MSComm1.PortOpen = True '打開串口
End if
MSComm1.OutBufferCount = 0 '清空發(fā)送緩沖區(qū)
MSComm1.InBufferCount = 0 '滑空接收緩沖區(qū)
'發(fā)送字符數據時注意必須用回車符(vbcr)結束
MSComm1.Output="This is a qood book ! " vbCr
'潑打電話號碼或發(fā)送AT命令
MSComm1.Output = "ATDT 05778191898 , vbCr
'發(fā)送字符數組數據時注意ByteArray必須事先定義賦值
Dim ByteArray as byte( )
'定義動態(tài)數組
ReDim ByteArray(1)
'重定義數組大小
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
'接收二進制數據
MSComm1.InputMode= ComInputModeBinary
Buffer=MSComm1.Input
'接收字符數據
MSComm1.InputMode=comInputModeText
Buffer = MSComml.Input
Case else
End Select
End sub
串口屏開發(fā)流程是怎樣的
串口屏的開發(fā)流程
第一:設計自己的UI草圖和邏輯
第二:制作圖片(一般用PS等軟件做,相對應串口屏的分辨率)
第三 : 使用串口屏廠商提供的上位機和開發(fā)資料,設計UI和交互邏輯。
第四:把設計好的工程文件下載到屏幕里面,用電腦按照開發(fā)文檔的通訊協(xié)議發(fā)指令進行模擬設計的邏輯。
第五:開發(fā)控制板電路板和程序。(建議可以用現成的開發(fā)板去驗證軟件)
串口上位機軟件開發(fā)教程的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于串口上位機源碼、串口上位機軟件開發(fā)教程的信息別忘了在本站進行查找喔。