(三)Qt MODBUS TCP应用学习:通过QCustomPlot进行数据显示

1.添加QCustomPlot模块及使用步骤
首先,在官网下载QCustomPlot的相关文件,下载QCustomPlot,选择qcustomplot.h 和 qcustomplot.cpp 文件,将其添加到项目中。
在这里插入图片描述
在ui文件中,将常规的 QWidget 放在面板上,右键单击它并点击“提升为…”,在显示的对话中,在提升的类的名称中输入"QCustomPlot",最后点击"添加",完成设置。

在这里插入图片描述
2.具体代码
基于MODBUS通讯协议的8路温度采集、显示、存储上位机软件,主要包括Qcustomplot、Qfile、QLCDNumber、QTableWidget以及QCheckBox的使用,可以在不同的widget上实时绘制8路温度曲线、进行数码管及表格形式的动态显示、在指定文件夹创建TXT文本进行实时数据存储、显示操作记录和时间。

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget),
    _lastPointKey(0)
{
   
    ui->setupUi(this);
    setFixedSize( this->width(),this->height());    //窗口定大小
    setWindowTitle(tr("TemperatureDisplay"));
    modbusDevice = new QModbusTcpClient(this);
    windows_init();
}

Widget::~Widget()
{
   
    delete ui;
}

// 界面初始化
void Widget::windows_init()
{
   
// 控件初始化
    ui->close_tcp->setEnabled(false);
    ui->start->setEnabled(false);
    ui->pause->setEnabled(false);

// lcd 初始化
    ui->lcdNumber->setDigitCount(4);    //显示位数
    ui->lcdNumber->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_2->setDigitCount(4);    //显示位数
    ui->lcdNumber_2->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_2->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_3->setDigitCount(4);    //显示位数
    ui->lcdNumber_3->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_3->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_4->setDigitCount(4);    //显示位数
    ui->lcdNumber_4->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_4->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_5->setDigitCount(4);    //显示位数
    ui->lcdNumber_5->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_5->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_6->setDigitCount(4);    //显示位数
    ui->lcdNumber_6->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_6->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_7->setDigitCount(4);    //显示位数
    ui->lcdNumber_7->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_7->setSegmentStyle(QLCDNumber::Flat);       //显示方式
    ui->lcdNumber_8->setDigitCount(4);    //显示位数
    ui->lcdNumber_8->setMode(QLCDNumber::Dec);    //十进制
    ui->lcdNumber_8->setSegmentStyle(QLCDNumber::Flat);       //显示方式

// 表格初始化
    ui->tableWidget->setColumnCount(2);//设置列数
    ui->tableWidget->setRowCount(8);//设置行数
    ui->tableWidget->setAlternatingRowColors(true);     //设置隔行变颜色
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);       //选中整行
    //设置表头
    QStringList header;
    header<<QString::fromLocal8Bit("Number")<<QString::fromLocal8Bit("Data");
    ui->tableWidget->setItem(0,0,new QTableWidgetItem( "Temperature1" ));
    ui->tableWidget->setItem(1,0,new QTableWidgetItem( "Temperature2" ));
    ui->tableWidget->setItem(2,0,new QTableWidgetItem( "Temperature3" ));
    ui->tableWidget->setItem(3,0,new QTableWidgetItem( "Temperature4" ));
    ui->tableWidget->setItem(4,0,new QTableWidgetItem( "Temperature5" ));
    ui->tableWidget->setItem(5,0,new QTableWidgetItem( "Temperature6" ));
    ui->tableWidget->setItem(6,0,new QTableWidgetItem( "Temperature7" ));
    ui->tableWidget->setItem(7,0,new QTableWidgetItem( "Temperature8" ));
    ui->tableWidget->setHorizontalHeaderLabels(header);
    ui->tableWidget->setColumnWidth(0,100);
    ui->tableWidget->setColumnWidth(1,80);
    ui->tableWidget->show();

//绘图初始化
    widget_show();
    widget_2_show();

