前言
课题需要编写上位机界面与西门子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界面