通信效果图
头文件
#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtTestPlcS7.h"
#include "snap7.h"
class QtTestPlcS7 : public QWidget
{
Q_OBJECT
public:
QtTestPlcS7(QWidget *parent = nullptr);
~QtTestPlcS7();
private slots:
void slotBtnConnectPLC();
void slotBtnDisConnectPLC();
void slotBtnSendDataToPLC();
void slotBtnReadDataFromPLC();
void slotBtnClean();
private:
Ui::QtTestPlcS7Class ui;
TS7Client* pClient;
};
源文件
#include "QtTestPlcS7.h"
#include <QMessageBox>
#include <qdebug.h>
QtTestPlcS7::QtTestPlcS7(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.pushButtonConnect, SIGNAL(clicked()), this, SLOT(slotBtnConnectPLC()));
connect(ui.pushButtonSend, SIGNAL(clicked()), this, SLOT(slotBtnSendDataToPLC()));
connect(ui.pushButtonClean, SIGNAL(clicked()), this, SLOT(slotBtnClean()));
connect(ui.pushButtonRead, SIGNAL(clicked()), this, SLOT(slotBtnReadDataFromPLC()));
connect(ui.pushButtonDisConnect, SIGNAL(clicked()), this, SLOT(slotBtnDisConnectPLC()));
pClient = new TS7Client();
word type = 0x02;
pClient->SetConnectionType(type);
ui.lineEditIP->setText("192.168.1.1");
ui.lineEditRack->setText("0");
ui.lineEditSlot->setText("1");
this->setFixedSize(400,600);
}
QtTestPlcS7::~QtTestPlcS7()
{}
void QtTestPlcS7::slotBtnConnectPLC()
{
QString strip = ui.lineEditIP->text();
std::string stri = strip.toStdString();
const char* ip = stri.c_str();
qDebug() << "ip:" << ip << endl;
int rack = ui.lineEditRack->text().toInt();
int slot = ui.lineEditSlot->text().toInt();
int reg = pClient->ConnectTo(ip, rack, slot);
if (reg == 0)
{
qDebug() << "success" << endl;
QMessageBox::information(this, u8"提示", u8"连接成功!");
char buffer[256];
pClient->DBRead(1, 100, 1, &buffer);
qDebug() << "success";
}
else
{
QMessageBox::information(this, u8"提示", u8"连接失败");
qDebug() << "failed";
}
}
void QtTestPlcS7::slotBtnDisConnectPLC()
{
pClient->Disconnect();
}
void QtTestPlcS7::slotBtnSendDataToPLC()
{
int i = ui.lineEditQuHao->text().toInt();
int plcZJ = ui.lineEditVbate->text().toInt();
char value[4];
memset(value, 0, sizeof(char) * 4);
value[0] = (char)(0xff & i);
qDebug() << "value :" << value << endl;
pClient->DBWrite(1, i, 1, &plcZJ);
}
void QtTestPlcS7::slotBtnReadDataFromPLC()
{
int i = ui.lineEditQuHao->text().toInt();
char value[4];
memset(value, 0, sizeof(char) * 4);
value[0] = (char)(0xff & i);
qDebug() << "value :" << value << endl;
int iOut = 0;
pClient->DBRead(1, i, 1, &iOut);
char szBuf[20] = "";
sprintf(szBuf,"%d",iOut);
ui.textEditValue->setText(szBuf);
}
void QtTestPlcS7::slotBtnClean()
{
ui.textEditValue->clear();
}
工程示例代码地址:
https://download.csdn.net/download/whs_123_123/87798999
window可运行包