QT 5.12.9 +VS 2019配置并实现与三菱Q系列PLC通讯(2)实现通讯

2023-11-17

QT 5.12.9 +VS 2019配置并实现与三菱Q系列PLC通讯功能(1)软件的安装

之前已经完成了软件的安装,接下来要通过MX Component去实现PLC的直连功能。

首先,打开VS2019,新建项目,搜索qt,在出来的内容中选择QT Widgets Application,然后点击下一步。

在下一步中,输入项目名称,勾选名称“将解决方案和项目放在同一个文件夹”,然后点击创建。

之后会自动弹出QT配置框,一直下一步,然后点击finish即可生成解决方案。

在生成的解决方案中,会发现这其中是不包含三菱通讯头文件的,需要进一步的配置和添加。

由于QT并不能直接使用三菱的控件,因为这个空间是基于ActiveX的,在这里为了能让QT使用该空间,需要使用QT中的dumpcpp来生成源文件。

输入cmd,使文件夹进入QT安装文件夹中msvc2017-bin当中,双击VS当中的.ui文件,打开QT designer。(注意:如果双击打开后,会自动弹出,就点击.ui文件右键-打开方式-添加,找到自己安装软件的目录即可,然后设置为默认项,下次就可以双击启动了。)

 接着上一步,打开QT designer后,拖入QAxWidget控件,右键-设置控件中找到对应的控件,复制UUID备用。

 在开始打开的cmd当中,输入dumppcpp {···刚复制的那一串代码},然后回车就可以在bin文件中看到我们所需要的.h和.cpp文件啦。

 之后,把这两个文件复制到项目文件夹中,就可以删除QT designer的QAxWidget控件了。

接下来,根据我们要实现的初步功能,布置按钮和对话框,并命名

保存QT designer,在VS中右键点击.ui,编译一下,文件,这样新定义的按钮等对象就可以在VS中直接使用了。

写入代码如下:

QtWidgetsApplication2.h

#include "QtWidgetsApplication2.h"


/*将窗体文字格式改为UTF-8*/
#if defined(_MSC_VER) && (_MSC_VER >= 1600)    
# pragma execution_character_set("utf-8")    
#endif


QtWidgetsApplication2::QtWidgetsApplication2(QWidget* parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QTimer* update_time = new QTimer(this);
    update_time->stop();
        // 设置超时间隔
    update_time->setInterval(5);
    //setLED(ui.label_led1, 0, 16);
    //setLED(ui.label_led2, 0, 16);
    //Date_Update();

 
    connect(ui.OpenButton, SIGNAL(clicked(bool)),this, SLOT(on_openButton_clicked()));
    connect(ui.CloseButton, SIGNAL(clicked(bool)), this, SLOT(on_closeButton_clicked()));
}
void QtWidgetsApplication2::on_openButton_clicked() {
    //填设置的逻辑站号和密码
    myactive.SetActLogicalStationNumber(1);
    myactive.SetActPassword("");

    qDebug() << "myactive";
    //通讯线路打开
    iRet = myactive.Open();
    qDebug("return:%x", iRet);


    if (iRet == 0x00)
    {
        //可编程控制器CPU型号获取
        iRet = myactive.GetCpuType(CpuName, lCpuType);
        qDebug("return:%x CpuName:%s lCpuType:%d", iRet, qPrintable(CpuName), lCpuType);

        //显示CPU型号
        ui.CpuNameEdit->setText(szCpuName);
        //setLED(ui.label_led1, 2, 16);
        //实时刷新
        qApp->processEvents();
        QMessageBox::about(nullptr, "提示", "连接成功!");
        //设置按键非使能
        ui.OpenButton->setEnabled(false);
        //设置按键使能
        ui.CloseButton->setEnabled(true);
        
    }
    else
    {
        //setLED(ui.label_led1, 1, 16);
        QMessageBox::about(nullptr, "提示", "无法打开端口!");
    }
}

void QtWidgetsApplication3::on_closeButton_clicked() {

    //通讯线路关闭
    qDebug() << "close";
    iRet = myactive.Close();
    qDebug("return:%x", iRet);
    //setLED(ui.label_led1, 0, 16);
    //清空文本
    ui.CpuNameEdit->clear();

    //设置按键使能
    ui.OpenButton->setEnabled(true);

    //设置按键非使能
    ui.CloseButton->setEnabled(false);

}

 QtWidgetsApplication2.cpp

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication3.h"
#include "actutltypelib.h"
#include <QtWidgets/QMessageBox>
#include <QtWidgets>

