精华内容
下载资源
问答
  • stm32用匿名上位机V65串口通信,数据用波形显示,便于观察,单片机stm32C8T6,可移植,stm32用匿名上位机串口通信,数据用波形显示,便于观察,单片机stm32C8T6,可移植
  • STM32开发esp8266,利用TCP协议通过路由器发送数据至PC机,PC机VS端socket接收并利用QT将接收的数据显示。只做示例。
  • 上位机是采用MFC编写,可用于显示位图数据,按下回车键修改图片的尺寸,双击可打开文件,容错范围为3个bit
  • 本人设计的上位机主要分为信号图像显示区、按键和参数设置区和文字信息区三大部分。 整个上位机软件主要分为三部分: 1. 启动和关闭 Geant4 物理仿真软件并且设置相关参数。 2. 显示探测器能量沉积数字信号。 3. ...

    图像界面上位机软件

    上位机软件功能

    本人设计的上位机主要分为信号图像显示区、按键和参数设置区和文字信息区三大部分。 整个上位机软件主要分为三部分: 1. 启动和关闭 Geant4 物理仿真软件并且设置相关参数。 2. 显示探测器能量沉积数字信号。 3. 显示 TCP连接状态信息和 Geant 4 探测器能量沉积。

    但是有一点我很不理解,为了实现每次接收到TCP数据帧,都能够更新信号图像,我把new空间放到了header文件中,在cpp文件的doProcessNewConnect函数中怎么都没有办法实现。本人觉得这是不好的编程习惯但是也是无奈之举。。。如果你知道欢迎回复!

    mainwindow.h

    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
        void begin_G4();
        void Qt_Tcp();
        void receive();
        void doProcessNewConnect(QByteArray);
    
        DataTable generateRandomData(int listCount, int valueMax, int valueCount) const;
    
        QTcpServer *TcpServer;
        QTcpSocket *TcpSocket;
        QChart *chart = new QChart();
        QLineSeries *series2 = new QLineSeries(chart); //初始化一条折线  chart
        QChartView *chartView = new QChartView(chart);
        QVBoxLayout * pre;
        QByteArray array1;
        
        QProcess *poc;
        QByteArray output1;
        QString str_output1;
        void on_readoutput();
    
    private slots:
    
        void on_pushButton_close_clicked();
    
    private:
        Ui::MainWindow *ui;
    };
    

    mianwindows.cpp

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        ui->spinBox->setValue(1);
        ui->spinBox_2->setValue(1);
        //TCP Server
        //指定父对象,让其自动回收空间
        TcpServer = NULL;
        TcpSocket = NULL;
        TcpServer = new QTcpServer();
        TcpServer->listen(QHostAddress::Any, 8000);
        if(!TcpServer)//服务器打开失败
        {
            ui->textEdit->append("cannot open the TCP server!");//追加显示
            ui->textEdit->append("\n");
            return;
        }
        setWindowTitle("server port : 8000");
        connect(TcpServer, &QTcpServer::newConnection,
                this, &MainWindow::receive);
        connect(ui->pushButton_begin, &QPushButton::pressed, this, &MainWindow::begin_G4);
        //ui->pushButton信号发出者,&QPushButton::pressed 处理信号,发送者的类名::信号名字
        //this 信号接受者
        //&MainWindow::begin_G4槽函数,信号处理函数  接受者类名::槽函数名字
        connect(poc, &QProcess::readyReadStandardOutput,
                this, &MainWindow::on_readoutput);    
    }
    
    void MainWindow::receive()
    {
        //取出建立好连接的套接字
        TcpSocket = TcpServer->nextPendingConnection();
        QString ip = TcpSocket->peerAddress().toString();
        qint16 port1 = TcpSocket->peerPort();
        QString port2 = QString::number(port1);
        ui->textEdit->append("Tcp client address :");
        ui->textEdit->append(ip);
        ui->textEdit->append("\n");
        ui->textEdit->append("Tcp client port :");
        ui->textEdit->append(port2);
        ui->textEdit->append("\n");
    
        connect(TcpSocket, &QTcpSocket::readyRead, this,
                &MainWindow::read_data);
    
    }
    
    void MainWindow::read_data()
    {
        array_read_data = TcpSocket->readAll();
        doProcessNewConnect(array_read_data);
        array_read_data.clear();
    }
    
    void MainWindow::doProcessNewConnect(QByteArray array1)
    {
        QList<QPointF> Data2;
        QPointF point1;
       //int nameIndex = 0;
        int number1 = 0;  //读取出TCP帧中传输的数据量
        for(int ii=0;ii<3;ii++)
        { //把ASII码转换为int类型
            number1 += (array1[ii]-48) * qPow(10, 2-ii);
        }
        int gg=3;
        int sequence = 9;
        ui->textEdit->append("energy deposition :");
        for(int nn=0; nn<number1; nn++)
          {
              QByteArray array3;
              float number4 = 0.0;  
              int number3[3];
              for(int mm=0; mm<3; mm++)
              {
                  number3[mm] = array1[gg+mm] - 48;
                  number4 += (array1[gg+mm] - 48) * qPow(10, -mm);
                  qDebug()<<"number4 = "<<number4;
                  QString data = QString("float is %1").arg(number4);
                  ui->textEdit->append(data);
              }
              qDebug()<<"QByteArray number3 : "
               <<number3[0]
               <<number3[1]
               <<number3[2];
              //qDebug()<<"number4="<<number4;
              point1.setX(sequence);
              point1.setY(number4);
              Data2.append(point1);
              if(nn%5==0) sequence += 6;
              else if(nn%5==1) sequence +=5;
              else if(nn%5==2) sequence +=7;
              else if(nn%5==3) sequence +=6;
              else if(nn%5==4) sequence +=5;
              gg +=3;
          }
       chart->addSeries(series2);//chart中添加一条折线
       QString name("energy deposition ");
       series2->setName(name);//折线设置名字
       series2->replace(Data2);
       chart->createDefaultAxes();// 创建坐标
       chart->axes(Qt::Vertical).first()->setRange(0, 10);//设置纵坐标范围
       // Add space to label to add space between labels and axis
       QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
       //利用qobject_cast进行安全转换,将QAbstractAxis类型的变量转换为QVasequencelueAxis,为的是在下面使用->setLabelFormat("%.1f  ")
       Q_ASSERT(axisY);//当axisY == 0时,程序会中断
       axisY->setLabelFormat("%.2f  ");//设置坐标的值精确到小数点后2位
       //chart->legend()->hide();//隐藏图例
       chart->legend()->setAlignment(Qt::AlignTop);//设置图例位置在顶部
       chart->setAnimationOptions(QChart::GridAxisAnimations);//设置动画效果,在第一次显示图表或者更改图标区域大小的时候会显示动画效果
       chart->axes(Qt::Horizontal).first()->setRange(0, sequence);//设置横坐标范围
       //ui->widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
       pre = ui->verticalLayout;  //new QVBoxLayout(ui->widget)
       pre->addWidget(chartView);
    }
    
    void MainWindow::begin_G4()
    {
        //spinbox
        QString detector_number;
        ui->spinBox->setValue(55);
        ui->spinBox->setRange(1, 100);
        ui->spinBox->setSingleStep(1);
        ui->spinBox->setWrapping(true);
        //get the number
        detector_number = ui->spinBox->text();
    
        //spinbox
        QString emitted_particle;
        ui->spinBox_2->setRange(1, 10000);
        ui->spinBox_2->setSingleStep(1);
    
        ui->spinBox_2->setWrapping(true);
        //get the number
        emitted_particle = ui->spinBox_2->text();
    
        //新建run_mao.mac文件,并且执行,每次对文件覆盖之后重新写入
        QFile file("/home/zx/maojunjie/NeutronSource/build/run_mao.mac");
        //(/home/zx/maojunjie/NeutronSource/build/run_mao.mac, D:/run_mao.mac)
        file.open(QIODevice::WriteOnly | QIODevice::Text);
        QString a1 = "/control/verbose 2\r\n";
        file.write(a1.toUtf8());
        QString a2 = "/run/verbose 1\r\n";
        file.write(a2.toUtf8());
        QString a3 = "/testhadr/stepping/seDSN " + detector_number + "\r\n";
        file.write(a3.toUtf8());
        QString a4 = "/run/initialize\r\n";
        file.write(a4.toUtf8());
        QString a5 = "/process/list\r\n";
        file.write(a5.toUtf8());
        QString a6 = "/gun/particle ion\r\n";
        file.write(a6.toUtf8());
        QString a7 = "/gun/ion 95 241\r\n";
        file.write(a7.toUtf8());
        QString a8 = "/gun/energy 0. eV\r\n";
        file.write(a8.toUtf8());
        QString a9 = "/run/printProgress " + emitted_particle + "\r\n";
        file.write(a9.toUtf8());
        QString a10 = "/run/beamOn " + emitted_particle + "\r\n";
        file.write(a10.toUtf8());
        file.close();
        
        //启动bash命令,写入命令并且执行,启动Geant 4物理仿真软件
        poc->start("bash");
        poc->waitForFinished();
    
        poc->write("source /home/zx/Main_Install/geant4.10.05.p01-install/bin/geant4.sh\n");
        poc->waitForFinished();
    	
        poc->write("cd /home/zx/maojunjie/NeutronSource/build\n");
    
        poc->write("./NeutronSource run_mao.mac\n");
    }
    
    //读取运行bash的信息
    void MainWindow::on_readoutput()
    {
        ui->textEdit->append(poc->readAllStandardOutput().data());
    }
    

    上位机软件界面

    展开全文
  • 首先已经编写完了上位机接收数据的程序也实现了在textbox控件中实时显示但是传上来的数据是一组xy坐标值我想如何可以在两个textbox控件中分别显示xy也就是把一组数据分开。因为后面还要利用xy值作图。目前我只能把xy...
  • 利用上位机显示毫米波雷达数据

    千次阅读 热门讨论 2019-11-23 22:55:48
     实验室中用的是德尔福(Delphi ESR)毫米波雷达,下面将详细介绍使用这款...想要利用自带的上位机显示毫米波的数据,需要用到 kvaser can读取毫米波的数据。 整个连接图如下所示: ![在这里插入图片描述](https:...

    实验室中用的是德尔福(Delphi ESR)毫米波雷达,记录一下使用这款毫米波雷达自带的上位机显示数据过程。

    1. 毫米波雷达的供电

     查阅ESR的说明手册,发现输入电压是在DC8-16V之间。实际的使用中,使用12V直流电给毫米波供电,如下图所示:

    2. 使用kvaser can

     想要利用自带的上位机显示毫米波的数据,需要用到kvaser can工具。首先需要安装kvaser can的驱动,驱动下载链接:kvaser_can_driver。毫米波和kvaser can的整个连接图,如下所示:

    在这里插入图片描述
    通过DB9的转接头将毫米波的can_H和can_L转接,接到kvaser can上。实际连接如下所示:

    在这里插入图片描述

    3. 利用DV_esr上位机查看毫米波数据

     打开上位机左上角下拉栏选择DV_esr,在Settings->CAN Bus中选择通道1,确定。再点击左上角的Receive,就可以看到毫米波的数据。成功读取到数据时候,kvaser can的can指示灯,会有颜色指示,如下图所示:

    在这里插入图片描述

    4. 相关资料

    资料在这里,大家可以下载:没有积分的话,直接留言吧,有积分的话支持一下~

    毫米波相关资料

    展开全文
  • LabVIEW实现接受串口数据并绘制波形的上位机

    千次阅读 多人点赞 2019-10-29 22:57:18
    最近学LabVIEW的时候,用LabVIEW搭建了一个可以接受串口数据显示波形的上位机,在这里分享一下。 有需要的朋友可以在下面这个链接下载: 『上位机链接』 串口连接到电脑上后,会在设备中显示出来 『设备图』 我们...

    PC版本:Win10家庭版
    LabVIEW:LabVIEW2018

    最近学LabVIEW的时候,用LabVIEW搭建了一个可以接受串口数据并显示波形的上位机,在这里分享一下。

    搭建步骤如下:

    1、连接串口

    串口连接到电脑上后,会在设备中显示出来
    『设备图』

    2、搜索串口

    我们需要在LabVIEW的控件中添加VISA资源名称来搜索到串口资源
    『VISA』

    3、配置串口的参数

    调用“VISA配置串口”函数进行配置
    『参数』

    4、读取缓存区字节数

    因为只需要接受到串口发送过来的数据即可,这里只介绍数据接受部分。
    单片机通过串口发送数据到LabVIEW上后,可以理解为数据储存在一个缓存区中,我们通过属性节点访问中该缓存区中接受到的字节数,当字节数大于0时,意味着我们可以读取缓存区中数据,缓存区中数据一经读取就不会出现在缓存区了。
    调用属性节点,选择Bytes at Port
    【属性节点】
    添加一个布尔输入控件,命名为“开始接受”,当字节数大于零且按下该按钮时,开始接受数据,否则不接受数据,于是需要添加一个条件结构
    『条件结构+按钮+比较』
    我们先讨论条件为真的情况,此时缓存区中有一定数量的字节。我们需要用到读取VISA函数去读取它们,读取字节数可以从Bytes at Port中得到
    『读取VISA』

    5、拼接读取的字符串

    如果串口接受到了很长的一个字符串,那么我们使用“读取VISA”时,可能出现仅读取了部分字节的情况,所以我们需要将它们拼接到一起。或者我们想将所有接受到的字符都显示在屏幕上,也需要使用字符串拼接函数将接受到的数据同以往接受的数据连接起来。
    在拼接的时候,我们需要使用反馈节点将上次循环中的字符与此次循环接受到的字符串拼接起来。

    6、从字符串中获取整型数据

    我们这里期望接受的是从串口传输过来的整形数据,并显示在波形图表上。于是需要在每接受到一个整形数据后,将反馈节点置为空字符串。
    我们需要先简单自定义一个整型数据传输的格式,这里我定义的是:每个整型数据,如123,转化为字符串“123”进行传输,且每个字符串以转义字符’\n’结束。
    显然每次检测到’\n’,就意味着接受到了一个整型数据。
    LabVIEW中提供了一个字符串替换函数,可以将字符串中某个字符替换成其他字符,这里使用该函数用空字符替换’\n’,替换后,函数返回去掉’\n’的字符串(因为用空字符,相当于删除’\n’),并返回替换个数。

    当替换个数大于0时,说明接受到的字符串中含有’\n’,说明接收到了一个整型数据。
    当替换个数等于0时,说明接受到的字符串中没有’\n’,说明没有接受到完成的整型数据,继续拼接字符串。
    在这里插入图片描述
    在这里插入图片描述
    当接受到一个整型数据后,使用“十进制数字字符串至数值转化”函数,将“123”这样的字符串转化为整数123,然后输入波形图表,即可显示出整型数据。

    7、结果演示

    这里采用正点原子的mini板发射串口数据,主要语句如下:
    在这里插入图片描述
    接受的波形如下:
    在这里插入图片描述

    展开全文
  • C#多功能上位机,智能车上位机,附赠源码 C#多功能上位机,可以通过串口、蓝牙传输接受数据。可以作为串口助手接收数据;可以实时动态显示曲线,最多支持8条曲线同步显示;可以支持线阵CCD动态显示调节;可以支持SD...

    C#多功能上位机,智能车上位机,附赠源码 C#多功能上位机,可以通过串口、蓝牙传输接受数据。可以作为串口助手接收数据;可以实时动态显示曲线,最多支持8条曲线同步显示;可以支持线阵CCD动态显示调节;可以支持SD卡记录数据分析,有助于调试。购买附赠C#源码。

    请添加图片描述

    展开全文
  • 用c#编写的上位机软件实时接收串口数据,用dataGridView显示所读取的数据,并写入TXT, 用chart把数据绘制成波形,有放大缩小功能(功能有待完善),chart有两条游标。资源如有不足请留言指教。
  • 开始用的是VISA串口设置接受数据与我用串口助手接受数据不一样。 然后我到网上查了一下看见用人用labview LIFA可以调出adruino专用的控件;但是现在我到VIPM 没找到LIFA,然后说是用LINX 就帮忙看下是不是图中...
  • 现在遇到一个问题,下位机发送两个数据上位机上位机可以正确按字节接受到了。剩余的是将两个字节数据合并成一个整数,用于波形显示。具体如下 单片机要发送的数据是: short pitch=50,roll=280 上位机按照...
  • 那么,当你得到MPU6050的数据的时候,如果是: FFFF,那么代表多少呢? >>符号位不变,数值部分的各位取反, 变成8000,然后整个数加1,变成8001, 即-1. 如果是: FF00,那么代表多少呢? >>符号位不变,...
  • 以下代码是接受数据显示在textbox的代码。怎么修改能达到以上的要求? ``` private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReDatas = new byte[ComDevice....
  • 颜色传感器调试软件使用说明: 1、若不能直接使用,请先自行安装 .net framework...4、软件显示的刷新速率由下位机发送数据速度决定,每收到0x55和RGB值即刷新一次。 5、正确使用的情况下,软件可以实时显示RGB的值,
  • VC上位机MFC利用串口控件发送接收数据

    万次阅读 热门讨论 2016-01-05 10:02:09
    经过这两天的调试,基本上搞定了dsp和机器人上位机界面,先记录下我的上位机。  实验室是做机器人控制的,经常会用到上位机,我只搞过...串口发送和接收数据,2.手柄扫描(因为实验室用手柄来遥控机器人,扫描到手
  • //可调节的接收数据 int cmd; unsigned char str[2]; DWORD wCount;//实际读取的字节数 BOOL bReadStat, bWriteStat;//读取或写数据 unsigned char a,b,c; double s; int UARTInt() { int UART_...
  • 图片上位机一、思路二、STM32采集数据发送2.1、OV7725模组2.2、串口发送三、上位机接收,解析,显示保存2.1、接收解析2.2、数据格式转换2.3、遇到问题四、小结&开源 一、思路 二、STM32采集数据发送 2.1、OV7725...
  • 上位机发送与接收下位机数据

    千次阅读 2019-03-24 23:50:16
    用自带的SeriPort控件或者可以用seriport类,根据上位机与下位机同行寻得协议发送接收数据。 设置buttion控件,点击buttion 发送相应数据: private void send_buttion_click(object sender,EventArgs e) { Display_...
  • 先根据电路图连接电路,下载下位机程序,连接电脑,打开上位机就有数据显示上位机和下位机的程序都很清楚的描述。
  • 本课程主要基于虚拟仪器完成数据采集的上位机显示功能。采用labview开发平台,设计通信协议,实现上位机和下位机之间的USB和以太网通信。将下位机采集的数据实时以数据和图形显示,并保存。同时,上位机才可以对...
  • labview上位机接受数据并且分离串口数据,下位机发T+数据表示在第一图显示, 下位机发B+数据表示在第二图显示,下位机发A或C在方框内显示,适合初学者,我是在一位前辈的基础上写出来的。
  • 1.参考文档:VC++-串口上位机编程实例 2文档地址:http://wenku.baidu.com/link?url=mokADmedzI2CD7b4hu8L3kTgTYKlxG52TcNdcfmbxceMXWipW95QEaQl959DJGmYBY7icMgw0dJSkIioeiut9xgtEwNrnamEOiOSNfkCq-C 制作的...
  • 用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码。 设置断点调试了一下,发现bt是成功...
  • C#串口上位机

    2019-03-30 10:06:54
    压缩包包含VS2012创建的c#串口窗体上位机,可实现串口扫面检测,显示收发数据,供大家学习参考。
  • ADC数据显示 实现过程十分简单 初始化 public Form1() { InitializeComponent(); serialPort1.DataReceived += new SerialDataReceivedEventHandler(PortDataReceivedEvent); //添加串口数据接受事件 System...
  • 出现的几个问题总结:1,printf 函数 蛋疼了,刚开始...// 输出A5的ASCIC的形式61附上一些格式:2 MPU6050 输出数值的理解:PU6050数据是16位的数。它属于int16类型,即数据范围是-32768 到 32767。 正数范围是0-7...
  • 基于C++的USB的数据传输的上位机程序,Windows的底层驱动已经写好,测试可用,只要配合下位机FPGA即可实现基于USB的数据传输。
  • 51单片机AD转换、串口蓝牙通讯、labview上位机显示 功能:单片机模拟数字转化,将数字信号通过蓝牙或者串口传输给电脑,电脑上labview显示出一个图表。 我这里实际使用是探测光信号强弱的: 光信号——>光电...
  • 由于是与单片机通信,需要以十六进制发送数据,为了验证在接收函数中把接收到的数据转换为十六进制显示。接收buf 1 之前定义为char型,比如发送1ABa,接收应该显示0x1a 0xba,但是实际接收显示的是0x1a 0xffffffba。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,553
精华内容 621
热门标签
关键字:

上位机接受数据显示