Snap7 西门子S7系列PLC的通信库 简介

article/2025/7/16 7:30:44

目录

  • 简介
  • 参考
  • Snap7 简介
    • Snap7 用途
    • 适用系统
    • 支持语言
    • 西门子S7通信介绍
    • Snap7 组件
    • Sanp7 API
    • 源码、手册、样例下载

简介

最近在开发一个项目,作为技术帝,已经完成工艺、机械设计的设计,项目过多,也是为了让自己更加?叉,就开始尝试做电气制图和PLC编程。结合物联网的发展,有一种想法,将数据传输到Linux的数据库中保存,从而实现内网或者外网的远程监控,以及集合AI技术,将工艺参数进行分析,从而优化工艺与报警。

在问度娘PLC与树莓派连接时,发现了Snap 7。从而PLC数据传输到Linux下能搞定。

Snap7 资料比较少,并且均为英文的。

以下做个总结,便于大家学习。

参考

Snap7 官方网站:http://snap7.sourceforge.net/
https://pypi.org/project/python-snap7/
http://www.6dm.club/index.php/2018/04/07/
https://blog.csdn.net/zxpbuct/article/details/80079698

Snap7 简介

Snap7 用途

Snap7 是一个基于以太网与S7系列的西门子PLC通讯的开源库。

支持包括S7系列的S7-200、S7-200 Smart、S7-300、S7-400、S7-1200以及S7-1500的以太网通信。

适用系统

支持32/64位英特尔/ AMD的所有平台。
例如:
Windows ( 除了 windows Me和95);
Linux和类Linux(树莓派,UBeagleBone Black,DOO 等),
BSD;
Oracle Solaris ;
Apple OSX

支持语言

支持语言比较广
Pascal;
C#;
C++;
C;
LabVIEW
Python;
Node.js
Java.

其中介绍比较多的是Python。

西门子S7通信介绍

西门子S7系列PLC采用以下两种通讯方式:
1)开放式的TCP\IP,可以用于连接PLC与其他非西门子硬件
2) 西门子自己开发的S7 Protocol以太网通讯协议,用于西门子内部硬件通讯

这两者的传输报文是不一样的,如下图:

在这里插入图片描述
西门子数存储到二进制时方式是大端模式(BIG-Endian),而我们的普通电脑常常为小端模式(Liitle-Endian)。
大端模式是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中.
小端模式是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
例如:双字 DWORD 0X2F11214C
PLC
在这里插入图片描述
PC
在这里插入图片描述
所以数据需要进行转换

Snap7 组件

Snap7 时将PC站点与PLC网路完全连接到一起,所以它也要和S7一样包含三个对象组件:
1)客户端
2)服务器
3)协作者
注意:三个对象可以在同一个应用程序中同时使用;许多相同类型的对象可以同时实例化;许多应用程序可以同时使用Snap7。
关于这个三个对象组件,不是很理解,可以参考http://www.6dm.club/index.php/2018/04/07和http://snap7.sourceforge.net/。

在这里插入图片描述

Sanp7 API

如果我们需要读取192.168.10.100 S7-300PLC 中DB32的16位数据,需要:
1)创建Snap7 Client连接;
2) 连接到PLC;
3) 读取DB数据;
4) 关闭Client(连接会自动销毁)

C++源码

#include “snap7.h”;byte MyDB32[256]; //byte is a portable type of snap7.hTS7Client *Client;void SymplyGet(){MyClient = new TS7Client();MyClient->ConnectTo(“192.168.10.100”,0,2);MyClient->DBRead(32, 0, 16, &MyDB32);delete MyClient;}

C语言

#include “snap7.h”;byte MyDB32[256]; S7Object Client;  // It’s a native integervoid SymplyGet(){MyClient =Cli_Create();Cli_ConnectTo(MyClient, “192.168.10.100”,0,2);Cli_DBRead(MyClient, 32, 0, 16, &MyDB32);Cli_Destroy(&MyClient); // passed byref}

