当前位置: 首页 > news >正文

C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

前言

        本人一直从事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/icon-default.png?t=N7T8https://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之旅吧!!

相关文章:

  • 【大数据】Zookeeper 客户端的命令行操作
  • fineBI web组件传参
  • MongoDB笔记
  • 使用 Docker Compose 部署 Docker Registry
  • Vue:Vue 3.4 新特性
  • 工业相机——输出图像格式 RAW、RGB、YUV
  • 本地计算机 上的 My5OL808 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
  • 在 CentOS 7.8 上安装 Node.js
  • php生成唯一ID的5种方法介绍
  • 第十五章:面向对象程序设计
  • Mabatis中String类型传参常见问题和解决办法
  • 商务智能|描述性统计分析与数据可视化
  • 嵌入式硬件电路原理图之跟随电路
  • 创建x11vnc系统进程
  • Could not load library libcudnn_cnn_infer.so.8
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Angular 响应式表单之下拉框
  • Angular2开发踩坑系列-生产环境编译
  • Centos6.8 使用rpm安装mysql5.7
  • Cookie 在前端中的实践
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java,console输出实时的转向GUI textbox
  • socket.io+express实现聊天室的思考(三)
  • spring学习第二天
  • Vue2 SSR 的优化之旅
  • 从setTimeout-setInterval看JS线程
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 码农张的Bug人生 - 初来乍到
  • 原生JS动态加载JS、CSS文件及代码脚本
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 1.Ext JS 建立web开发工程
  • FaaS 的简单实践
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ​用户画像从0到100的构建思路
  • #1015 : KMP算法
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.9) MSP (version 4.2)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (HAL库版)freeRTOS移植STMF103
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (万字长文)Spring的核心知识尽揽其中
  • (一)基于IDEA的JAVA基础1
  • (转)3D模板阴影原理
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net 托管代码与非托管代码
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • @Bean有哪些属性
  • @RequestMapping用法详解
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt