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文件中添加下述代码
两个.a文件在QT的安装目录下,下面是我自己的安装路径,自己的找一下:
E:\Qt5.9.7\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
E:\Qt5.9.7\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a
将两个.a文件复制到项目文件下的新建文件夹内即可
(文件夹名称自己自定义)

win32: LIBS += -L$$PWD/LIB/ -lwinmm
win32: LIBS += -L$$PWD/LIB/ -lws2_32

将此路径内的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;
    }
    else
    {
        QMessageBox::information(this,"提示","连接失败");
        qDebug() << "failed";
    }

发送数据:

	//写VW区数据
    int plcDZ    = ui->lineEdit_4->text().toInt();	//需要写入的plc地址
    int plcValue = ui->lineEdit_5->text().toInt();	//需要写入的数据
    //写v区数据 需要定义一个word类型数据  占两个字节
    word value = plcValue ;
    value = slot_HighChangeLow(value);	//需要高低位转换一下再写入plc内,因为plc里的高低位和我们电脑上面的高低位反着来的
    ///DBWrite函数需要四个值
    //1.和200smart通讯我用的都是1
    //2.需要写入plc的地址
    //3.从这个地址往后写几个字节(我们要写入的是两个字节的unsigned short,所以填2)
    //4.写入的数据
    client->DBWrite(1,plcDZ,2,&value);

//16位高低位转换函数
word WorkThread::slot_HighChangeLow(word buff)
{
    word high = (buff >> 8)&0xff;     //高8位
    word low  = buff & 0xff;          //低8位

    word buff2 = (low << 8) | high;
    return buff2;
}

构建时可能会提示有的头文件找不到,这需要在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内数据正常
在这里插入图片描述
有什么不懂的可以评论区问我,写浮点数和字符串都已实现(仅限于200smart)

  • 12
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 39
    评论
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值