Demostración de monitoreo industrial basada en el desarrollo de QT utilizando OPC_UA para comunicarse con el PLC de las series 1200 y 1500 de Siemens

Tabla de contenido

1. Introducción general

En segundo lugar, el software requerido

En tercer lugar, el hardware necesario

Cuatro, código de programa QT

Cinco, código PLC Siemens



1. Introducción general

Primero mire el diagrama de la interfaz de ejecución QT en la Figura 1-1. La dirección del servidor en la interfaz es la dirección del servidor OPC_UA. La función de todo el proyecto es conectar el sensor de presión para recolectar la presión del suministro de agua a través del Siemens 1200 y PLC de la serie 1500, y luego el PLC envía los datos al servidor OPC_UA a través del servidor OPC_UA.La computadora superior hecha por QT, la computadora superior recopila, muestra y muestra datos de presión y alarmas de alta y baja presión (rojo muestra alarma, verde muestra en ejecución), y puede llevar a cabo la recopilación de palabras y la recopilación continua. A través de este proceso, se puede realizar Todo el proceso de control industrial , el programa PLC y el programa QT de la computadora host han pasado la prueba real. La página superior de notas de la computadora se muestra en la Figura 1-1 a continuación):

En segundo lugar, el software requerido

1. Software de desarrollo QT:

Como Qt Creator: qt-opensource-windows-x86-5.14.0, enlace de descarga: http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.12/5.12.0/ ; simplemente descargue la versión 5.9 o arriba, preferiblemente 32 bits, 64 bits necesita volver a compilar la biblioteca opc_ua;

2. El software Siemens Botu, Botu V15 o superior es suficiente, la dirección de descarga la puede encontrar usted mismo o adjunte la dirección de descarga Botu V15 del autor: https://pan.baidu.com/s/1v-otuaxp8sjNWUlZYTQU1A?pwd=2zt6  ; Código de extracción: 2zt6. Puede encontrar bloggers después de la fecha de vencimiento, los bloggers de Botu V16 y V17 tienen software para instalar.

3. Software de servidor OPC_UA, que se puede descargar y compilar consultando la publicación del blog del bloguero, la dirección del enlace es: https://blog.csdn.net/xipengbozai/article/details/115080901

En tercer lugar, el hardware necesario

1. La computadora, es decir, su computadora está bien, si la configuración es un poco más alta, no es un gran problema para el escritorio ahora;

2. Siemens 1200 o Siemens 1500PLC, si es posible, es fácil de manejar, si no, puede usar un simulador, pero el efecto no es tan bueno como el real;

3. Cable de red y algunos cables de descarga, etc.;

4. Sensor, estos datos pueden ser simulados por PLC, que es más fácil de manejar;

Cuatro, código de programa QT

Un directorio de proyectos:

1. El código mian de QT

#include "OpcUaClientByQT.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OpcUaClientByQT w;
    w.show();
    return a.exec();
}

2. Código de interfaz principal

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_OpcUaClientByQT.h"
#include "wavechart.h"
#include <QTimer>
#include <QTime>
#include "imagepilot.h"
extern "C"{
#include "open62541.h"
}
class OpcUaClientByQT : public QMainWindow
{
    Q_OBJECT

public:
    OpcUaClientByQT(QWidget *parent = Q_NULLPTR);

    void initallOPCUANode();
    void controlfunc(int num);
    void initTimer();

    void readcontrolinfo();


private:
    Ui::OpcUaClientByQTClass ui;
	WaveChart *m_WaveChart_Press;
	QTimer *m_Timer;
	ImagePilot *m_ImagePilot_Run;
	ImagePilot *m_ImagePilot_Alarm;
	bool m_bConnFlag;//连接成功标志
	void initForm();//初始化波形图


    UA_Client *client;
    QTimer *clienttimer;
    UA_Variant showValue[2];
    UA_NodeId showId[2];


    UA_Variant ctrlValue[2];
    UA_NodeId ctrlId[2];

    UA_Variant pressure;
    UA_NodeId pressureId;
    int  pressureValue;

    UA_Variant max;
    UA_NodeId maxId;

    UA_Variant min;
    UA_NodeId minId;

    \
    UA_Variant time;
    UA_NodeId timeId;


    int flag[2];
    UA_Boolean trueflag;
    UA_Boolean falseflag;

    QPushButton *ctrlbtn[2];

private slots:
	
	void addData();
	void on_btn_conn_clicked();
	void on_btn_close_clicked();
	void on_btn_Trigger_clicked();
	void on_btn_RUN_clicked();
	void on_btnClearData_clicked();
    void updateData();
};

3. Código de curva

#ifndef WAVECHART_H
#define WAVECHART_H

/**
 * 1. 可设置间隔
 * 2. 可设置标题
 * 3. 可设置是否显示横线及坐标点
 * 4. 可设置背景色文字颜色
 * 5. 可设置范围值及x轴y轴步长
 * 6. 暂时不支持最小值小于0的数据
 */

#include <QWidget>

#ifdef quc
class Q_DECL_EXPORT WaveChart : public QWidget
#else
class WaveChart : public QWidget
#endif

