Snap 7 使用C# 实现对西门子PLC的读写

摘要: 本篇主要针对PLC的错误日志进行操作,此目的是方便在没有电气工程师在现场的情况下 快速定位错误位置,帮助节约ShoutDown 时间 提升企业产量。使用系统环境Windows 操作系统,.Net 4.5以上版本 ,VS2015以上。

1.Snap 7 基本知识

Snap 7 是一款基于以太网传输的开源平台和接口并且专门针对西门子S7系列PLC。最新款的S7-1200/1500,SIMAICS 驱动,老款的S7-200,和小型的LOGO 产品 0BA7/0BA8也部分支。

Snap 7 弥补了OPC的一些不足,在传输大量数据且实时性要求高的场合Snap 7 具有很强的优势。并且Snap 7可以跨平台(OPC UA也可)

主要特征如下:

1.原生多架构设计(32/64位)

2.独立于平台,目前支持Windows(从NT 4.0到Windows 8),Linux,BSD,Oracle Solaris 11和Mac OSX。

3.多CPU支持:Intel和AMD i386 / x86_64,ARM,Sun Sparc,Mips。

4.不依赖于任何第三方库,无需安装,零配置。

5.用于性能优化的三种不同的本机线程模型:Win32线程/ Posix线程/ Solaris 11线程。

6.两种数据传输模型:经典同步和异步。

7.两种数据流模型:轮询和未经请求(PLC在需要时传输数据)

8.两个专用端口:Settimino和Moka7允许您使用Arduino或Android手机与S7 PLC通信。

其次Snap 7 还有如下优点:

1.接口易于使用

2.可以被多种语言调用(C/C++,.Net/Monon,Pascal,LabView,Python,Node.js)

2.Snap 7 基本命令

1.Snap 7 命令可分为一下几种

 Data Read/Write

 Cyclic Data Read/Write

 Directory info

 System Info

 Blocks move

 PLC Control

 Date and Time

 Security

 Programming

2. S7协议功能目录

Data I/O (also via multivariable read/write) Read/Write DB, Mk, IPI, IPQ, Timers, and Counters.

Directory List Blocks, List Blocks of Type, Block info.

Control  Run/Stop, Compress and Copy Ram to Rom.

Date and Time Get/Set PLC Date and Time.

System Info Read SZL 

Security Get/Set session password .

3.SSL 基本信息

1.SSL(系统状态列表) 概念

所有的诊断事件按它们出现的先后次序登陆在诊断缓冲区中。可以通过模块信息和诊断缓冲区等查看系统状态列表的信息。为了快速定位故障位置,帮助企业减少宕机时间提升产量,对系统诊断缓冲区的监视是十分有必要的。传统的OPC AE 配置步骤繁琐,具有限制性。使用Snap 7调用接口即可获取SSL内容。

SSL-IDW#16#xyA0 部分列表的表头结构如下:

内容 含义
SZL-ID

W#16#xyA0:可在当前处于激活状态的操作模式下提供的目录;

INDEX 仅对于SZL-IDW#16#xy01A0 最新项目数
LENTHDR W#16#0014 一个数据记录长度为10个字(20个 字节)
N_DR 数据记录数目

诊断信息的数据具有一下结构:

名称 长度 含义
ID 1个字 事件ID
info 5个字 有关该事件及其后果的信息
time 4个字 事件的时间戳

2.可能的部分系统状态列表

3.接口函数

函数名:ReadSZL 
Description :Reads a partial list of given ID and INDEX.  
Declaration :public int ReadSZL(int ID, int Index, ref S7SZL SZL, ref int Size)

Cli_ReadSZL Reads a partial list of given ID and Index.

Cli_ReadSZLList Reads the list of partial lists available in the CPU.

