案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.5.0)

简介: 案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.5.0)

前言

  西门子PLC、台达触摸屏、法兰克机床等等多年以前玩得比较多,改造机床、维修机床、给机床编程等等,没事还能车个零件啥的,对于多年以前的研发改造编程,有时间就重新整理下。

  先上点有历史年代感的照片:

  

  

  

  


  

  

  


需求

  Qt实现与PLC调试工具。


相关博客

  《案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.5.0)》

  《西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真

  《台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接


Demo

西门子PLC实物连接图

  

连接西门子PLC实物读取数据演示(区分数据类型)

  

连接西门子PLC实物写入数据演示(区分数据类型)

  

连接西门子PLC实物读取数据演示(无类型)

  

连接西门子PLC实物写入数据演示(无类型)

  

模拟服务器演示

  

  

体验下载地址

  CSDN(0积分下载):https://download.csdn.net/download/qq21497936/18513620

  QQ群:1047134658(点击“文件”搜索“plcCommunication”,群内与博文同步更新)


v1.5.0

  

  

  


头文件源码

  

  

PlcWidget.h

#ifndef PLCWIDGET_H
#define PLCWIDGET_H
/************************************************************\
 * 控件名称:PlcWidget
 * 功能描述:Plc通讯Demo
 * 控件功能:
 *          1.PLC客户端(上位机与PLC通讯))
 *          2.PLC服务端(仿真PLC,方便调试上位机)
 *          3.服务器与客户端的数据显示,客户端为读DB,服务器写DB
 * 著作权信息
 *      作者:红胖子(AAA红模仿)
 *      公司:长沙红胖子网络科技有限公司
 *      网址:hpzwl.blog.csdn.net
 *      联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813)
 * 版本信息
 *      日期          版本号        描述
 *  2020年11月22日    v1.0.0      基础功能
 *  2020年11月23日    v1.1.0      增加服务器功能
 *  2020年12月01日    v1.2.0      增加写入功能
 *  2020年12月08日    v1.3.0      增加写入和读取int,dint,float,byte功能
 *  2020年12月17日    v1.4.0      增加ip地址等相关配置的保存和读取,修复客户端ip地址无法输入的问题,
 *                               修复服务器超过一次连接、断开导致的DB区域数据错误问题
 *  2021年05月10日    v1.5.0      主题修改,版本控制
\************************************************************/
#include <QWidget>
#include <QThread>
#include <QDateTime>
#include <QTimer>
#include <QJsonObject>
#include <QJsonDocument>
#include <QFile>
#include <QMessageBox>
#include "PlcClientManager.h"
#include "PlcServerManager.h"
namespace Ui {
class PlcWidget;
}
class PlcWidget : public QWidget
{
    Q_OBJECT
public:
    explicit PlcWidget(QWidget *parent = 0);
    ~PlcWidget();
protected slots:    // 客户端:与PLC管理模块部分
    void slot_connectedChanged(bool connected);
    void slot_readDB(int dbNum, int start, int size, QByteArray data);
protected slots:    // 客户端:循环执行读取操作槽
    void slot_timeOut();
protected:
    void loadCfg();
    void saveCfg();
private slots:      // 客户端:连接、断开的部分
    void on_pushButton_connect_clicked();
    void on_pushButton_disconncet_clicked();
private slots:      // 客户端:DB块的读取部分、写入部分
    void on_pushButton_readDB_clicked();
    void on_pushButton_writeDB_clicked();
    void on_pushButton_startReadDB_clicked();
    void on_pushButton_stopReadDB_clicked();
    void on_pushButton_clear_clicked();
protected slots:    // 服务端:状态、缓存区状态改变
    void slot_listenStateChanged(bool listen);
    void slot_dataChanged();
private slots:      // 服务端:开始监听、停止的部分
    void on_pushButton_serverListen_clicked();
    void on_pushButton_serverStopListen_clicked();
    void on_pushButton_serverSet_clicked();
    void on_pushButton_rDB_clicked();
    void on_pushButton_wDB_clicked();
protected:
    void closeEvent(QCloseEvent *event);
private:
    Ui::PlcWidget *ui;
    QTimer *_pTimer;                            // 定时发送定时器
    PlcClientManager *_pPlcClientManager;       // 客户端模式管理类
    QThread *_pPlcClientManagerThread;          // 客户端模式线程
    PlcServerManager *_pPlcServerManager;       // 服务器模式管理类
    QThread *_pPlcServerManagerThread;          // 服务器模式线程
    bool _readType;
    IntByte  _intByte;
    DIntByte _dIntByte;
    RealByte _realByte;
    QString _cfg;
protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void timerEvent(QTimerEvent *event);
private:
    QPoint _beginPoint;
    QPoint _leftTopPoint;
    bool _leftButtonPressed;
    int _timerId;
};
#endif // PLCWIDGET_H


相关文章
|
存储 C++
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
711 1
|
Java
byte加byte居然是int了
为什么在Java中,byte加byte的结果不是byte,而是int?本文将带你从Java语言规范和JVM规范层面研究该问题。
338 3
byte加byte居然是int了
|
安全 Java Linux
如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试
如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试
574 2
|
Web App开发
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
|
网络协议 网络安全
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
1489 0
|
安全
Qt日志工具--QsLog
Qt日志工具--QsLog
650 1
|
Java 测试技术
使用IDEA进行服务器远程debug调试
使用IDEA进行服务器远程debug调试
473 0
|
程序员 开发工具 索引
【Qt 学习笔记】认识QtSDK中的重要工具
【Qt 学习笔记】认识QtSDK中的重要工具
298 0
QT实现植物大战僵尸中文版工具代码
QT实现植物大战僵尸中文版工具代码
246 0
Qt程序打包发布记录使用windeployqt工具
Qt程序打包发布记录使用windeployqt工具
906 0

推荐镜像

更多
  • qt
  • 下一篇
    开通oss服务