基于tcp通信的qt上位机界面与 200smart通讯案例

文章目录

  • 前言
  • 一、PLC部分(服务端)
    • 1.所用指令
    • 2.PLC简单编程
  • 二、上位机界面(基于Qt,客户端)
    • 1.所用qt模块
    • 2.步骤


前言

课题需要编写上位机界面与西门子plc 200smart的通信,本次采用的是通信为tcp通讯,采用的网线端口,PLC作为服务端,上位机界面作为客户端。


提示:以下是本篇文章正文内容,下面案例可供参考

一、PLC部分(服务端)

1.所用指令

TCP_CONNECT
TCP_SEND
TCP_RECV
基于tcp通信的qt上位机界面与 200smart通讯案例_第1张图片

每个指令的参数可参见:200smart Tcp通讯模块详解

2.PLC简单编程

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210324165827526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3B5dGhvbl9uZXdoYW5k,size_16,color_FFFFFF,t_70#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021032416591398.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3B5dGhvbl9uZXdoYW5k,size_16,color_FFFFFF,t_70#pic_center)

基于tcp通信的qt上位机界面与 200smart通讯案例_第2张图片

二、上位机界面(基于Qt,客户端)

1.所用qt模块

**net work下的QTcpSocket**

2.步骤

首先在项目中pro文件下添加network模块

clientWidget.h

#ifndef CLIENTWIDGET_H
#define CLIENTWIDGET_H

#include 
#include

namespace Ui {
class clientWidget;
}

class clientWidget : public QWidget
{
    Q_OBJECT

public:
    explicit clientWidget(QWidget *parent = 0);
    ~clientWidget();

private slots:
    void on_ButtonConnect_clicked();

    void on_ButtonSend_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::clientWidget *ui;
    QTcpSocket *tcpSocket;

};

#endif // CLIENTWIDGET_H

clientWidget.cpp

#include "clientwidget.h"
#include "ui_clientwidget.h"
#include
#include

clientWidget::clientWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::clientWidget)
{
    ui->setupUi(this);
    tcpSocket = NULL;
    //分配空间,指定父对象
    tcpSocket  = new QTcpSocket(this);

    //tcpSocket是否连接,连接的话向textEditRead文本框发送"成功与服务器连接!"
    connect(tcpSocket,&QTcpSocket::connected,
            [=]()
            {
                ui->textEditRead->setText("成功与服务器连接!");
            }
            );
    /**connect(tcpSocket,static_cast(&QAbstractSocket::error),
            [=](QAbstractSocket::SocketError socketError)
            {
                ui->textEditRead->setText("连接服务器失败!");
            }
            );*/

    connect(tcpSocket,&QTcpSocket::readyRead,
            [=]()
            {
                //获取对方发送的内容
                QByteArray array = tcpSocket->readAll();
                ui->textEditRead->append(array);
            }
            );
}

clientWidget::~clientWidget()
{
    delete ui;
}

void clientWidget::on_ButtonConnect_clicked()
{
    //获取服务器端口和ip
    QString IP = ui->lineEditIP->text();
    qint16 port = ui->lineEditPort->text().toInt();
    //主动和服务器连接
    tcpSocket->connectToHost(QHostAddress(IP),port);
}

void clientWidget::on_ButtonSend_clicked()
{
    if(tcpSocket == NULL){
        ui->textEditRead->setText("未与服务器连接!无法发送数据。");
        return;
    }
    QString str = ui->textEditWrite->toPlainText();
    tcpSocket->write(str.toUtf8().data());

}

void clientWidget::on_pushButton_3_clicked()
{
    if(tcpSocket == NULL){
        ui->textEditRead->setText("未与服务器连接!");
        return;
    }
    //主动与对方断开连接
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
    tcpSocket =NULL;
    ui->textEditRead->setText("已断开与服务器连接!");

}

ui界面

基于tcp通信的qt上位机界面与 200smart通讯案例_第3张图片


你可能感兴趣的:(200smart,qt,qt,tcpip)