Qt5调用Snap7

Snap7是一个与西门子PLC通信的开源库, 在网上下载了一个例子, 研究了一天终于通信成功了, 在此记录一下

项目文件

win32:LIBS += C:\Qt\Qt5.7.0\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
win32:LIBS += C:\Qt\Qt5.7.0\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a

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

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

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

libws2_32.a libwinmm.a这两个文件的路径要在本机上找.

连接PLC并进行读写

void MainWindow::on_pushButton_clicked() // 连接
{
    QByteArray ad(ui->lineEdit->text().toUtf8());
    char *Address;
    Address = ad.data();
    int Rack = ui->lineEdit_2->text().toInt();
    int Slot = ui->lineEdit_3->text().toInt();
    int tmp = Client->ConnectTo(Address, Rack, Slot);;
    showLog("建立连接", QString::number(tmp));
}
void MainWindow::on_pushButton_3_clicked() // write DB
{
    qint32 buff = ui->lineEdit_5->text().toInt();
    qDebug() << "write:" << buff;
    Client->DBWrite(8007, 12, 4, &buff);
}

void MainWindow::on_pushButton_4_clicked() // read DB
{
    qint32 buff;
    Client->DBRead(8007, 12, 4, &buff);
    qDebug() << "read:" << buff;
}

测试可以正常读写DB块.在这里插入图片描述

附代码下载链接:https://download.youkuaiyun.com/download/qq_18822805/21648626

qt是一种跨平台的应用程序开发框架,而Snap7是一种用于工业自动化领域的通讯库。在qt中使用Snap7进行通讯,可以实现与PLC(可编程逻辑控制器)或其他硬件设备之间的数据交换。 首先,在qt中使用Snap7,我们需要下载和安装Snap7库文件,并在qt项目中添加相关的头文件和库文件。然后,我们可以在qt程序中调用Snap7库的函数来实现通讯功能。 通常情况下,我们需要先进行连接以建立与PLC或其他硬件设备的通讯。使用来自Snap7库的函数,我们可以指定PLC的IP地址和端口号来连接。连接成功后,我们可以使用Snap7库提供的函数来读取或写入PLC的数据。 例如,通过调用Snap7库的ReadArea函数,我们可以读取PLC的某个区域(如输入,输出,数据块等)的数据。通过指定区域的地址和长度,我们可以获取该区域中的数据值。类似地,我们还可以使用WriteArea函数来向PLC的某个区域写入数据。 通过结合qt的界面设计和Snap7的通讯功能,我们可以开发出功能强大的应用程序,用于监控和控制PLC或其他硬件设备。这些应用程序可以在不同的操作系统上运行,具有良好的跨平台性能。 总之,qtSnap7的结合为工业自动化领域的应用开发提供了便利和灵活性。通过使用这两个工具,我们可以轻松地实现与PLC或其他硬件设备的通讯,从而实现数据的读写和控制功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值