#include “snap7.h”;

byte MyDB32[256]; //

byte is a portable type of snap7.h
TS7Client *Client;

void SymplyGet()
{

MyClient = new TS7Client();

MyClient->ConnectTo(“192.168.10.100”,0,2);

MyClient->DBRead(32, 0, 16, &MyDB32);
delete MyClient;
}

源码、手册、样例下载

源码下载:https://sourceforge.net/projects/snap7/files/1.4.2/snap7-full-1.4.2.7z/download
源码下载非常慢:可以在百度云中下载:https://pan.baidu.com/s/1pZPmijUQdYN-xia6Ll4VYg,密码:6eo8

后续将根据个人学习操作过程,逐步记录下来。


http://chatgpt.dhexx.cn/article/EtI9MhQt.shtml

相关文章

通过Snap7与 LOGO!8PLC通信

前言 因一项目需要web控制LOGO! PLC,利用西门子自带的免费LOGO!8.2 Web Editor工具可以很完美的做web页面开发。可以参考视频教程。此外西门子还提供数据导出到excel工具——LOGO8.2 Access Tool。 上面两款工具虽然使用起来非常便捷,但还是想结合Snap…

python使用Snap7读写西门子S7系列PLC

python使用Snap7读写西门子S7系列PLC 1.简介 Snap7 Snap7是一个基于s7通信协议的开源软件包,作者是Davide Nardella,该软件包封装了S7通信的底层协议,可使用普通电脑通过编程与西门子S7系列PLC进行通信 Snap7三大对象组件:客户…

jetson nano上编译与使用西门子PLC通讯库snap7

文章目录 一.西门子snap7介绍二.西门子S7通讯介绍三.jetson nano编译snap7库四.Qt Cmake导入snap7库五.snap7主要函数说明1.与PLC建立连接2.读写PA区变量3.读写MK区变量 六.通讯程序示例 一.西门子snap7介绍 官网:https://snap7.sourceforge.net/ Snap7 是一个基于…

Python-snap7 安装和测试

本文章记录Python-snap7零基础的安装和测试过程。 1 部件和软件 硬件: 1)S7-1500 CUP 1511-1 PN(6ES7511-1AK02-0AB0) 2)SD存储卡 4M(6ES7 954-8LC03-0AA0) 3)220V AC 转 24V DC 电…

SNAP7 C++ 通讯

静态调用的dll的一个实例 2017年11月17日 09:49:18 净无邪 阅读数:334 版权声明:本文为博主原创文章,欢迎各位朋友转载。转载时,保留链接地址! https://blog.csdn.net/naibozhuan3744/article/details/78557761 本实…

Qt5调用Snap7

Snap7是一个与西门子PLC通信的开源库, 在网上下载了一个例子, 研究了一天终于通信成功了, 在此记录一下 项目文件 win32:LIBS C:\Qt\Qt5.7.0\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a win32:LIBS C:\Qt\Qt5.7.0\Tools\mingw530_32\i686-w64-mingw32\lib\libwin…

python snap7 plc_Python-Snap7获取西门子PLC 300数值

说明 在一次数采项目中,对现场PLC300进行取数。本人小白,在网上搜罗了大量信息,终于找到解决方法。 准备事项 1. 操作系统 2.Python环境(本次使用Python3.6.6) 3.Snap7 connect connect(192.168.0.1, rack=0,slot=1) 三个参数分别为:IP 地址,机架,插槽 read_ar…

python-snap7的安装记录

