前言:作者基本为电脑桌面软件开发小白,搜索网上的教程中踩了不少坑,在此整理分享最基础的vs环境下c++开发snap7应用环境搭建,完成第一条snap7与PLC成功通信。
准备工作
- Visual Studio 2013 及以后版本(以下简称vs)Visual Studio 较旧的下载 - 2017、2015 和以前的版本 (microsoft.com)
https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
- 西门子PLC(step7或博途请自行下载,硬件或仿真均可)
- snap7库文件Snap7 - Browse Files at SourceForge.net
https://sourceforge.net/projects/snap7/files/
测试环境
- win10专业版21H2
- Visual Studio 2019专业版
- 博途v16
- 西门子S7-1516F
- snap7-full-1.4.1
软件安装(略)
正文
-
环境配置
1.打开vs,新建 控制台应用项目→输入项目名称→新建
2.找到源文件 “项目名称.cpp” 的文件所在的目录并记住
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”中
4.在vs中,需配置项目属性(快捷键:Alt+Enter)的链接器,或者菜单栏“项目”→“项目名称属性”→“配置属性”→“链接器”→“常规”→“附加库目录”,将.lib和.dll文件所在文件夹路径添加到里面并应用
5.在 插入→附加依赖项中手动输入.lib文件名,并应用
6.在解决方案资源管理器中,头文件→添加现有项→snap7.h,源文件→添加现有项→snap7.cpp
至此,环境已配置好
-
编译第一个程序
1.PLC端根据需求选择设置访问级别;新建一个全局DB块,并把优化的块访问去掉;下载硬件配置到PLC中
2.在设备组态中可查看PLC的机架号(导轨),插槽号
3.PLC端在创建的DB块中加入几个Static量,添加好后编译,可看到偏移量
4.在自己创建的.cpp文件中,引入头文件snap7.h,编写程序
下面这段代码的功能为读取PLC中代号为10001的DB中的8个Byte,并打印在屏幕上。
#include <iostream>
#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.点击调试,得到运行结果
成功,接下来请自由发挥。
更多snap7函数请参考下载的库文件包里的使用手册
参考手册路径在 xxx\snap7-full-1.4.1\doc\Snap7-refman.pdf