串口上位机软件开发教程(上位机串口助手)

软件开发 4066
本篇文章给大家谈谈串口上位机软件开发教程,以及上位机串口助手对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、正点原子linux开发板怎么调试

本篇文章给大家谈谈串口上位机软件开发教程,以及上位机串口助手对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

正点原子linux开发板怎么调试

ui

正点原子Linux开发板——Qt串口上位机实验

门牙会稍息

原创

关注

3点赞·53人阅读

前言:

最近在学习嵌入式qt开发,然后跟着教程编写了一个简单的串口上位机程序,在编写的时候还算比较顺利,但在调试的时候花了点功夫,折腾了一下午。最后还是理清了思路,解决了问题,特写此博客进行记录和总结。

串口上位机界面设计:

整个软件的界面我都是用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()

{

//点击“发送”button之后,将textEdit中的内容写入串口

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

}

void Widget::on_pushButton_2_clicked()

{

//清屏操作

ui-textEdit-clear();

ui-textBrowser-clear();

}

登录后复制

在windows端编写好程序之后,将工程文件发送到ubuntu进行qmake、make最后通过scp将ARM的可执行文件发送到开发板,接下来就是验证了

我用的是正点原子出厂的系统,所以在验证的时候需要使用到一个串口来连接到开发板执行编写好的上位机程序,所以一个串口就被占用了,正点原子教程视频就用开发板的另一个串口来进行测试

正点原子教程测试方式

因为放假回了家,我也没有带太多的东西,usb转ttl模块放在了学校。所以我在想怎么就用一个串口来完成实验。困扰我的就是唯一的一个串口必须留个上位机,然后要怎么执行开发板上的串口上位机程序?最初我想到了可以使用网络通过Xshell远程连接到开发板就可以执行,唯一的串口就拿来验证。

解决完上位机软件怎么在imx6ull上执行的问题,接下来就是验证了。验证的时候又出现了一些问题,上位机软件不像想象的那样一边发数据,一边就接收对应的数据,而出现了一些imx6ull的信息,好像还可以输入命令,感到非常奇怪。

我以为我的软件有问题,就在windows上换了一个串口软件,结果还是出现了类似的情况

最后也是在不断猜想和测试之后找到了原因,就是应因为我在给开发板上电的时候接入了串口线,然后先打开了windows上的串口,然后就使用到了串口,导致就相当于有一个串口控制imx6ull开发板,像Xshell中通过串口连接开发板一样。然后我尝试在windows的上位机软件输入命令想打开一个qt程序,最后也是成功打开证实了猜想

执行./list命令打开了蛇姐list程序(qt程序的路径是/home/root/qt_project/list)

如果想要实现实验最初windows和imx6ull两个上位机互换数据的效果的话。要先通过windows中的上位机软件输入命令来打开imx6ull的上位机软件,这样相当于windows中的上位机连接的就是imx6ull的上位机了,而不是直接控制imx6ull了,之后就可以正常收发数据了。

总结:

学了qt快半个月了,这个串口上位机算是一个比较综合的练习了,结合了ui和代码设计。加上最后的调试也是收获颇多,如果有usb-ttl模块的话验证步骤就会更简单。

如何用access做一个与串口通信的上位机软件~ 急求~

额,这个比较麻烦我之前做过一个但是找不到了,access只不过是个数据库,上位机实现通信可以用MFC来做。

串口屏开发流程是怎样的

串口屏的开发流程

第一:设计自己的UI草图和逻辑

第二:制作图片(一般用PS等软件做,相对应串口屏的分辨率)

第三 : 使用串口屏厂商提供的上位机和开发资料,设计UI和交互逻辑。

第四:把设计好的工程文件下载到屏幕里面,用电脑按照开发文档的通讯协议发指令进行模拟设计的逻辑。

第五:开发控制板电路板和程序。(建议可以用现成的开发板去验证软件)

Keil C51实现单片机与PC串口(上位机)vb如何编写

.

实现你讲的功能,必须用VB中的MSComm控件

MSComm 控件有很多重要的属性,在开始使用MSComm控件之前。需要先了解其属性、事件或错误。

属性 描述

CommPort 设置或返回通信端口号

Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位

PortOpen 设置或返回通信端口的状态。也可以打开和关闭端口

Input 返回和删除接收缓冲区中的字符

Output 将字符串写入发送缓冲区

CommEvent 属性为通信事件或错误返回下列值之一。在该控件的对象库中也可以找到这些常量。

有关具体的描述,找相应的教材仔细看吧。

VB.的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。但在实际通信软件设计过程中,MSComm控件并非像想像中那样完美和容易控制.。

一般悦来,计算机都有一个或多个串行端口,它们依次为com1、Com2、…,这些串口还提供了外部设备与pC进行数据传输和皿信的通道。这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据,当用通信控件或声明调用API函数时,它门由COMM. DRV解释并传递给设备驱动程序,作为一个vB程序员,要编写通信程序.只需知道通信控件提供给Windows通信AP1函数的接口即可.换句话说,只需设定和监视通信控件的属性和事件即可。

MSComm控件提供了两种处理通信的方法:

1.事件驱动通信,是一种功能很强的处理串口活动的方法。在大多数情况下,用户需要获知事件发生的时间,例如,在CD(Carrier Detect)线或RTS(Request To Send)线上有字符到达或发生了改变等。在这种情况下,使用MSComm控件的OnComm事件捕获和处理这些通信事件。OnComm也可以捕获和处理通信中的错误。要获取所有事件和通信错误的完整清单,参阅CommEvent属性。

2.程序员也可以在每个重要的程序功能之后检查CommEvent属性的值来检测事件和通信错误。这对小的自含程序可能比较常用。例如,如果编写一个简单的电话拨号程序,那么在接收了每个字符后都产生一个事件并没有意义,因为你只打算从调制解调器中接收OK响应信息。

使用的每个MSComm控件都与一个串口对应。如果在应用程序中需要访问多个串口,必须使用多个MSComm控件。可以在Windows 控制面板中修改串口地址的中断地址。

用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 '清空发送缓冲区

MSComm1.InBufferCount = 0 '滑空接收缓冲区

'发送字符数据时注意必须用回车符(vbcr)结束

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

'泼打电话号码或发送AT命令

MSComm1.Output = "ATDT 05778191898 , vbCr

'发送字符数组数据时注意ByteArray必须事先定义赋值

Dim ByteArray as byte( )

'定义动态数组

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

上位机控制软件开发

任何一种面向对象的语言都有串口库。我也研究了一阵子上位机,c水平如果拿着资料,还是可以写一些小玩意,但是最后放弃了,现在是用别人的架构做一点点二次开发,说白了就是写一点小脚本,也可以将就用。上位机开发这个不是一年半载就可以搞清晰的。我认为,所以我放弃了。可能我有点笨吧。最主要的是作为个人,我找不到下位机的驱动和c库(我说的下位机是PLC),而这些,我又自己写不出来。我学的是c#,我知道几个搞机器视觉的。也是用的c#,好多年了,软件依然bug层出不穷,卖出去的软件都没打包封装,也不知道怎么想的。当然,我也么有尝试去反编译他的。。也不一定可以编译出来。没意思

利用电脑做上位机开发一个软件,用单片机做下位机。在上位机上点击软件上的按钮能使单片机输出一路I/O口

主要涉及到单片机基础知识,重点是串口通信,上位机可以考虑vc和.net,这两种都可以。.net使用c#语言,感觉比较好上手,我也可以给你点视频教程,一学就会。

串口上位机软件开发教程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于上位机串口助手、串口上位机软件开发教程的信息别忘了在本站进行查找喔。

扫码二维码