前言
本人一直从事C++上位软件开发工作较多,在之前的项目中通过C++访问西门子PLC S7-200/S7-1200/S7-1500并进行数据交互的应用中一直使用的是ModbusTCP/ModbusRTU协议进行。Modbus上位开源库采用的LibModbus。经过实际应用发现Modbus开源库单次发送和接受的数据不能超过123个字。如果数据较多则采用分布式交叉读取访问的方式进行。服从较为低下。目前已经经过测试的另一种途径就是Snap7开源库进行访问。
一、Snap7先容
Snap7是一款用于通信的PLC库,是一种轻量级的现代PLC通信库。Snap7可在多个平台上使用,包括Windows PC,Linux,Raspberry Pi和其他和基于C++的平台。该库是完全开源的,采用了MIT协议进行发布。Snap7库是用C语言编写的,提供了对S7-200,S7-300和S7-400 PLC系列的广泛支持,还可以连接到CPU,CP和OP通信适配器。
二、Snap7的长处
1、高效性
Snap7是为了优化时间和空间而编写的。这意味着它既可以快速实行,又可以优化空间,对于嵌入式系统来说,这是至关紧张的。Snap7的巨细很小,但它可以完成大多数现代PLC必要完成的任务。别的,Snap7还具有内存保护功能,可以避免内存走漏和其他题目。
2、跨平台
Snap7具有跨平台的特性,可以在不同的平台上使用,无需重新编写代码,可以极大地简化开发进程。Snap7库称为"轻量级的",这是由于它可以在不同的平台上运行,而不会占用太多的资源。这对于那些必要在受限制的环境下运行的装备尤为紧张,比方嵌入式系统。
3、优化了代码质量
代码质量是一项关乎开发服从和代码可维护性的紧张指标。Snap7的代码是经过充分优化的,并且经过多次测试,以确保质量和性能。Snap7的开发团队还经常进行更新和维护,以确保它一直运行在最新的C++标准和操纵系统上。
三、Snap7的应用场景
1、PLC通信
PLC通信是Snap7库的主要应用范畴,它可以与S7-200,S7-300和S7-400 PLC系列进行通信。Snap7库还可以连接到CPU,CP和OP通信适配器进行通信。这使得Snap7在各种工业主动化范畴和生产线上得到广泛应用。
2、数据收罗与监督
由于Snap7支持多种操纵系统和平台,因此可以使用各种编程语言进行与PLC的通信。比方,可以使用Python编程语言编写脚本,定期读取PLC传感器和生产数据,并将数据存储在当地盘算机或云端存储中,以便进行进一步数据分析。别的,也可以通过Snap7监督生产线的状态,以便及时发现并处理生产线上的故障。
三、Snap7官方网址
https://snap7.sourceforge.net/https://snap7.sourceforge.net/
四、Snap7库文件
Snap7.dll文件和snap7.lib文件位于下图所示的目录中。
snap7.CPP文件和snap7.h文件位于下图所示的目录中。
五、Snap7工程测试
1、打开 Visual Studio 2019后选择新建控制应用步调,如下图所示。
2、选择将项目和应用步调放在同一目录下选项后确认新建项目。
3、为项目增长库文件和项目属性配置,选择项目属性如下图所示。
4、在弹出的窗口中选择连接器->输入属性蒋Snap7.lib添加到附加依赖项。Debug和Release同样的设置。
5、将Snap.cpp和Snap.h头文件增长到控制台项目中,如下图所示。
6、编写如下测试步调,本测试步调中使用的PLC DB块编号为9,机架号为0,槽位为1如下图所示在博图编程软件的硬件组态窗口中可看到机架号和槽位号。
- #include <iostream>
- #include"snap7.h"
- using namespace std;
- unsigned char Snap7Rcv[100];
- TS7Client* mClient;
- void mSnap7GetDataFromS71200Db()
- {
- mClient = new TS7Client;
- mClient->ConnectTo("192.168.2.202", 0, 1);
- mClient->DBRead(9,0,100,&Snap7Rcv);
- delete mClient;
- }
- int main()
- {
- while (true)
- {
- mSnap7GetDataFromS71200Db();
- for (int i = 0; i < 100; i++)
- {
- cout << "mSnap7GetDataFromS71200Db-Snap7DB.Snap7Byte" << "[" << i << "]" << "=" << (int)Snap7Rcv[i] << endl;
- }
- }
-
- std::cout << "mSnap7GetDataFromS71200Db Excute Finished!\n";
- }
复制代码 7、在S7-1200Plc中增长全局DB块如下图所示。访问属性取消优化的DB块访问。DB块中增长Snap7Byte数组,数组类型为Byte。
8、编写S7-1200 PLC步调,本例程为时钟10Hz的频率给DB9赋值,上升沿赋值0,降落沿赋值255.如下图所示。
9、运行C++步调进行测试,运行前将Snap7.dll动态链接库文件放到Debug/release文件下。如下图所示。
经过测试看出读取的DB数据块数据正确无误。
Snap7的说明文档位于资源包中的Doc文件夹下,内容非常具体,涉及到不同平台的应用,Snap7功能非常强盛,真正意义上实现了开源S7通信。
快开启你得Snap7之旅吧!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |