前言
西门子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