在VS中配置snap7并用snap7与PLC通信

前言

之前实验室的小车使用OPC与上位机通信,但由于年代已久,师兄们写的代码已看不懂加上OPC配置比较麻烦,故现在现在采用snap7进行开发。

snap7介绍

Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广。但也许是因为资料比较少,而且很多都是纯英文,在国内反而没有大规模的应用。
snap7官网有具体的说明以及相应的论坛。

vs上snap7配置

  1. 首先去这个网址下载snap7的开发包https://sourceforge.net/projects/snap7/files/1.4.2/, 下载解压后如图所示有许多文件,但是大部分我们都是用不到的,可以看doc里面的文档和example里的代码示例,我们主要用的就是snap7.h, snap7.cpp, snap7.lib, snap7.dll 四个文件,在windows搜索栏中将他们找到。

在这里插入图片描述
2. VS中新建一个项目,切换文件夹视图创建src, include, lib三个文件夹,将snap7.cpp放入src,将snap7.h放入include,将snap7.lib放入lib,将snap7.dll放入项目根目录。切换回解决方案视图,在头文件和源文件中添加现有项snap7.h和snap7.cpp,如图。
在这里插入图片描述

在这里插入图片描述

  1. 包含头文件和库文件,选中项目右击选择属性,如图添加刚才的include,lib文件夹

PLC上的配置

plc在博图上写好程序后要进行设置,确定ip地址和子网掩码,必须和连接的PC一样,将保护设为无保护,允许put/get远程连接,如图所示。注意如果用到DB块,需要取消对块的优化。好了之后就可以下载到PLC上了。

在这里插入图片描述
在这里插入图片描述

snap7的简单使用

上面配置好开发环境后就可以写具体的代码了,下面一个简单的demo

#include <iostream>
#include <bitset>
#include <snap7.h>

#pragma comment(lib, "snap7.lib")

using namespace std;

#ifdef OS_WINDOWS
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
#endif

const char* plc_ip = "192.168.1.11";//定义plc的IP地址

int main(int argc, char** argv) {
	
	TS7Client* client = new TS7Client();//创建一个客户端

	int ret = client->ConnectTo(plc_ip, 0, 0);//连接plc
	if (ret != 0)
	{
		return -1;
	}
	byte buff[10] = {0};//创建一个读写缓存区
	
	
	client->WriteArea(0x82, 0, 0, 1, 0x01, &buff);//写操作
	client->ReadArea(0x81, 0, 0, 1, 0x01, &buff);//读操作
	//cout << bitset<8>(buff[0]) << endl;
	client->Disconnect();//断开连接
	return 0;
}

这里我们主要用到的就是ReadArea和WriteArea函数。

  • ReadArea(int Area,int DBNumber,int Start,int Amount,int WordLen,void * pUsrData);
typemean
Areainteger寻址确定
DBNumberintegerDB块序号,如果不是DB块就是0
Startinteger变量开始地址
Amountinteger读取变量数量
Wordleninteger每一个变量的大小
pusrDataPointer数据缓存的地址

这里注意Start变量,比如读取变量Q1.3的数据,那么start=(1*8)+3

  • Area 表
    在这里插入图片描述

  • wordlen 表
    在这里插入图片描述

还有许多用法请参考手册

推荐几个相关的博客可以参考一下

https://blog.csdn.net/qq_34935373/article/details/97374783

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
VS配置Snap7库可以参考以下步骤: 1. 首先,您需要从Snap7官网下载Snap7库,并解压到您的项目目录下。 2. 打开Visual Studio,新建一个空项目。 3. 在项目添加Snap7的头文件和库文件。在项目属性的VC++目录添加Snap7库的头文件目录和库文件目录。在连接器的输入添加Snap7的库文件名。 4. 在您的C++代码包含Snap7的头文件,即可使用Snap7库的函数。 以下是一个简单的示例代码,演示如何使用Snap7库进行与西门子1200PLC通信: ```cpp #include <iostream> #include "snap7.h" int main() { // 初始化Snap7库 Snap7Client client = Snap7Client(); int result = client.ConnectTo("192.168.0.1", 0, 1); if (result == 0) { std::cout << "Failed to connect to PLC!" << std::endl; return -1; } // 读取PLC的DB1数据块的值 uint8_t buffer[100]; result = client.DBRead(1, 0, sizeof(buffer), buffer); if (result != 0) { std::cout << "Failed to read DB1!" << std::endl; return -1; } // 写入PLC的M0.0位的值 uint8_t value = 1; result = client.WriteArea(S7AreaDB, 1, 0, 1, &value); if (result != 0) { std::cout << "Failed to write M0.0!" << std::endl; return -1; } // 断开与PLC的连接 client.Disconnect(); return 0; } ``` 以上代码,我们首先创建了一个Snap7Client对象,并使用ConnectTo函数连接到了PLC。然后,我们使用DBRead函数读取了PLC的DB1数据块的值,并使用WriteArea函数写入了PLC的M0.0位的值。最后,我们使用Disconnect函数断开了与PLC的连接。 需要注意的是,不同的PLC厂家和型号,其通信协议和数据格式可能不同。因此,在实际应用,需要根据实际情况进行相应的通信协议和数据格式的处理。 希望这些信息可以帮助到您。如果您还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值