Sharp7是一个基于C#的开源库,用于与西门子S7系列PLC进行通讯。本文将详细介绍如何使用Sharp7库,实现对PLC的数据读写操作,并提供多个完整的示例代码,帮助您快速上手。
Sharp7是由Daniel Molteni开发的用于.NET平台的西门子S7通讯库。它实现了S7协议的功能,支持读取和写入PLC中的数据块、输入输出、标志位等。该库轻量、易用,非常适合需要与西门子PLC进行通讯的C#开发者。
您可以通过以下方式获取Sharp7库:
HTMLhttps://github.com/fbarresi/Sharp7

在与PLC进行数据交互之前,首先需要建立连接。
C#// 创建S7Client实例
S7Client client = new S7Client();
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}");
}
}

假设我们需要从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}");
}
读取的字节数据可以转换为对应的数据类型:
C#// 假设buffer中存储了一个Int32和一个Real(Float)
int intValue = S7.GetIntAt(buffer, 0);
float floatValue = S7.GetRealAt(buffer, 4);
Console.WriteLine($"整数值:{intValue}");
Console.WriteLine($"浮点值:{floatValue}");
将数据写入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}");
}
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 许可协议。转载请注明出处!