前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Snap7 西门子S7系列PLC的通信库 简介[通俗易懂]

Snap7 西门子S7系列PLC的通信库 简介[通俗易懂]

作者头像
全栈程序员站长
发布2022-11-03 17:27:54
发布2022-11-03 17:27:54
4.5K00
代码可运行
举报
运行总次数:0
代码可运行

目录

简介

最近在开发一个项目,作为技术帝,已经完成工艺、机械设计的设计,项目过多,也是为了让自己更加?叉,就开始尝试做电气制图和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++源码

代码语言:javascript
代码运行次数:0
运行
复制
#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;
  }

Jetbrains全家桶1年46,售后保障稳定

C语言

代码语言:javascript
代码运行次数:0
运行
复制
#include “snap7.h”;
   
    byte MyDB32[256]; 
    S7Object Client;  // It’s a native integer
   
  void SymplyGet()
  {
   
    MyClient =
  Cli_Create();
   
  Cli_ConnectTo(MyClient, “192.168.10.100”,0,2);
   
  Cli_DBRead(MyClient, 32, 0, 16, &MyDB32);
   
  Cli_Destroy(&MyClient); // passed by
  ref
  }

#include “snap7.h”;

代码语言:javascript
代码运行次数:0
运行
复制
byte MyDB32[256]; //

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

void SymplyGet() {

代码语言:javascript
代码运行次数:0
运行
复制
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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/203721.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 简介
  • 参考
  • Snap7 简介
    • Snap7 用途
    • 适用系统
    • 支持语言
    • 西门子S7通信介绍
    • Snap7 组件
    • Sanp7 API
    • 源码、手册、样例下载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档