4.C# 关键代码

 private void ReadSzl_bt_Click(object sender, EventArgs e){ReadSZL();}void ReadSZL(){S7Client.S7SZL SZL = new S7Client.S7SZL();Int32 Size = 16380; // Declare our Buffer Size  SZL.Data = new byte[Size];  //长度参考 S7SZL struct 定义的长度 label19.Text = "0";TxtDump.Text = "";int Result = Client.ReadSZL(Convert.ToInt32(TxtSZLID.Text), Convert.ToInt32(TxtSZLIndex.Text), ref SZL, ref Size);ShowResult(Result);if (Result == 0){label19.Text = Size.ToString();// HexDump(TxtDump, SZL.Data, Size);// HexDump(SZL.Data, Size);Dump(TxtDump, SZL.Data, Size);Dump(SZL.Data, Size);ShowSSLID();}}private void ShowResult(int Result){// This function returns a textual explaination of the error codeTextError.Text = Client.ErrorText(Result) + " (" + Client.ExecTime().ToString() + " ms)";}private void Dump(TextBox Box, byte[] Buffer, int Size){// Declaration separated from the code for readabilityint y;Box.Text = "";y = 0;for (int c = 0; c < Size; c++){String S = Convert.ToString(Buffer[c], 16);if (S.Length == 1) S = "0" + S;Box.Text = Box.Text + S + " ";y++;if (y == 20){y = 0;Box.Text = Box.Text + (char)13 + (char)10;}}}public void ShowSSLID(){string x5;string x6;if (SZL_ReadString.Count > 0){for (int i = 0; i < SZL_ReadString.Count; i++){x5 = SZL_IDText.SZL_IDString(DataTrasfer(SZL_ReadString[i].SZLIDHi, SZL_ReadString[i].SZLIDLo));x6 = SZL_ReadString[i].SZLYear + "年" + SZL_ReadString[i].SZLMonth + "月" + SZL_ReadString[i].SZLDay + "日" + SZL_ReadString[i].SZLHour+ "时" + SZL_ReadString[i].SZLMindute + "分" + SZL_ReadString[i].SZLSecound + "秒" + SZL_ReadString[i].SZLMSecoundHi + SZL_ReadString[i].SZLMSecondLo;SZL_tXT.Text = SZL_tXT.Text + SZL_ReadString[i].SZLIDHi.ToString() +SZL_ReadString[i].SZLIDLo.ToString() + " " + x5 + " " + x6 + "\r\n";}}}

4.总结

虽然 SIMATIC NET OPC AE 也可以读出SSL列表内容,但是受到OPC本身的限制并且SIMATIC NET OPC 配置比较复杂如果在客户现场非常步方便,我相信Snap 7 会是最佳的方式。

5.参考资料

1.用于%20S7300_400系统和%20标准功能的系统软件%20卷1_2.pdf (33.2节)

2.《西门子工业通信网络组态编程与故障诊断》

C# Snap7 实现对西门子PLC的读写(本篇主要对系统诊断缓存区(SSL或SZL)内容进行读取)相关推荐

  1. 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信

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

  2. JavaScript对西门子PLC进行读写通讯控制中的问题和修复

    之前在文章<JavaScript如何对欧姆龙.三菱.施耐德等PLC进行读写通讯控制>有介绍,如何通过 LECPServer + Javascript 对欧姆龙,三菱,施耐德等PLC进行通讯 ...

  3. Springboot使用s7connector 实现对西门子PLC数据读写

    工具类: package com.zg.myssm.utils;import com.github.s7connector.api.DaveArea; import com.github.s7conn ...

  4. 运用C#编程通过OPC方式实现PC机与西门子PLC通讯-同步通讯篇

    1. OPC服务介绍 西门子提供的最新软件:Simatic Net PC-Software CD 2005为各种组态软件的开发提供了一个统一的平台,它建立的PC站既为一些组态软件,如:WinCC.Pr ...

  5. python实时读plc数据_python snap7读写西门子S系列PLC寄存器的值(PLC的I、Q、M、DB区)...

    西门子 SiemensTCP/IP调试助手工具是利用python 开发的,适用于西门子S7-300.S7-400.S7-1200.S7-1500等具备Ethernet TCP/IP通讯方式的PLC的( ...

  6. 用python编写西门子plc程序_snap7读写西门子plc1200步骤(python)

    本文是利用snap7进行对plc1200进行读写,所用语言是python3,windows7下,plc具体型号为S7-1212DC/DC/DC 1.snap7安装 win+R打开运行串口,输入cmd, ...

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

    文章目录 一.西门子snap7介绍 二.西门子S7通讯介绍 三.jetson nano编译snap7库 四.Qt Cmake导入snap7库 五.snap7主要函数说明 1.与PLC建立连接 2.读写 ...

  8. 如何使用 Python 构建 西门子PLC Snap7通信

    如何使用 Python 构建西门子 PLC Snap7通信 PLC(Programmable Logic Controller)即可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制领域中, ...

  9. s7 200 java_java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...

最新文章

  1. HashMap解决hash冲突的方法
  2. java和python哪个好就业2020-Java和Python哪个发展前景好?老男孩教育
  3. fiddler和xampp安装成功后,网站打不开的原因
  4. CUDA学习(五十一)
  5. 甜甜的爱情+美食完美情人节海报,PSD分层模板轻松搞定设计,拿去用!
  6. 自动驾驶汽车也能聊天?
  7. python编程入门第3版pdf-Python编程入门(第3版) PDF扫描版[26MB]
  8. mysql批量插入之提高插入效率
  9. SPSS统计分析行业应用实战--SPSS 24.0新增
  10. Fedora14 root用户登陆
  11. 记某单机游戏的一次内购破解
  12. c语言反步法编程,CCM模式下Boost电路的反步法非线性控制与仿真.pdf
  13. 非线性优化问题---MATLAB
  14. android短视频列表自动播放,手把手教你实现视频列表滚动自动播放-短视频列表滚动播放实战...
  15. 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
  16. 因果,稳定,无源,无损系统(1)
  17. 最详细的maven教程
  18. apache 问题 You don't have permission to access /test.php on this server 解决方法
  19. arduino超声波测距接线图详细_arduino——超声波测距仪(笔记)
  20. 基于业务流程的信息化建设与应用

热门文章

  1. Linux超能力BPF技术介绍及学习分享
  2. uva 109 SCUD Busters
  3. UVa 109 - SCUD Busters(凸包计算)
  4. 在ubuntu上绑定USB接口的两种方式
  5. python-爬虫-woff静态字体-映射方法之一(大众点评字形与编码的对应关系)
  6. umi 解决找不到antd组件库中组件的路径问题 filePath not found of antd/es/float-button
  7. 奥巴马胜选演说·文言版
  8. 一次 minerd 肉鸡木马的排查思路
  9. Mathtype安装失败,卡在安装字体后闪退,不显示安装成功的解决
  10. Intel Chipset Software Installation Utility 9.1.1.1025