编辑
2025-11-29
C#
00

目录

一、Sharp7简介
二、环境搭建
1. 安装Sharp7
三、与PLC建立连接
1. 创建S7Client实例
2. 连接到PLC
四、读取PLC数据
1. 读取字节数据
2. 转换数据类型
五、写入PLC数据
M点写入
六、结论

Sharp7是一个基于C#的开源库,用于与西门子S7系列PLC进行通讯。本文将详细介绍如何使用Sharp7库,实现对PLC的数据读写操作,并提供多个完整的示例代码,帮助您快速上手。

一、Sharp7简介

Sharp7是由Daniel Molteni开发的用于.NET平台的西门子S7通讯库。它实现了S7协议的功能,支持读取和写入PLC中的数据块、输入输出、标志位等。该库轻量、易用,非常适合需要与西门子PLC进行通讯的C#开发者。

二、环境搭建

1. 安装Sharp7

您可以通过以下方式获取Sharp7库:

  • 从GitHub仓库下载源代码并编译。
HTML
https://github.com/fbarresi/Sharp7
  • 使用NuGet包管理器安装(如果有提供的话)。

image.png

三、与PLC建立连接

在与PLC进行数据交互之前,首先需要建立连接。

1. 创建S7Client实例

C#
// 创建S7Client实例 S7Client client = new S7Client();

2. 连接到PLC

C#
static void Main(string[] args) { S7Client client = new S7Client(); string ip = "127.0.0.1"; int rack = 0; // 机架号,一般为0 int slot = 0; // 槽号,对于S7-1200/1500通常为0,S7-300/400通常为2 // 连接到PLC client.PLCPort = 108; // 端口号,一般为102 int result = client.ConnectTo(ip, rack, slot); if (result == 0) { Console.WriteLine("连接成功!"); } else { Console.WriteLine($"连接失败,错误代码:{result}"); } }

image.png

四、读取PLC数据

1. 读取字节数据

假设我们需要从DB1的数据块中读取10个字节的数据:

C#
byte[] buffer = new byte[10]; int dbNumber = 1; // 数据块编号 int start = 0; // 起始地址 int size = 10; // 读取长度 int result = client.DBRead(dbNumber, start, size, buffer); if (result == 0) { Console.WriteLine("数据读取成功!"); } else { Console.WriteLine($"数据读取失败,错误代码:{result}"); }

2. 转换数据类型

读取的字节数据可以转换为对应的数据类型:

C#
// 假设buffer中存储了一个Int32和一个Real(Float) int intValue = S7.GetIntAt(buffer, 0); float floatValue = S7.GetRealAt(buffer, 4); Console.WriteLine($"整数值:{intValue}"); Console.WriteLine($"浮点值:{floatValue}");

五、写入PLC数据

将数据写入PLC的数据块中:

C#
byte[] buffer = new byte[6]; // 设置要写入的数据 S7.SetIntAt(buffer, 0, 1234); // 写入Int32 S7.SetRealAt(buffer, 2, 56.78f); // 写入Real(Float) int dbNumber = 1; // 数据块编号 int start = 0; // 起始地址 int size = 6; // 写入长度 int result = client.DBWrite(dbNumber, start, size, buffer); if (result == 0) { Console.WriteLine("数据写入成功!"); } else { Console.WriteLine($"数据写入失败,错误代码:{result}"); }

M点写入

C#
byte[] buffer = new byte[2]; // 设置要写入的数据 S7.SetBitAt(buffer, 0, 0, true); // 写入Int32 S7.SetBitAt(buffer, 0, 1, true); // 写入Int32 int start = 0; // 起始地址 int size = 2; // 写入长度 client.MBWrite(start, size, buffer);

六、结论

通过Sharp7库,C#开发者可以方便地与西门子S7系列PLC进行通讯。本文详细介绍了如何建立连接、读取和写入PLC数据,并提供了完整的示例代码。希望这些内容能帮助您更好地理解和应用Sharp7库。

如果您有更多的需求,例如读取输入输出、监控PLC状态等,建议进一步查阅Sharp7的官方文档或源代码,以获取更全面的支持。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!