QT mingw編譯器下使用snap7庫與西門子200smart-PLC(網口)通信實現代碼


近期想要試一下QT與plc通信,正好朋友有個西門子200smart,於是乎~開整!
百度了會,發現有個博主寫的qt通過snap7來與200smart通信的,那么就來配置snap7吧
首先去官網下載:https://sourceforge.net/projects/snap7/files/1.4.1/
我下載的是:snap7-full-1.4.1.zip

下載完后解壓得到:

將snap7-full-1.4.1文件復制到項目文件內

在pro文件中添加下述代碼

LIBS += E:\Qt5.9.7\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
LIBS += E:\Qt5.9.7\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a

(這是我自己qt安裝的路徑,按自己qt安裝路徑來)

將此路徑內的snap7.h和snap7.cpp,snap7.dll,snap7.lib文件復制到項目文件內,添加現有文件


添加完成后如下圖:

繼續添加現有文件,如下:

SOURCES += \
        main.cpp \
        mainwindow.cpp \
    snap7.cpp \
    snap7-full-1.4.1/src/core/s7_client.cpp \
    snap7-full-1.4.1/src/core/s7_isotcp.cpp \
    snap7-full-1.4.1/src/core/s7_micro_client.cpp \
    snap7-full-1.4.1/src/core/s7_partner.cpp \
    snap7-full-1.4.1/src/core/s7_peer.cpp \
    snap7-full-1.4.1/src/core/s7_server.cpp \
    snap7-full-1.4.1/src/core/s7_text.cpp \
    snap7-full-1.4.1/src/sys/snap_msgsock.cpp \
    snap7-full-1.4.1/src/sys/snap_sysutils.cpp \
    snap7-full-1.4.1/src/sys/snap_tcpsrvr.cpp \
    snap7-full-1.4.1/src/sys/snap_threads.cpp \
    snap7-full-1.4.1/src/lib/snap7_libmain.cpp

HEADERS += \
        mainwindow.h \
    snap7.h \
    snap7-full-1.4.1/src/core/s7_client.h \
    snap7-full-1.4.1/src/core/s7_firmware.h \
    snap7-full-1.4.1/src/core/s7_isotcp.h \
    snap7-full-1.4.1/src/core/s7_micro_client.h \
    snap7-full-1.4.1/src/core/s7_partner.h \
    snap7-full-1.4.1/src/core/s7_peer.h \
    snap7-full-1.4.1/src/core/s7_server.h \
    snap7-full-1.4.1/src/core/s7_text.h \
    snap7-full-1.4.1/src/core/s7_types.h \
    snap7-full-1.4.1/src/sys/snap_msgsock.h \
    snap7-full-1.4.1/src/sys/snap_platform.h \
    snap7-full-1.4.1/src/sys/snap_sysutils.h \
    snap7-full-1.4.1/src/sys/snap_tcpsrvr.h \
    snap7-full-1.4.1/src/sys/snap_threads.h \
    snap7-full-1.4.1/src/sys/sol_threads.h \
    snap7-full-1.4.1/src/sys/unix_threads.h \
    snap7-full-1.4.1/src/sys/win_threads.h \
    snap7-full-1.4.1/src/lib/snap7_libmain.h

鼠標右擊項目->添加庫->外部庫

配置完成!

下面我們來寫代碼和plc通訊
.h

TS7Client *client;

.cpp
初始化

    client = new TS7Client();
    word type = 0x02;
    client->SetConnectionType(type);

建立連接:

    QString strip = ui->lineEdit->text();  // ip
    std::string stri = strip.toStdString();
    const char *ip = stri.c_str();
    qDebug() << "ip:" << ip << endl;
    int rack = ui->lineEdit_2->text().toInt();
    int slot = ui->lineEdit_3->text().toInt();
    int reg = client->ConnectTo(ip,rack,slot);
    if(reg == 0)
    {
        qDebug() << "success" << endl;
        QMessageBox::information(this,"提示","連接成功!");
        BYTE buffer[256];
        client->DBRead(1,100,1,&buffer);
        qDebug() << "success";
    }
    else
    {
        QMessageBox::information(this,"提示","連接失敗");
        qDebug() << "failed";
    }

發送數據:

    int i     = ui->lineEdit_4->text().toInt();
    int plcZJ = ui->lineEdit_5->text().toInt();
    byte value[4];
    memset(value,0,sizeof(byte)*4);
    value[0] = (byte)(0xff & i);
    //value[1] = (byte)((0xff00 & i) >> 8);
    //value[2] = (byte) ((0xff0000 & i) >> 16);
    //value[3] = (byte) ((0xff000000 & i) >> 24);
    qDebug() << "value :" << value << endl;
    client->DBWrite(1,plcZJ,1,&value[0]);

構建時可能會提示有的頭文件找不到,這需要在pro文件內添加上路徑了:

INCLUDEPATH += ./snap7-full-1.4.1/release/Wrappers/c-cpp/ \
               ./snap7-full-1.4.1/src/lib/ \
               ./snap7-full-1.4.1/src/core/ \
               ./snap7-full-1.4.1/src/sys/

運行后,獲取數據正常,發送更改plc內數據正常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM