强调,只有在mingw编译器下才能用这个方法
首先先去下载snap7库,我下载的是snap7-full-1.4.1,这个csdn到处都有,也可去官网下:http://snap7.sourceforge.net/,,,将其解压到你创建项目的根目录下
然后将将里面的 snap7.cpp snap7.h.snap7.dll,snap7.lib文件复制到你创建的项目根目录下。如下图
重点:
在pro文件中添加下述代码
LIBS += D:\Qt\Qt5.9.1\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
LIBS += D:\Qt\Qt5.9.1\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a
(这个去自己安装qt的路径下查找)
SOURCES +=
main.cpp
mywidget.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 +=
mywidget.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/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
snap7.h
unix|win32: LIBS += -L$$PWD/./ -lsnap7
INCLUDEPATH += $$PWD/.
snap7-full-1.4.1/src/lib/
snap7-full-1.4.1/src/core/
snap7-full-1.4.1/src/sys/
DEPENDPATH += $$PWD/.
最后我试了下,能编译成功并且连接上plc
void snap7Window::on_connect_clicked()
{
const char *ip =ui->ip->text().toStdString().c_str();
int rack = ui->rack->text().toInt();
int slot = ui->slot->text().toInt();
int reg = client->ConnectTo("192.168.2.1",rack,slot);
if(reg == 0){
qDebug()<<"success";
byte buffer[256];
client->DBRead(1,100,1,&buffer);
qDebug()<<"success";
qDebug()<<buffer[0];
}else{
qDebug()<<reg;
qDebug()<<"failed";
}
}
2021/05/08补充:
之前出现该界面连接上PLC后,200smart的step7编程界面就连不上PLC了。或者200smart的step7编程界面连接上了,该界面就连接不上PLC。
原因是,使用snap7连接plc可能默认连接类型会设为PG连接类型,这个类型是Step7编程软件与PLC的连接类型,而且该连接类型就只提供一个连接。
因此我们用snap7连接plc时,要更改其连接类型,选择OP连接类型,详细可见snap7官方文档,现在我po官方api