c++ snap7通信vs环境配置与编程入门

前言:作者基本为电脑桌面软件开发小白,搜索网上的教程中踩了不少坑,在此整理分享最基础的vs环境下c++开发snap7应用环境搭建,完成第一条snap7与PLC成功通信。

准备工作

  • Visual Studio 2013 及以后版本(以下简称vs)Visual Studio 较旧的下载 - 2017、2015 和以前的版本 (microsoft.com)icon-default.png?t=LA92https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
  • 西门子PLC(step7或博途请自行下载,硬件或仿真均可)
  • snap7库文件Snap7 - Browse Files at SourceForge.neticon-default.png?t=LA92https://sourceforge.net/projects/snap7/files/

测试环境

  • win10专业版21H2
  • Visual Studio 2019专业版
  • 博途v16
  • 西门子S7-1516F
  • snap7-full-1.4.1

软件安装(略) 


正文


  • 环境配置

1.打开vs,新建 控制台应用项目→输入项目名称→新建

c++ snap7通信vs环境配置与编程入门_第1张图片c++ snap7通信vs环境配置与编程入门_第2张图片c++ snap7通信vs环境配置与编程入门_第3张图片

2.找到源文件 “项目名称.cpp” 的文件所在的目录并记住

c++ snap7通信vs环境配置与编程入门_第4张图片

c++ snap7通信vs环境配置与编程入门_第5张图片

3.将下载好的snap7库压缩包解压并根据实际使用编译环境选择“snap7.lib”和“snap7.dll”两个文件,以及“snap7.cpp”和“snap7.h”两个文件,并将这4个文件复制到 2 中的目录下

        如我的环境为win32,路径在 "xxx\snap7-full-1.4.1\release\Windows\Win32"以及“xxx\snap7-full-1.4.1\examples\cpp”中

c++ snap7通信vs环境配置与编程入门_第6张图片

c++ snap7通信vs环境配置与编程入门_第7张图片

c++ snap7通信vs环境配置与编程入门_第8张图片

4.在vs中,需配置项目属性(快捷键:Alt+Enter)的链接器,或者菜单栏“项目”→“项目名称属性”→“配置属性”→“链接器”→“常规”→“附加库目录”,将.lib.dll文件所在文件夹路径添加到里面并应用

c++ snap7通信vs环境配置与编程入门_第9张图片

c++ snap7通信vs环境配置与编程入门_第10张图片

5.在 插入附加依赖项中手动输入.lib文件名,并应用

c++ snap7通信vs环境配置与编程入门_第11张图片

6.在解决方案资源管理器中,头文件→添加现有项→snap7.h,源文件→添加现有项→snap7.cpp

c++ snap7通信vs环境配置与编程入门_第12张图片

至此,环境已配置好

 


  • 编译第一个程序

1.PLC端根据需求选择设置访问级别;新建一个全局DB块,并把优化的块访问去掉;下载硬件配置到PLC中

c++ snap7通信vs环境配置与编程入门_第13张图片c++ snap7通信vs环境配置与编程入门_第14张图片c++ snap7通信vs环境配置与编程入门_第15张图片

2.在设备组态中可查看PLC的机架号(导轨),插槽号 

c++ snap7通信vs环境配置与编程入门_第16张图片

3.PLC端在创建的DB块中加入几个Static量,添加好后编译,可看到偏移量

c++ snap7通信vs环境配置与编程入门_第17张图片

4.在自己创建的.cpp文件中,引入头文件snap7.h,编写程序

 下面这段代码的功能为读取PLC中代号为10001的DB中的8个Byte,并打印在屏幕上。

#include 
#include "snap7.h"

using namespace std;

unsigned char TestValHex[8];
TS7Client* MyClient;

void SymplyGet()
{
    MyClient = new TS7Client();
    MyClient->ConnectTo("10.17.103.2", 0, 1); //PLC的IP地址,机架号,插槽号
    MyClient->DBRead(10001, 0, 8, &TestValHex);  //PLC中的DB块编号,起始字节,要读取的字节长度,将要写入本地的变量
    delete MyClient;
}

int main()
{
    SymplyGet();

    for (int a = 0; a < 8; a++) {
        cout << "PLC_Data" << a << ":" << hex << int(TestValHex[a]) << endl;
    }

    return 0;
}

 5.点击调试,得到运行结果

c++ snap7通信vs环境配置与编程入门_第18张图片c++ snap7通信vs环境配置与编程入门_第19张图片

 成功,接下来请自由发挥。


更多snap7函数请参考下载的库文件包里的使用手册

参考手册路径在 xxx\snap7-full-1.4.1\doc\Snap7-refman.pdf

 

 

 

 

 

 

你可能感兴趣的:(c++,visual,studio,网络协议)