C# Snap7 实现对西门子PLC的读写(本篇主要对系统诊断缓存区(SSL或SZL)内容进行读取)
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)内容进行读取)相关推荐
- 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信
如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻. Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广.但也许是因为资料比较少,而且很多 ...
- JavaScript对西门子PLC进行读写通讯控制中的问题和修复
之前在文章<JavaScript如何对欧姆龙.三菱.施耐德等PLC进行读写通讯控制>有介绍,如何通过 LECPServer + Javascript 对欧姆龙,三菱,施耐德等PLC进行通讯 ...
- Springboot使用s7connector 实现对西门子PLC数据读写
工具类: package com.zg.myssm.utils;import com.github.s7connector.api.DaveArea; import com.github.s7conn ...
- 运用C#编程通过OPC方式实现PC机与西门子PLC通讯-同步通讯篇
1. OPC服务介绍 西门子提供的最新软件:Simatic Net PC-Software CD 2005为各种组态软件的开发提供了一个统一的平台,它建立的PC站既为一些组态软件,如:WinCC.Pr ...
- 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的( ...
- 用python编写西门子plc程序_snap7读写西门子plc1200步骤(python)
本文是利用snap7进行对plc1200进行读写,所用语言是python3,windows7下,plc具体型号为S7-1212DC/DC/DC 1.snap7安装 win+R打开运行串口,输入cmd, ...
- jetson nano上编译与使用西门子PLC通讯库snap7
文章目录 一.西门子snap7介绍 二.西门子S7通讯介绍 三.jetson nano编译snap7库 四.Qt Cmake导入snap7库 五.snap7主要函数说明 1.与PLC建立连接 2.读写 ...
- 如何使用 Python 构建 西门子PLC Snap7通信
如何使用 Python 构建西门子 PLC Snap7通信 PLC(Programmable Logic Controller)即可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制领域中, ...
- s7 200 java_java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...
最新文章
- HashMap解决hash冲突的方法
- java和python哪个好就业2020-Java和Python哪个发展前景好?老男孩教育
- fiddler和xampp安装成功后,网站打不开的原因
- CUDA学习(五十一)
- 甜甜的爱情+美食完美情人节海报,PSD分层模板轻松搞定设计,拿去用!
- 自动驾驶汽车也能聊天?
- python编程入门第3版pdf-Python编程入门(第3版) PDF扫描版[26MB]
- mysql批量插入之提高插入效率
- SPSS统计分析行业应用实战--SPSS 24.0新增
- Fedora14 root用户登陆
- 记某单机游戏的一次内购破解
- c语言反步法编程,CCM模式下Boost电路的反步法非线性控制与仿真.pdf
- 非线性优化问题---MATLAB
- android短视频列表自动播放,手把手教你实现视频列表滚动自动播放-短视频列表滚动播放实战...
- 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
- 因果,稳定,无源,无损系统(1)
- 最详细的maven教程
- apache 问题 You don't have permission to access /test.php on this server 解决方法
- arduino超声波测距接线图详细_arduino——超声波测距仪(笔记)
- 基于业务流程的信息化建设与应用
热门文章
- Linux超能力BPF技术介绍及学习分享
- uva 109 SCUD Busters
- UVa 109 - SCUD Busters(凸包计算)
- 在ubuntu上绑定USB接口的两种方式
- python-爬虫-woff静态字体-映射方法之一(大众点评字形与编码的对应关系)
- umi 解决找不到antd组件库中组件的路径问题 filePath not found of antd/es/float-button
- 奥巴马胜选演说·文言版
- 一次 minerd 肉鸡木马的排查思路
- Mathtype安装失败,卡在安装字体后闪退,不显示安装成功的解决
- Intel Chipset Software Installation Utility 9.1.1.1025