python-snap7的安装记录-windows(仅供个人备忘) 首先 pip install python-snap7其次安装包再然后是环境变量最后是测试 网上其他人的资料尝试上去总感觉不靠谱,很多内容不是一篇网上的文章就能解决(不是这里不对就是那里看不懂&am…

snap7

The Snap7 theatre (剧场、讲堂) The purpose of Snap7 is to fully integrate your PC station into a PLC network, without anybody sees the difference. To allow this, the Snap7 theater must be the same as the Siemens and contain the same actors. Snap7 library…

Python基于Snap7与PLC建立连接并读写数据

最近偶尔在网上看到可以用Python通过snap7与PLC建立连接并读写数据,好多小伙伴没有现成的PLC,这里介绍一个电脑模拟PLC与python通讯。效果与实际情况一样的。这里是以SIEMENS的PLC为例,通过Pycharm与TIA V17建立连接,对其DB块、M区、Q区、I区…

snap7通过NetToPLCsim工具接入模拟西门子PLC S7-1200步骤简介

概述 本文主要是设备通过S7协议接入西门子PLC S7-XXXX系列的开发使用文档,主要包括西门子PLC组态工具博途V15,PLC模拟工具S7-PLCSIM,IP地址映射工具NetToPLCsim等使用使用说明,S7协议的编译及使用说明等; 1 开发工具之间的关系 仿…

基于Snap7实现与西门子PLC通信

​如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻。 Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广。但也许是因为资料比较少,而且很多都是纯英文,在国内反而没有大规模…

c++ snap7通信vs环境配置与编程入门

前言:作者基本为电脑桌面软件开发小白,搜索网上的教程中踩了不少坑,在此整理分享最基础的vs环境下c开发snap7应用环境搭建,完成第一条snap7与PLC成功通信。 准备工作 Visual Studio 2013 及以后版本(以下简称vs&…

Python使用python-snap7实现西门子PLC通讯

Python简介 Python是开源的高级编程语言之一,广泛应用于人工智能、数据分析、爬虫等领域。由于它拥有大量的开源库和标准库,以及简单且贴近自然语言的语法,所以即便是从未接触过编程的人,也能快速上手。2021年10月,Py…

手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程

马尔可夫决策过程 (Markov Decision Process,MDP)是序贯决策(sequential decision)的数学模型,一般用于具备马尔可夫性的环境中。最早的研究可以追溯到最优控制 (optimal control)问题上,1957年,美国学者Richard Bellman通过离散随…

数学建模,8月学习感想

数学建模概览 Matlab入门常用的操作指令数据类型 建模流程分析问题建立模型&求解模型数据建模技术优化技术连续模型求解评价模型求解机理建模方法 撰写论文前情提示正文部分配套说明排版工具 写在最后 长文预警!!! Matlab入门 Matlab可谓…

「从零入门数据分析」01_ 数据分析概述

作者 | gongyouliu 编辑 | auroral-L 本篇文章共8628字,预计阅读时间35分钟。 大家好,我是强哥。一个热爱暴走、读书、写作的人! 本章目录 一、数据分析的发展简史 二、数据分析的应用场景 三、常用的数据分析工具与技术 四、数据分析的思维…

数学建模心得分享(校赛)——2021.6.7

一、个人感受 总结为:找队友->讲方法->找知识->善讨论->勤实践 基础能力(个人见解): 第一次比赛完,还有这刚刚实习完的余温,工作中的思维的惯性还时刻在影响着我,身边的人几乎都为了自己的生活而奋斗。有幸…

matlab在管理学中的应用简述【一】

1、问题研究与描述 1.1 问题与模型 (1)问题 问题与人们的日常生活和工作有着密切的联系,人们每天都要面对各种各样的问题需要处理和解决。 如:资源配置问题,救灾抢险问题,时间安排问题,生产组…

大数据和人工智能属于什么专业 - 学大数据和人工智能出来做什么

人工智能专业主要从事什么工作? 1、算法工程师。进行人工智能相关前沿算法的研究,包括机器学习、知识应用、智能决策等技术的应用。以机器学习的过程为例,涉及到数据收集、数据整理、算法设计、算法训练、算法验证、算法应用等步骤&#xff0…