案例分享: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


相关文章
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—EVA存储硬盘读写性能不稳定掉线的数据恢复案例
服务器存储数据恢复环境: 一台EVA某型号控制器+EVA扩展柜+FC磁盘。 服务器存储故障&检测: 磁盘故障导致该EVA存储中LUN不可用,导致上层应用无法正常使用。
97 47
|
1月前
|
Java
byte加byte居然是int了
为什么在Java中,byte加byte的结果不是byte,而是int?本文将带你从Java语言规范和JVM规范层面研究该问题。
57 3
byte加byte居然是int了
|
1月前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry系统盘测评IOPS、IO读写和时延性能参数
ESSD Entry云盘是阿里云推出的新一代云盘,具备高IOPS、低延迟和企业级数据保护能力。适用于开发与测试场景,支持按量付费和包年包月计费模式。99元和199元的ECS经济型e实例和通用算力型u1实例均采用ESSD Entry系统盘,性价比高。详细性能参数和价格请参考阿里云官方页面。
76 0
|
5月前
|
编解码 监控 网络协议
采用Qt+Live555搭建RTSP服务器
Live555是一个跨平台的流媒体开发库,支持多种流媒体协议,包括RTSP、SIP、RTP等,可以帮助我们快速实现视频流的传输和处理。
365 1
采用Qt+Live555搭建RTSP服务器
|
4月前
【qt】客户端连接到服务器
【qt】客户端连接到服务器
78 0
|
4月前
|
网络协议
【qt】TCP服务器如何停止监听?
【qt】TCP服务器如何停止监听?
51 0
|
4月前
|
网络协议
【qt】TCP的监听 (设置服务器IP地址和端口号)
【qt】TCP的监听 (设置服务器IP地址和端口号)
272 0
|
5月前
|
Web App开发
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
|
5月前
|
网络协议 网络安全
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
321 0
|
7月前
|
安全 Java Linux
如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试
如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试
125 2