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/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之旅吧!!
相关文章:
C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法
前言 本人一直从事C上位软件开发工作较多,在之前的项目中通过C访问西门子PLC S7-200/S7-1200/S7-1500并进行数据交互的应用中一直使用的是ModbusTCP/ModbusRTU协议进行。Modbus上位开源库采用的LibModbus。经过实际应用发现Modbus开源库单次发送和接受的数据不能超过…...
如何正确安装Axure插件?详细步骤分享
产品经理在使用Axure导出html文件时,如果选择“完成后打开浏览器”,浏览器往往无法识别。此时,我们需要使用Axure官方谷歌浏览器插件直接访问浏览器中的本地html项目,否则我们需要上传到AxureCloud或使用软件本身的预览功能。接下…...
[SwiftUI]工程最低适配iOS13
问题: 新建工程,选择最低支持iOS13报错: main() is only available in iOS 14.0 or newer Scene is only available in iOS 14.0 or newer WindowGroup is only available in iOS 14.0 or newer 解决: 注释掉上面代码&#x…...
MyBatis-Plus框架学习笔记
先赞后看,养成习惯!!!❤️ ❤️ ❤️ 文章码字不易,如果喜欢可以关注我哦! 如果本篇内容对你有所启发,欢迎访问我的个人博客了解更多内容:链接地址 MyBatisPlus (简称…...
【Java】——期末复习题题库(六)
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...
【水文】实现四则运算的简易计算器
代码: #include <stdio.h>int main() {double num1, num2;char operator, ch;printf("请输入两个操作数和运算符(空格分隔):");scanf("%lf %lf %c", &num1, &num2, &operator);switch (op…...
计算机毕业设计-----ssm+mysql实现的JavaWeb酒店管理系统
项目介绍 本项目为基于ssmmysql实现的JavaWeb酒店管理系统; 主要功能包括: 管理员登录,收入统计,客房管理,商品管理,客房预订,住宿登记,财务统计,旅客管理,接待对象管理等功能。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上…...
安防监控EasyCVR视频融合/汇聚平台大华热成像摄像机智能告警上报配置步骤
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
关于“Python”的核心知识点整理大全64
目录 20.2.15 确保项目的安全 settings.py 20.2.16 提交并推送修改 20.2.17 创建自定义错误页面 1. 创建自定义模板 500.html settings.py settings.py 注意 views.py 20.2.18 继续开发 往期快速传送门👆(在文章最后):…...
Docker overlay2文件busy,容器不能删除问题解决
文章目录 在删除docker容器的时候报错,说设备正忙通过 docker ps -a 查看有两个状态的dead的容器解决方法:1.查看所有挂载的设备2.截取设备的进程id3.清理进程(kill掉即可) 在删除docker容器的时候报错,说设备正忙 Error response from daemon: Driver overlay2 fai…...
栈的数据结构实验报告
一、实验目的: 1、理解栈的定义; 2、利用栈处理实际问题。 二、实验内容(实验题目与说明) 利用栈实现数据的分类,将输入的整数以奇偶为标准分别存放到两个栈中,并最终从栈1和栈2输出偶数和奇数序列。 …...
ValueError: Could not find a backend to open path with iomode `wI` 解决
运行如下语句时报错 imageio.mimwrite(os.path.join(savedir, video.mp4)报错信息: ValueError: Could not find a backend to open video.mp4 with iomode wI. Based on the extension, the following plugins might add capable backends:FFMPEG: pip install …...
小白入门基础 - spring Boot 入门
1.简介 spring Boot是为了简化java的开发流程而构建的,即使是使用springMVC框架,也依然需要大量配置和依赖导入, 这无疑是繁琐的,spring Boot采用了”习惯由于配置“的原则,进行一键化部署,这样极大…...
探索Elasticsearch内存应用的关键因素
了解Elasticsearch内存模型 Elasticsearch的内存使用主要包括堆内存和操作系统缓存。堆内存是Elasticsearch用来存储数据结构的内存,例如文档索引、倒排索引等。操作系统缓存则是Elasticsearch缓存磁盘上的数据块以加速读取操作的一种机制,通常被称为OS…...
关于简单的数据可视化
1. 安装数据可视化必要的openpyxl、pandas,matplotlib等软件包 使用清华源,命令如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…...
透明OLED屏价格:影响因素与市场趋势
在当今的显示技术领域,透明OLED屏以其独特的透明特性和出色的显示效果,正逐渐成为市场的新宠。然而,对于许多消费者和企业来说,透明OLED屏的价格仍是关注的焦点。作为OLED透明屏市场部总监,我认为了解影响透明OLED屏价…...
C++ 释放指针
在C中,释放指针通常使用delete或delete[]操作符; 如果指针指向的是单个对象,可以使用delete操作符进行释放; 在释放完内存后,最好将指针置为nullptr,以避免出现悬空指针(dangling pointer&#…...
三数之和【双指针】
Problem: 15. 三数之和 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 两数相加的加强版,先确定第一个数,然后从右边去用双指针找另外两个数。注意题目需要避免重复的答案,所以要注意处理这个问题。 复杂度 时间复杂度: 添加…...
http 503 错误
503错误是一种HTTP状态码,表示你请求的网站或服务暂时不可用,通常是因为服务器过载或维护,你可能会看到类似这样的提示:503 Service Unavailable、503 Service Temporarily Unavailable、HTTP Server Error 503、HTTP Error 503 I…...
MATLAB - MPC - 优化问题(Optimization Problem)
系列文章目录 前言 模型预测控制可在每个控制间隔内解决一个优化问题,具体来说就是二次规划(QP)。求解结果决定了被控对象在下一个控制间隔之前使用的操纵变量(MV)。 该 QP 问题具有以下特点: 目标或 "成本 "函数 - …...
机器学习中的概念 张量、标量、向量、矩阵等数据结构的区别
张量、标量、向量和矩阵等数据结构在深度学习和数学中扮演着重要角色,它们之间的区别如下: 标量(Scalar):标量是一个单独的数,它没有方向,只有大小。在深度学习中,标量通常表示一个…...
eureka注册列表 某服务出现多个服务实例
最近文件导出功能偶发成功,大部分情况都失败,开始以为接口被拦截,gateway服务没有接口调用日志,发现测试环境可以,正式环境功能无法正常使用。 偶然看到注册中心如下 发现file服务有3个实例,调用接口将错误…...
ubuntu22.04配置双网卡绑定提升带宽
这里写自定义目录标题 Bonding简介配置验证参考链接 Bonding简介 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载均衡等功能,有很…...
VINS-MONO拓展1----手写后端求解器,LM3种阻尼因子策略,DogLeg,构建Hessian矩阵
文章目录 0. 目标及思路1. 非线性优化求解器2. 基于VINS-MONO的Marginalization框架构建Hessian矩阵2.1 estimator.cpp移植2.2 solve.cpp/preMakeHessian()2.3 solve.cpp/makeHessian() 3. solve.cpp/solveLinearSystem()求解正规方程4. 更新状态5. 迭代求解6. EVO评估结果7. 待…...
RxJS 操作符-学习笔记
提前准备: pipe 方法: 用于组合多个操作符,可以将一系列操作符作为参数传递给 pipe 方法,这些操作符将 依次 对数据流进行处理。这里的依次很关键,也代表着pipe()中组合的这么几个操作符的执行顺序就是从开始一直到结束的,其中的…...
【Linux】linux配置静态IP、动态IP方法汇总
1、systemd-networkd 1.1 说明 systemd-networkd是systemd 的一部分 ,负责 systemd 生态中的网络配置部分(systemd-networkd.service, systemd-resolved.service)。使用 systemd-networkd,你可以为网络设备配置基础的 DHCP/静态IP网络等,还可以配置虚拟网络功能,例如网桥…...
Hive自定义函数支持国密SM4解密
当前项目背景需要使用到国密SM4对加密后的数据进行解密,Hive是不支持的,尝试了华为DWS数仓,华为只支持在DWS中的SM4加密解密,不支持外部加密数据DWS解密 新建Maven工程 只需要将引用的第三方依赖打到jar包中,hadoop和…...
CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路
之前写过一篇关于centos 8 官方停止更新维护后解决yum源问题的文章: CentOS 8 停止维护后换可用yum源——筑梦之路_http://ftp.iij.ad.jp/pub/linux/centos-vault/8.5.21-CSDN博客 由于centos 8 dvd的镜像比较大,有时候我们根本不需要去下载一个10G以上…...
安全与认证Week3
目录 Key Management 密钥管理 密钥交换、证书 密钥的类别 密钥管理方面 密钥分发问题 密钥分发方案 混合密钥分发 公钥分发 公钥证书 X.509 理解X.509 X.509证书包含 X.509使用过程 X.509身份验证服务 X.509版本3 取消 由X.509引申关于CA 用户认证、身份管理…...
跟我学c++中级篇——再谈C++20中的协程
一、协程 在前面分析过协程是什么,也对c20中的协程的应用进行了举例说明。所以这次重点分析一下c20中的整体构成及应用的方式。等明白了协程是如何动作的,各种情况下如下何处理相关的事件,那么在以后写协程时就不会死搬硬套了。 二、整体说…...
网上商城建网站/网络推广团队
Dear Juniper Networks Customer, Our records indicate that we have NOT yet received the defective part referenced below. 我们的记录表明我们尚未收到以下引用的有缺陷的部件。 indicate:表明、表示 yet:还、尚、仍然 This is your FIRST reminder requesting the defec…...
做彩票网站代理/淘宝大数据查询平台
如何玩转iPhone手机?最近手机连接投影仪被大家关注,那么苹果手机是如何连接投影仪的呢?新出的iPhone8可以连接吗?跟随小编一起来了解一下详细的步骤教程吧。苹果手机与投影仪连接的方法教程(步骤) 1、第一次…...
网站建设分录/线上营销模式
定义结构 为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下: struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . …...
辽宁省大学生创新创业平台/杭州优化公司哪家好
本节书摘来自华章计算机《需求设计:构建用户想要和需要的产品》一书中的第2章,第2.2节,作者: [英] 克里斯布里顿(Chris Britton) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.2 情境设计 情境设计需要…...
bilibili推广网站/诊断网站seo现状的方法
文章目录一、使用idea构建项目二、项目结构三、编写第一个程序Hello World四、配置项目的热部署五、单元测试一、使用idea构建项目 1、选择 File -> New —> Project… 弹出新建项目的框 2、选择 Spring Initializr,Next 也会出现上述类似的配置界面…...
一个ip做几个网站/网站申请流程
背景 首先我是个菜鸡,工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发,干了快两年的时候,跳槽到了一家伪大厂干安全。投了不少简历都没有回音,只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西,然而…...