class QtWidgetsApplication2 : public QMainWindow
{
    Q_OBJECT

public:
    //QtWidgetsApplication2(QWidget *parent = Q_NULLPTR);
    explicit QtWidgetsApplication2(QWidget* parent = nullptr);
    //~QtWidgetsApplication2();
    void setLED(QLabel* label, int color, int size);

private slots:
    //声明开启通讯按钮函数
   void on_openButton_clicked();
   //声明关闭通讯按钮函数
   void on_closeButton_clicked();

private:
    Ui::QtWidgetsApplication3Class ui;

    ActUtlTypeLib::ActUtlType myactive;

    QString CpuName;
    qint32 lCpuType;
    qint32 iRet;


};

mian.cpp

#include "QtWidgetsApplication2.h"
#include <QtWidgets/QApplication>
#include "actutltypelib.h"

/*将窗体文字格式改为UTF-8*/
#if defined(_MSC_VER) && (_MSC_VER >= 1600)    
# pragma execution_character_set("utf-8")    
#endif


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtWidgetsApplication2 w;
    w.show();
    return a.exec();
}

 之后运行就可以实现Q系列PLC的通讯功能了。自己只测试了Q系列PLC能够完成通讯并显示PLC型号,FX或者R系列按照原理来说也可以实现功能,但没有进行具体的测试了。(注意:需要先配置好MX component再进行通讯,本程序中MX component配置编号需为1)

新增:

编译时,如果提示 无法打开源程序<qaxobject.h>,就右键项目名-属性,在QT project中配置上ACTIVEQTC即可。

源码程序打包,有需要的话可以下载:

https://download.csdn.net/download/u014224136/85227359

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT 5.12.9 +VS 2019配置并实现与三菱Q系列PLC通讯(2)实现通讯 的相关文章

  • 数据添加到QLineSeries后如何更新/重绘QChart?

    我正在生成一些我想用来绘制图表的数据QChart 朋友们 这是我第一次使用QChart 所以基本上我所做的就是复制QLine系列示例 https doc qt io qt 5 qtcharts linechart example html并
  • 使用pyqt5生成SVG文件

    我想使用 pyqt5 使用 Python 绘制一些简单的矢量图像 到目前为止 我已经成功使用以下代码生成了图像 import sys from PyQt5 QtCore import from PyQt5 QtGui import from
  • QT - 如何将小部件放置在互斥的组中?

    我想做类似以下的事情 example 但用单选按钮而不是复选框 在上图中 小部件被放置到可以启用 禁用的组中 但我希望一次只启用 1 个组 在示例中 A 组和 C 组都启用 我用上面的例子做了Q组框 http doc qt io qt 5
  • 第二次点击后图像大小不同

    我有以下最小的工作示例 取自我当前的项目 import QtQuick 2 5 import QtQuick Window 2 2 import QtQuick Layouts 1 1 import QtQuick Controls 1 4
  • 如何识别应用程序在 Linux 上以深色主题运行?

    我开发了一个使用 qscintilla 作为文本编辑器的应用程序 我还实现了自定义词法分析器来突出显示特定于语言的关键字 到目前为止 突出显示关键字的样式已硬编码在我的应用程序中 并且在 Windows Linux Ubuntu Mac 上
  • 使用 PostgreSQL 编译静态 Qt 5.10.0 时出错

    我正在尝试在 Windows 7 上使用 mingw 编译 Qt 5 10 0 和 PostgreSQL 10 或 9 2 但同样的错误 但是 当我包含 psql include 和 lib 目录时 在 mingw32 make 之后我总是
  • Qt:无法从输入设备读取:没有这样的设备

    我有一个在嵌入式 Linux 平台 i Mx 6 上运行的 Qt 应用程序 我的应用程序应支持触摸屏作为主要输入设备和可选的 USB 键盘 如果已连接 所以现在 我已配置要启动的应用程序 如下所示 my qt app plugin tsli
  • 如何增加 QListWidget 中项目/行的填充(或边距)?

    我们正在寻找一种方法来增加填充 或边距 QListWidget我们正在我们的应用程序中使用 我们希望为所有四个方向增加此值 以便为列表中的文本提供一些额外的空间 我查看了两者的文档QListWidget http doc qt io qt
  • Qt如何连接rubberBandChanged信号

    我尝试将 QChartView 类中的 ruby BandChanged 信号链接到 MainWindow 类中的特定函数 主窗口 h class MainWindow public QMainWindow Q OBJECT public
  • 在 MacOSX 上,当指定无效的身份验证凭据时,QNetworkAccessManager 会进入无限循环

    在我的跨平台应用程序中 我使用 QNetworkAccessManager 将 HTTP 请求发送到需要身份验证的 HTTP 服务 我最近升级到 QT5 令我完全惊讶的是 在 MacOSX 上 我的应用程序会在某些情况下尽快向我的服务发送大
  • 如何更改菜单栏的字体颜色?

    如何更改 QML 菜单项的文本颜色MenuBar import QtQuick 2 4 import QtQuick Controls 1 3 import QtQuick Window 2 2 import QtQuick Dialogs
  • 没有安装 qmlviewer

    我已经安装了 Qt SDK 5 0 0 beta 2 和 Qt Creator 2 6 0 它检测到该包 但给出警告 未安装 qmlviewer 我找了一下 在SDK的bin文件夹下 我能做些什么 我使用 ubuntu 12 04 并将 S
  • QVBoxLayout:如何使用 Qt 设计器将小部件对齐到顶部

    我仅将 qt 设计器用于 ui 布局 这与这个问题几乎是同一个问题 QVBoxLayout 如何将小部件垂直对齐到顶部而不是中心 https stackoverflow com questions 10082299 qvboxlayout
  • 使用 Qt,有哪些好方法可以分解包含 GUI 逻辑的大型源文件?

    我正在使用 Qt 5 开发一个 C 项目 它有一个包含大量 UI 元素的复杂窗口 该窗口是使用 Qt Designer 设计的 并从 UI 文件加载 我发现 Qt 的典型模式是在其主类中编写窗口 UI 的所有逻辑 即他们文档中的 单一继承方
  • 如何在QML中设置弹出菜单位置

    我想修复 QML 中弹出菜单的位置 当我单击设置按钮时 我希望弹出菜单将显示在固定位置 我用了一天的时间就做到了 但是做不到 我怎样才能在 QML 中做到这一点 另外 我想更改菜单项的大小 宽度和高度 希望您的帮助 这取决于QtQuick
  • 我的 Qt5 可执行文件无法在 Visual Studio 2010 之外运行

    我用 Qt5 和 Visual Studio 2010 完成了一个大项目 使用运行按钮 一切都在 Visual Studio 内部 但我的目标当然是在没有视觉工作室的情况下将其发布给其他人 我的问题是 我无法在 Visual Studio
  • 如何在 Qt5 中创建/读取/写入 JSON 文件

    Qt5 有一个新的 JSON 解析器 我想使用它 问题在于 用外行术语来说 这些函数的作用以及如何用它编写代码并不太清楚 否则我可能读错了 我想知道在 Qt5 中创建 JSON 文件的代码以及 封装 的含义 示例 从文件中读取 json t
  • 如何在 Qt 5 中写入和读取 QResource 文件?

    很奇怪 我通过以下方式将所需的文件添加到资源中添加现有文件 文件就在那里 我运行 qmake 构建 gt 运行 qmake 以使文件可用 第一期 我无法从输出终端向文件写入任何内容 但是当我手动写入文件时 每次运行它时输出终端都会显示更改
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • QCalendarWidget - 如何突出显示日期

    我有一个QList

随机推荐

  • unity ethan_响应式网页设计的挑战,Ethan Marcotte

    unity ethan In this episode of the Versioning Show David and Tim are joined by Ethan Marcotte a well known designer who
  • c语言设计(TVI)地铁自动售票机---@颜麓

    设计TVI 地铁自动售票机 机软件 输入站数 计算费用 计费规则 6站2元 7 10站3元 11站以上为4元 输入钱数 计算找零 找零时优先找回面额大的钞票 找零方式为各种面额张数 可识别面额 100 50 20 10 5 1 includ
  • Sentinel整合Ribbon/OpenFeign,Sentinel自定义限流熔断

    Sentinel服务熔断环境搭建 服务熔断 应对微服务雪崩效应的一种链路保护机制 类似保险丝 需要完成Sentinel整合Ribbon openFeign 所以我们先要搭建环境 那么先从整合Ribbon开始 环境搭建 为了演示操作 所以在这
  • DBeaver改成英语

    DBeaver改成英语 安装目录中有个dbeaver ini文件 追加 Duser language en可以改回英文 有些数据库术语翻译后反而不太容易理解
  • java获取唯一时间戳Id.多线程保证唯一性

    工程里有获取唯一时间戳作为id的需求 想了想用乐观锁cas实现 自旋 cas原子性操作获得了绝对唯一的时间戳 系统时间 纳秒版本 单机有效 不能分布式调用 public class AtomicTimeStamp private Atomi
  • Anaconda的安装与环境配置

    这里简单的记录一下Anaconda的安装过程 没有干货 只是记录 但也看了就会 下载安装包 这里有两个下载地址 分别是官网和清华镜像源 推荐清华镜像 下的快 官网下半天还可能失败 无论是哪个下载地址 找到对应你系统的安装程序下载即可 官网
  • Ubuntu下安装JDK图文教程详解

    操作系统 Ubuntu 11 10 我们选择的是jdk1 6 0 30版本 安装文件名为jdk 6u30 linux i586 bin 1 复制jdk到安装目录 1 假设jdk安装文件在桌面 我们指定的安装目录是 usr local jav
  • 可以编辑的table antd

    版本一 效果图 有保存按钮 antd3 代码 import React Component from react import Form Input Button Table Divider Popconfirm Tooltip from
  • 19_复制目录下所有文件夹和目录CopyFile()

    复制目录下所有文件夹和目录CopyFile 想一下 若要复制文件夹 可以在目录位置新建一个文件夹 然后将源文件夹中里面的文件进行遍历 一个一个的复制到目标文件夹中即可 void EnumCopyFile 输入参数 TCHAR szSrcRo
  • STL——vector以及emplace_back分析

    1 这里需要注意凡是连续空间的容器都提供operator 是为了数组操作 2 back 应该是 end 1 3 vector的大小为12 vector的迭代器为指针 1 emplace back 1 相比push back 如果传入临时对象
  • matlab中的锐度测量,锐度(解析度)MTF定义及测试

    Image sharpness 图像锐度 解析度 锐度无疑是最重要的摄影图像质量的评价因素 它是关系到图片中有多少细节可以被辨认的最密切因素 但它不是唯一的重要因素 其他重要因素包括色差 与锐度密切相关 噪音 动态范围 与噪声密切相关 和色
  • mysql常用命令

    mysql命令 查询 限制返回个数及偏移量 m 偏移量 n 个数 只限制个数可省略m 如limit 2 select from
  • IntelliJ IDEA破解

    今天写个IDEA破解 废话不多说 直接给网址 官网 https www jetbrains com idea 破解注册码 http idea lanyus com 里面有永久破解 还有注册码 可你根据你的喜爱 来选择 今天写一下它的破解补丁
  • HashMap之扩容原理

    一 什么是HashMap HashMap 数据结构为 数组 链表 JDk1 7 JDK1 8中增加了红黑树 其中 链表的节点存储的是一个 Entry 对象 每个Entry 对象存储四个属性 hash key value next 二 为什么
  • explicit关键字解析

    C 提供了关键字explicit 可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生 声明为explicit的构造函数不能在隐式转换中使用 C 中 一个参数的构造函数 或者除了第一个参数外其余参数都有默认值的多参构造函数 承担了两个角
  • Vue3.0-计算属性computed

    Vue3 0中的computed的功能与2 0中的计算函数功能一样 引入方法 import computed from vue 使用 在引入之后 设计箭头函数 var name computed gt 函数体 retrun 返回值 也就是计
  • Make和Makefile快速入门

    文章目录 目的 基础入门 Makefile语法 基础杂项 变量 条件选择 函数 文件引用 嵌套执行 make使用 使用进阶 总结 目的 我们可以在终端中通过命令来使用GCC编译代码生成可执行文件 对于实际的项目因为涉及的文件通常会比较多一些
  • 搭建OpenGL开发环境

    资料 安装教程 软件下载 Visual Studio 2019 CMake GLFW GLAD glfw 3 3 8 下载glfw的目的 获取压缩包里的include 生成glfw3 lib 获取include 解压找到Include in
  • shader学习笔记一:shader运行原理及uniform关键字

    shader运行原理 首先 opengl api函数输入一些数据 包括顶点数据 纹理数据 矩阵变换数据 这些顶点数据到 顶点处理阶段 顶点处理阶段 图形流水线会调用 vertex shader 顶点shader 对顶点进行处理 有多少个顶点
  • QT 5.12.9 +VS 2019配置并实现与三菱Q系列PLC通讯(2)实现通讯

    QT 5 12 9 VS 2019配置并实现与三菱Q系列PLC通讯功能 1 软件的安装 之前已经完成了软件的安装 接下来要通过MX Component去实现PLC的直连功能 首先 打开VS2019 新建项目 搜索qt 在出来的内容中选择QT