{
	Q_OBJECT
	Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
	Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
	Q_PROPERTY(double xStep READ getXStep WRITE setXStep)
	Q_PROPERTY(double yStep READ getYStep WRITE setYStep)

	Q_PROPERTY(double space READ getSpace WRITE setSpace)
	Q_PROPERTY(QString title READ getTitle WRITE setTitle)
    Q_PROPERTY(bool smooth READ getSmooth WRITE setSmooth)
	Q_PROPERTY(bool showHLine READ getShowHLine WRITE setShowHLine)
	Q_PROPERTY(bool showPoint READ getShowPoint WRITE setShowPoint)
	Q_PROPERTY(bool showPointBg READ getShowPointBg WRITE setShowPointBg)

	Q_PROPERTY(QColor bgColorStart READ getBgColorStart WRITE setBgColorStart)
	Q_PROPERTY(QColor bgColorEnd READ getBgColorEnd WRITE setBgColorEnd)
	Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
	Q_PROPERTY(QColor pointColor READ getPointColor WRITE setPointColor)

public:
    explicit WaveChart(QWidget *parent = 0);

protected:
	void paintEvent(QPaintEvent *);
	void drawBg(QPainter *painter);
	void drawBox(QPainter *painter);
	void drawText(QPainter *painter);
	void drawTitle(QPainter *painter);
	void drawPoint(QPainter *painter);

private slots:
	void updateData();

private:
    QRectF pointRect;               //绘制数据区域
    QVector<double> listData;       //数据集合

    double minValue;                //最小值
    double maxValue;                //最大值
    double xStep;                   //x轴步长
    double yStep;                   //y轴步长

    double space;                   //间隔
    QString title;                  //标题
    bool smooth;                    //是否平滑
    bool showHLine;                 //是否显示横线
    bool showPoint;                 //是否显示坐标点
    bool showPointBg;               //是否显示坐标背景

    QColor bgColorStart;            //背景渐变开始颜色
    QColor bgColorEnd;              //背景渐变结束颜色
    QColor textColor;               //文字颜色
    QColor pointColor;              //坐标点颜色

public:
	double getMinValue()            const;
	double getMaxValue()            const;
	double getXStep()               const;
	double getYStep()               const;

	double getSpace()               const;
	QString getTitle()              const;
    bool getSmooth()                const;
    bool getShowHLine()             const;
	bool getShowPoint()             const;
	bool getShowPointBg()           const;

	QColor getBgColorStart()        const;
	QColor getBgColorEnd()          const;
	QColor getTextColor()           const;
	QColor getPointColor()          const;

	QSize sizeHint()                const;
	QSize minimumSizeHint()         const;

public Q_SLOTS:
	//添加和设置数据数据
	void addData(double data);
	void setData(QVector<double> data);
	void clearData();

	//设置范围值及步长
	void setMinValue(double minValue);
	void setMaxValue(double maxValue);
	void setXStep(double xStep);
	void setYStep(double yStep);

	//设置间隔
	void setSpace(double space);
	//设置标题
	void setTitle(const QString &title);
    //设置是否平滑曲线
    void setSmooth(bool smooth);
	//设置显示横线
	void setShowHLine(bool showHLine);
	//设置显示坐标点
	void setShowPoint(bool showPoint);
	//设置显示坐标背景
	void setShowPointBg(bool showPointBg);

	//设置颜色
	void setBgColorStart(const QColor &bgColorStart);
	void setBgColorEnd(const QColor &bgColorEnd);
	void setTextColor(const QColor &textColor);
	void setPointColor(const QColor &pointColor);
};

#endif // WAVECHART_H

4. Código indicador

#ifndef IMAGEPILOT_H
#define IMAGEPILOT_H

/**
 * 1. 可设置五种颜色
 * 2. 可自定义指示灯图片
 */

#include <QWidget>

#ifdef quc
class Q_DECL_EXPORT ImagePilot : public QWidget
#else
class ImagePilot : public QWidget
#endif

{
	Q_OBJECT
    Q_ENUMS(PilotStyle)
    Q_PROPERTY(PilotStyle pilotStyle READ getPilotStyle WRITE setPilotStyle)

public:
	enum PilotStyle {
		PilotStyle_Blue = 0,        //蓝色风格
		PilotStyle_Gray = 1,        //灰色风格
		PilotStyle_Green = 2,       //绿色风格
		PilotStyle_Red = 3,         //红色风格
		PilotStyle_Yellow = 4       //黄色风格
	};

	explicit ImagePilot(QWidget *parent = 0);

protected:
	void paintEvent(QPaintEvent *event);

private:
	PilotStyle pilotStyle;
	QString imgFile;

public:
	PilotStyle getPilotStyle()      const;
	QString getImgFile()            const;
	QSize sizeHint()                const;
	QSize minimumSizeHint()         const;

public Q_SLOTS:
    void setPilotStyle(const PilotStyle &pilotStyle);
    void setImage(const QString &imgFile);
};

#endif // IMAGEPILOT_H

5. Conecta parte del código

    //创建OPC_ua客户端
    client = UA_Client_new(UA_ClientConfig_default);
    UA_StatusCode retval = UA_Client_connect(client,url.toUtf8());
    //连接不成功的话
    if(retval != UA_STATUSCODE_GOOD)
    {
        UA_Client_delete(client);
        QMessageBox::information(this,"Error","连接失败,请确认服务器是否开启!");
    }
    else
    {
        m_bConnFlag = true;
        ui.groupBox_Contrl->setEnabled(true);//连接成功 控制区可以操作
        ui.btn_conn->setEnabled(false);//连接成功 连接按钮变灰
        QMessageBox::information(this, "提示", "连接成功", QMessageBox::Ok);
    }

6. La dirección de descarga del código completo de todo el software qt: https://download.csdn.net/download/xipengbozai/87803908

Cinco, código PLC Siemens

Un directorio de proyectos:

1. Bloque de datos de la parte de presión

 2. Definición de variables OPC

3. Configuración de PLC específica y dirección de descarga de código de proyecto completo: https://download.csdn.net/download/xipengbozai/87803911

Supongo que te gusta

Origin blog.csdn.net/xipengbozai/article/details/130785115
Recomendado
Clasificación