QT mingw編譯器下使用snap7庫與西門子200smart-PLC通訊實現程式碼
阿新 • • 發佈:2021-10-26
近期想要試一下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);
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]);
執行後,獲取資料正常,傳送更改plc內資料正常