一个改写Modebus心跳值的小程序

在某项目中,因为没有设置实际线边仓,我们在调试小车的时候添加了一个虚拟线边仓来模拟上下料,但是当小车到达线边仓上料或下料的时候,要手动给Modebus心跳的信号,非常麻烦。为了解决这个问题,郑工手写了一个程序,来控制虚拟线边仓的心跳,实现自动化操作。

下边给出代码:
mainwindow.h部分的代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void connectModbus(QString ip, int port);


public slots:
    void timeToPing();

private:
    Ui::MainWindow *ui;

    QTimer *timer;  //此处可以使用指针,也可以使用变量
    QModbusTcpClient *client;  //此处可以使用指针,也可以使用变量
    bool ping = false;
};
#endif // MAINWINDOW_H

下面是mainwindow.cpp部分的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //
    timer = new QTimer;
    connect(timer, &QTimer::timeout, this, &MainWindow::timeToPing);  //用连接函数将定时器与timetoping改写心跳值函数连接起来
    timer->start(500);  //将定时器的间隔设置为500ms
    client = new QModbusTcpClient();
}

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

void MainWindow::connectModbus(QString ip, int port) //创建连接目标modbus的函数
{
    client->setConnectionParameter(QModbusDevice::NetworkPortParameter, port); //获取port
    client->setConnectionParameter(QModbusDevice::NetworkAddressParameter, ip);//获取IP
    client->connectDevice();//连接modbus
}

void MainWindow::timeToPing()
{
    //qDebug() << "time out!";
    connectModbus("127.0.0.1", 5502);//先连接目标modbus
    QVector<quint16> data;
    data << ping;
    QModbusDataUnit dataUnit(QModbusDataUnit::Coils, 1958, data);//此处控制目标盒子心跳的ID是1958
    client->sendWriteRequest(dataUnit, 1); //函数第二参数指的是读写coil的Slave ID,此处的ID是1
    ping = !ping;  //心跳的值不停地变为0或1
}

将该小程序打包:
找到运行该程序后的编译文件路径:
C:\Users\Maker\Documents\Qt Creator\build-autoPing-Desktop_Qt_5_14_2_MinGW_64_bit-Debug(这个是我电脑上的路径)

进入/debug可以看到有以下文件:
一个改写Modebus心跳值的小程序_第1张图片
在这里新建一个文件夹/pack(我们将小程序打包到这个文件夹里面),将autoPing.exe文件拷贝进去,然后运行Qt 5.14.2(MinGW 7.3.0 64bit)在命令行中输入上面的pack文件夹所在的路径:
在这里插入图片描述
再输入windeployqt autoPing.exe:
在这里插入图片描述
到这里可以看到命令提示符窗口中有许多输出提示:
一个改写Modebus心跳值的小程序_第2张图片
一个改写Modebus心跳值的小程序_第3张图片
现在可以看到pack文件夹里已经有autoPing.exe的配置文件和相关库了。将autoPing.exe发送至桌面快捷方式,点击该快捷方式即可以运行程序。

你可能感兴趣的:(qt,ui,c++)