Snap7 and Qt ,PLC communication



  • Hello guys I have snap7 .lib and .dll for win32 and win64 ,also http://snap7.sourceforge.net is here.

    How can I include these folder with Qt Mingw .This is very important for me to job


  • Qt Champions 2016

    Hi
    Unless the DLL is created with mingw compiler,
    you cannot use it.
    Do you know if those are for visual studio and what version ?

    Anyway, if you compiled them yourself, you just need to tell
    it where to find DLL file and
    where to find any include files.

    http://doc.qt.io/qt-5/third-party-libraries.html

    INCLUDEPATH += 3rdparty/CatWhisperer/include
    LIBS += -L"3rdparty/CatWhisperer/lib" -lCatWhisperer
    

    CatWhisperer would be snap7 or what the real file name is.

    Ah, there is info about mingw on site
    alt text

    Make sure to read that and match with your version of
    mingw.
    (do not download new mingw. use the one in Qt)



  • https://sourceforge.net/projects/snap7/files/1.4.2/,There are snap7 files .I have MinGW lastest version ,in this case I cannot use this now ,Am I right?How can I download in Qt old versions.MinGW 64 or 32.Also When I add library in Qt ,will the dll folder add in the project if the dll and lib in same folder (they are in project folder)?



  • Also is it enough just #include "snap7.h"


  • Qt Champions 2016

    Hi
    Just compile the DLLs with the Qt mingw version. Should work.
    Its not a good idea to use older mingw compiler than the one used to build the Qt dlls.
    You will just get issues with Qt.

    On https://sourceforge.net/projects/snap7/files/
    I dont see any mentioned of mingw. The download seems for VIsual Basic.

    • Also is it enough just #include "snap7.h"
      Yes when you have told it where to find it in the .pro file with INCLUDEPATH


  • Okay ,I am downloading mingw 4.7 and to download the snap7 ,you must download 1.4.2 and you will see in build folder .dll and .lib for 32 or 64 bit


  • Qt Champions 2016

    @ZekDe
    Hi
    From where do u download mingw ?
    Its included in Qt. ??

    anyway, it seems ready for mingw
    alt text

    so make sure to build right version 32/64 for the Qt you are using/downloaded.



  • Hi,
    I'am downloading with maintanencetool


  • Qt Champions 2016

    @ZekDe
    Ok, hopefully its compatible with the Qt you are using.
    (Qt are DLLS and too old or too new version of mingw cannot use
    the prebuild Qt Dlls you have installed)

    What Qt version are you using ?
    (and what version of mingw came with it ?)



  • Open source lastest version ,I don't remember I had to delete Qt because of my mistake,now I am reinstalling it.


  • Qt Champions 2016

    @ZekDe
    Ok so you will be using the mingw that comes with Qt 5.1 ?



  • I am downloading all mingw versions![alt text](0_1515853830620_b7bf5064-b84a-49f5-8f4d-b8646509ef11-image.png image url)


  • Qt Champions 2016

    :)
    but why ???
    The Qt 5.0.2 mingw Qt contains one.
    There should be no need to add extra compilers from "tools" unless you expect the one
    in Qt is too new for snap7



  • Hi @ZekDe,

    personally I would not use MinGW 4.7 anymore. It's an old compiler. Also Qt 5.0 and 5.1 are very early 5.x versions, I would not use them for new development. You may encounter bugs that were already fixed in later versions (we have 5.10 now!)

    If there is no Snap7 version compatible with a recent MinGW, I would try to compile the library myself.

    It may be more work in the beginning, but that time will be saved in later development for sure.

    Just my two cent.



  • The reason that I install the all mingw because of if I need other one,is it wrong ? :), Also Maybe you saw the src folder n snap7 folder.Can I use these in my project ,in this case it is enough now.But When I try these .h and .c files ,I encountered some problems.What excatly I should do.Because this is important for my job


  • Qt Champions 2016

    @ZekDe
    Hi , yes you might be able to include the source files directly in the Qt app unless snap7 is
    designed to be a lib. Installing multiple version of mingw will open up for a mess with paths etc.

    If directly including them (and fixing the .pro file so it can find its headers) still produces errors, it might not
    allow direct use and must be build as DLL.



  • as a result,What is your offer now?


  • Qt Champions 2016

    @ZekDe
    Offer ?
    All info is there. they even made .bat files to compile the DLL
    so build it and link it to the Qt app.
    It has clear build instruction.



  • I suppose I have lack of knowledge,I dont know about .bat file.How will I use it?What does it do


  • Qt Champions 2016

    @ZekDe
    First read its build dosc.
    You might need to alter paths to where it looks for compiler
    Then open a Command prompt and run the bat file for
    mingw32 or 64 (depending on what u use)
    It should produce a DLL you can link to your app as described.



  • Check me then if I understand right.
    1-->I will build a .dll using .bat according to mingw file path,I will chance in bat file.
    2-->I will put in my Qt app .dll, .lib and I include the snap7.lib in .pro file
    Then Qt will see both because of the .dll and .lib same folder.



  • Okay I said wrong as far as I see.
    To build Snap7, open a command prompt into the working folder build\windows\MinGW32 and run "make all" (or "make clean" if you want to clean the project).
    How can I open a command promt in working folder ,it means a txt file?and then convert .bat.Still I am confused.How can I assembly all.I have Makefile,.bat,.lib..dll.I have new version Mingw this is why I need to change in .bat file.When I click this what will happen,will it produce a makefile? then How will I make out with them all in Qt


  • Qt Champions 2016

    @ZekDe
    Hi
    seems fine if 2:
    is
    INCLUDEPATH += /path/include ( points to where ever Snap7 .h file livrd
    LIBS += -L"c:/fullpath/lib" -lCatWhisperer

    and "c:/fullpath/lib" is corrected to point to the folder that contains the DLL you just build
    and CatWhisperer be replaced with actual filename


  • Qt Champions 2016

    • how can I open a command prompt in working folder

    just open one and navigate to the folder using command. :)
    like
    cd c:\xxx\yyy

    You dont convert the BAT file. u run it

    It might produce a make file and you can run mingw make on it



  • path=c:\MinGW32\bin;c:\MinGW32\mingw32\bin;%PATH
    mingw32-make %1
    this is in .bat
    and he said me
    It is assumed that MinGW compiler is installed in C:\MinGW32 and its release is 4.7.2.
    If not, you need to modify make.bat and makefile.
    My mingw like you know in another folder.I will change it in the command line? and How?And I don't stil lunderstand how the makefile will be used in Qt,Am I missing something.And Thank you so much your helps,I learned very important knowledges



  • Hi... i'm using SNAP7 compiled with mingw inside qtcreator... i can compile and also debug SNAP7 along with my HMI software...
    If you can wait until monday i'll send you the complete project so you can have an easy start...



  • Thank you mmiacca ,I can wait and also How did you manage it if you explain I will be so happy.



  • Are you able to do it with mingw 5.3.0?



  • Hi mmiacca ,could you give me an example ?,I need like you ssay,I need easy start



  • Hi (excuse my english please)

    Here is the project file to compile a gui example with snap7, no libraries, all in one..

    #-------------------------------------------------
    #
    # Project created by QtCreator 2016-11-17T17:37:17
    #
    #-------------------------------------------------
    
    QT += core gui network
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = test1
    
    TEMPLATE = app
    
    # Desde http://stackoverflow.com
    # Finally, CONFIG(debug, debug|release) evaluates to true if CONFIG contains "debug" but not "release", or if it contains both
    # "debug" and "release" but "release" doesn't appear after the last occurrence of "debug".
    CONFIG(debug, debug|release){
     DESTDIR = $$_PRO_FILE_PWD_/../debug
     #DEFINES += QT_NO_DEBUG
    }
    else{
     DESTDIR = $$_PRO_FILE_PWD_/../release
    }
    
    win32:LIBS += C:\Qt\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
    win32:LIBS += C:\Qt\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a
    
    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/
    
    SOURCES += main.cpp\
     mainwindow.cpp \
        client.cpp \
        ../snap7-full-1.4.1/release/Wrappers/c-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/lib/snap7_libmain.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
    
    HEADERS += mainwindow.h \
        client.h \
        ../snap7-full-1.4.1/release/Wrappers/c-cpp/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/lib/snap7_libmain.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
    
    FORMS += mainwindow.ui
    
    

    But the full project is here https://drive.google.com/file/d/1AWX3xe00D-WWrQwFGi18juR8KBkYkB7V/view?usp=sharing ... also the snap7 project... i'm using qt 5.9.2 with mingw... install it with default options...

    Hope this help



  • This post is deleted!


  • Hi,

    I'am intersting of this to integrate Snap7 with QtCreator,
    I test your example "test1", it's compiled, but when run the "test.exe" : there is nothing !!
    Have you an idea please ?
    thank you in advanced



  • @Daminos Nothing means? the windos has only two widget that show variables from plc, put a breakpoint in the following function...

    void MainWindow::scan()
    {
    //ui->log->setText(logMessage);

    union U
    {
        unsigned char x[4];
        float f;
    } u;
    
    int err = Client->DBRead(380, 160, 4, u.x);
    unsigned char aux;
    
    aux = u.x[0];
    u.x[0] = u.x[3];
    u.x[3] = aux;
    
    aux = u.x[1];
    u.x[1] = u.x[2];
    u.x[2] = aux;
    
    if(!err)
    {
        ui->value_0->setValue(u.f);
        ui->value_1->setValue(u.f);
    
        ui->value_0->setStyleSheet("");
        ui->value_1->setStyleSheet("");
    }
    else
    {
        ui->value_0->setValue(0);
        ui->value_1->setValue(0);
    
        ui->value_0->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->value_1->setStyleSheet("background-color: rgb(255, 0, 0);");
    
        // Connection
        int error = CliConnect();
        if(!error)
        {
    
        };
    
    }
    
    char valor;
    err = Client->DBRead(380, 151, 1, &valor);
    ui->checkBox->setChecked(valor & 0x01);
    

    }



  • @mmiacca
    Thanks a lot, it's worked now :D
    I have another question please : are you tested this example with Logo_8 ?
    Best regards,



  • @Daminos good.... i do not test this with logo, only S7-400... do you change the cpu TCP/IP address and slot in the logo and in the code?



  • @mmiacca
    I'll test that next week (because I wait for the Logo_8), I'll tel you if it's working ;)
    see you !
    Best regards,



  • @mmiacca Hi mmiacca, I tested the connection code with the Logo_8, and it's worked ;)
    Best regards,
    Daminos


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.