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


前言

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


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

一、PLC部分(服务端)

1.所用指令

TCP_CONNECT
TCP_SEND
TCP_RECV
在这里插入图片描述

每个指令的参数可参见: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)

在这里插入图片描述

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

1.所用qt模块

**net work下的QTcpSocket**

2.步骤

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

clientWidget.h

#ifndef CLIENTWIDGET_H
#define CLIENTWIDGET_H

#include <QWidget>
#include<QTcpSocket>

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<QHostAddress>
#include<QAbstractSocket>

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<void(QAbstractSocket::*)(QAbstractSocket::SocketError)>(&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界面

在这里插入图片描述


  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值