若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110071837
长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…
合作案例专栏:案例分享(体验Demo可下载,只定制)
前言
西门子PLC、台达触摸屏、法兰克机床等等多年以前玩得比较多,改造机床、维修机床、给机床编程等等,没事还能车个零件啥的,对于多年以前的研发改造编程,有时间就重新整理下。
先上点有历史年代感的照片:
需求
Qt实现与PLC调试工具。
相关博客
《案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)》
《案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)》
《台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接》
《台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯》
《西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真》
《libModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板》
《libModbus库开发笔记(二):libmodbus介绍、编译、modbusTcp连接台达PLC和modbusTcp基础模板》
《案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.6.0)》
Demo v1.6.3
1.去掉使用权限,开放免费使用;
2.三个分别写入和读取缓存值,方便实际过程中调试;
下载地址(v1.6.3)
CSND(0积分下载):https://download.csdn.net/download/qq21497936/89695623
QQ群:回博客首页扫描加QQ群(点击“文件”搜索“plcCommunication”,群内与博文同步更新)
西门子PLC实物连接图
连接西门子PLC实物读取数据演示(区分数据类型)
连接西门子PLC实物写入数据演示(区分数据类型)
连接西门子PLC实物读取数据演示(无类型)
连接西门子PLC实物写入数据演示(无类型)
模拟服务器演示
体验下载地址(v1.6.0)
CSND(0积分下载):https://download.csdn.net/download/qq21497936/86582035
QQ群:回博客首页扫描加QQ群(点击“文件”搜索“plcCommunication”,群内与博文同步更新)
体验下载地址
CSDN(0积分下载):https://download.csdn.net/download/qq21497936/18513620
v1.6.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
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110071837