// 实时更新槽函数
    _pTimerUpdate = new QTimer(this);
    connect(_pTimerUpdate, SIGNAL(timeout()), this, SLOT(customsplot_init()));

}

void Widget::widget_show()
{
   
    // 添加曲线 1
    ui->widget->addGraph();         // 增加图层
    ui->widget->graph(0)->setPen(QPen(Qt::red));
    ui->widget->graph(0)->setAntialiasedFill(false);        // 设置图层反锯齿:关闭
    // 添加点
    ui->widget->addGraph();
    ui->widget->graph(1)->setPen(QPen(Qt::blue,3));       // 设置笔的颜色
    ui->widget->graph(1)->setLineStyle(QCPGraph::lsNone);   // 不画线条
    ui->widget->graph(1)->setScatterStyle(QCPScatterStyle::ssDisc);     // 设置点的形状

    // 添加曲线 2
    ui->widget->addGraph();         // 增加图层
    ui->widget->graph(2)->setPen(QPen(Qt::red));
    ui->widget->graph(2)->setAntialiasedFill(false);        // 设置图层反锯齿:关闭
    // 添加点
    ui->widget->addGraph();
    ui->widget->graph(3)->setPen(QPen(Qt::blue,3));       // 设置笔的颜色
    ui->widget->graph(3)->setLineStyle(QCPGraph::lsNone);   // 不画线条
    ui-></
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt是一种跨平台的GUI(图形用户界面)应用程序开发框架,提供了用于创建跨平台应用程序的一系列工具和功能。Modbus TCP是一种通讯协议,用于在多个设备之间传输数据。在工业自动化和远程控制中广泛应用。当这两种技术结合使用时,就可以很容易地创建和开发自动化应用程序。 下面将介绍一个qt modbus tcp应用实例: 假设我们需要读取一个远程温度传感器的温度值,并将其显示qt应用程序中。我们可以使用Modbus TCP通信协议来读取传感器值,而Qt可以提供一个用户友好的GUI,用于实时显示温度值。 首先需要安装Qt Modbus库,它包含了在Qt应用程序中使用Modbus协议的类和函数。 然后需要创建一个QT界面(GUI),该界面应包含从Modbus服务器读取值的按钮。当用户点击该按钮时,应用程序会与Modbus服务器通信,并读取温度值。读取到的温度值将在GUI中实时显示出来。 在qt应用程序中,可以使用以下代码进行Modbus通信: //创建modbus客户端 QModbusTcpClient *client = new QModbusTcpClient(this); //连接到modbus tcp服务器 client->setConnectionParameter(QModbusTcpClient::ConnectionParameterIp, "192.168.1.100"); client->setConnectionParameter(QModbusTcpClient::ConnectionParameterPort, 502); client->connectDevice(); //读取温度值 QModbusDataUnit request(QModbusDataUnit::InputRegisters, 0, 1); request.setValue(0, 1); //从设备地址1读取值 QModbusReply *reply = client->sendReadRequest(request, 1); while (!reply->isFinished()) ; //等待回复完成 //显示温度值 if (reply->error() == QModbusDevice::NoError) { const QModbusDataUnit unit = reply->result(); int temperature = unit.value(0); //温度值保存在第一个寄存器中 ui->temperatureLabel->setText(QString::number(temperature) + "℃"); } else { ui->temperatureLabel->setText("Error: " + reply->errorString()); } 在这个例子中,我们使用了QModbusTcpClient来创建一个Modbus客户端,并连接到Modbus服务器。然后,我们发送一个读取请求,从Modbus服务器读取温度值。一旦读取到值,我们可以将其显示在GUI中。 这只是一个具有基本功能的简单示例,实际使用中的应用程序可能需要更多的功能和贡献,比如通过Modbus协议写值,以及对Modbus服务器和RTU通信的支持等。 总之,Qt Modbus TCP应用示例是多种多样的,从简单的应用程序到工业自动化和远程控制的复杂系统都可以使用这些技术实现。通过使用一个强大的GUI和Modbus协议,开发人员可以创建出易用性高、性能稳定的自动化应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值