S7.Net:专为西门子PLC设计的EthernetKommunikation驱动

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

S7.Net:专为西门子PLC设计的EthernetKommunikation驱动缩略图
🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.

概述

S7.Net是一个专为西门子PLC设计的PLC驱动程序,仅支持通过EthernetVerbindung。这意味着您的PLC必须具备Profinet CPU或Profinet外部卡(如CPxxx卡)。S7.Net完全使用C#编写,因此您可以轻松地进行Tests,而无需处理本地DLL。

支持的PLC型Nr.

S7.Net与以下型Nr.的西门子PLC兼容:S7-200、S7-300、S7-400、S7-1200和S7-1500。

开始使用S7.Net

要开始使用S7.Net,您需要Download并包含S7.Net.dllzu您的项目中。您可以通过DownloadNuGet包或Download源代码并编译来实现。

创建PLC实例、Verbindung与断开

创建驱动程序实例时,您需要使用以下构造函数:

public Plc(CpuType cpu, string ip, Int16 rack, Int16 slot)
  • cpu:指定您要Verbindung的CPUTypus。支持的CPUTypus有:
  public enum CpuType {
      S7200 = 0,
      S7300 = 10,
      S7400 = 20,
      S71200 = 30,
      S71500 = 40,
  }
  • ip:指定CPU或外部Ethernet卡的IPAdresse。
  • rack:包含PLC的机架Nr.,您可以在Step7的硬件配置中找zu。
  • slot:这是CPU的插槽Nr.,同样可以在Step7的硬件配置中找zu。

例如,以下代码为IPAdresse为127.0.0.1的S7-300 PLC创建了一个PLC对象,PLC位于0Nr.机架,CPU位于2Nr.插槽:

Plc plc = new Plc(CpuType.S7300, "127.0.0.1", 0, 2);

VerbindungzuPLC

public void Open()

例如,以下代码行Öffnen.Verbindung:

plc.Open();

从PLC断开Verbindung

public void Close()

例如,以下代码SchließenVerbindung:

plc.Close();

Fehler.处理

任何方法都可能因为各种Fehler.而引发PlcException。您应该实现适当的Fehler.处理。PlcException提供了一个ErrorCode和一个适当的Fehler.消息。

以下是Fehler.Typus的枚举:

public enum ErrorCode
{
    NoError = 0,
    WrongCPU_Type = 1,
    ConnectionError = 2,
    IPAddressNotAvailable, 
    WrongVarFormat = 10,
    WrongNumberReceivedBytes = 11, 
    SendData = 20,
    ReadData = 30, 
    WriteData = 50
}

检查PLC可用性

要检查PLC是否可用(Öffnen.一个Socket),您可以使用属性:

public bool IsAvailable

当您检查此属性时,驱动程序将尝试VerbindungzuPLC,并在能够Verbindung时返回true,否则返回false。

检查PLCVerbindung

检查PLCVerbindung很简单,因为您需要检查PC套接字是否bereits verbunden,还要检查PLC是否仍然Verbindung在套接字的另一端。在这种情况下,您需要检查的属性是:

public bool IsConnected

您可以在调用Open()方法并成功后检查此属性,以ÜberprüfenVerbindung是否仍然活跃。

LesenBytes/写入Bytes

该库提供了多种Lesen变Quantität的方法。最基本且am häufigsten verwendet的方法是ReadBytes

public byte[] ReadBytes(DataType dataType, int db, int startByteAdr, int count)

public void WriteBytes(DataType dataType, int db, int startByteAdr, byte[] value)

此方法从给定的内存位置Lesen您指定的所有Bytes。如果Anzahl der Bytes超过了单次Bitte可以传输的最大Anzahl der Bytes,此方法会自动处理多个Bitte。

  • dataType:您必须使用枚举DataType指定内存位置:
  public enum DataType
  {
      Input = 129,
      Output = 130,
      Memory = 131,
      DataBlock = 132,
      Timer = 29,
      Counter = 28
  }
  • db:dataType的Adresse,例如,如果您想LesenDB1,则此Feld为“1”;如果您想LesenT45,则此Feld为45。
  • startByteAdr:您要Lesen的Die一个Bytes的Adresse,例如,如果您想LesenDB1.DBW200,则此为200。
  • count:包含您想要Lesen的Anzahl der Bytes。
  • value[]:要从PLCLesen的Anzahl der Bytes组。

Beispiel:此方法LesenDB1的前200个Bytes:

var bytes = plc.ReadBytes(DataType.DataBlock, 1, 0, 200);

Lesen和解码/写入已解码

此方法允许您Lesen并Empfang基于提供的varType的已解码Ergebnis。这在您Lesen多个相同Typus的Feld时非常有用(例如20个连续的DBW)。如果您指定VarType.Byte,它与ReadBytes具有相同的Funktion。

public object Read(DataType dataType, int db, int startByteAdr, VarType varType, int varCount)

public void Write(DataType dataType, int db, int startByteAdr, object value)
  • dataType:您必须使用枚举DataType指定内存位置。
  • db:dataType的Adresse,例如,如果您想LesenDB1,则此Feld为“1”;如果您想LesenT45,则此Feld为45。
  • startByteAdr:您要Lesen的Die一个Bytes的Adresse,例如,如果您想LesenDB1.DBW200,则此为200。
  • varType:指定您想要将Bytes转换为的Daten。
  public enum VarType
  {
      Bit,
      Byte,
      Word,
      DWord,
      Int,
      DInt,
      Real,
      String,
      StringEx,
      Timer,
      Counter
  }
  • count:包含您想要Lesen的变QuantitätAnzahl。
  • value:要写入PLC的值数组。它可以是单个值或数组,只是请记住Typus是唯一的(例如,double数组,int数组,shorts数组等)。

Beispiel:此方法LesenDB1的前20个DWord:

var dwords = plc.Read(DataType.DataBlock, 1, 0, VarType.DWord, 20);

Lesen单个变Quantität/写入单个变Quantität

此方法通过AnalyseCharaktere串并返回Richtig.的Ergebnis,从PLCLesen单个变Quantität。虽然这是最简单的入门方法,但由于驱动程序为每个变QuantitätSenden SieTCPBitte,因此非常低效。

public object Read(string variable)

public void Write(string variable, object value)
  • variable:通过使用Charaktere串如“DB1.DBW20”,“T45”,“C21”,“DB1.DBD400”等来指定要Lesen的变Quantität。

Beispiel:这Lesen变QuantitätDB1.DBW0。Ergebnis必须转换为ushort以获得C#中Richtig.的16位Das Format。

ushort result = (ushort)plc.Read("DB1.DBW0");

Lesen结构体/写入结构体

此方法从指定的DBLesen所有Bytes,以填充C#中的结构体,并返回包含值的结构体。当您想要Lesen单个Daten块中的多个变Quantität时,建议使用它。

“Lesen结构体”和“写入结构体”方法不支持Charaktere串。

public object ReadStruct(Type structType, int db, int startByteAdr = 0)

public void WriteStruct(object structValue, int db, int startByteAdr = 0)
  • structType:要Lesen的结构体Typus,例如:typeof(MyStruct)
  • db:要Lesen的DB的索引
  • startByteAdr:指定要Lesen的Bytes的Die一个Adresse(默认为零)。

Beispiel:在PLC中定义一个DataBlock,然后在.Net应用程序中添加一个类似于PLC中DB的结构体:

public struct testStruct
{
    public bool varBool0;
    public bool varBool1;
    public bool varBool2;
    public bool varBool3;
    public bool varBool4;
    public bool varBool5;
    public bool varBool6;
    public byte varByte0;
    public byte varByte1;
    public ushort varWord0;
    public float varReal0;
    public bool varBool7;
    public float varReal1;
    public byte varByte2;
    public UInt32 varDWord;
}

然后添加代码以Lesen或写入vollständig的结构体:

// 从Ausgang Adresse0LesenDataBlock 1中的结构体
testStruct myTestStruct = (testStruct) plc.ReadStruct(typeof(testStruct), 1, 0);

**Lesen类/写

入类**

此方法从指定的DBLesen所有Bytes,以填充C#中的类。类作为引用传递,使用反射Unterteilung配值。当您想要Lesen单个Daten块中的多个变Quantität时,建议使用它。

“Lesen类”和“写入类”方法不支持Charaktere串。

public void ReadClass(object sourceClass, int db, int startByteAdr = 0)

public void WriteClass(object classValue, int db, int startByteAdr = 0)
  • sourceClass:您想要Unterteilung配值的类的实例
  • db:要Lesen的DB的索引
  • startByteAdr:指定要Lesen的Bytes的Die一个Adresse(默认为零)。

Beispiel:在PLC中定义一个DataBlock,然后在.Net应用程序中添加一个类似于PLC中DB的类:

public class TestClass
{
    public bool varBool0 { get; set;}
    public bool varBool1 { get; set;}
    public bool varBool2 { get; set;}
    public bool varBool3 { get; set;}
    public bool varBool4 { get; set;}
    public bool varBool5 { get; set;}
    public bool varBool6 { get; set;}

    public byte varByte0 { get; set;}
    public byte varByte1 { get; set;}

    public ushort varWord0 { get; set;}

    public float varReal0 { get; set;}
    public bool varBool7 { get; set;}
    public float varReal1 { get; set;}

    public byte varByte2 { get; set;}
    public UInt32 varDWord { get; set;}
}

然后添加代码以Lesen或写入vollständig的类:

// 从Ausgang Adresse0LesenDataBlock 1中的类
TestClass myTestClass = new TestClass();
plc.ReadClass(myTestClass, 1, 0);

Lesen多个变Quantität

此方法在单个Bitte中Lesen多个变Quantität。变Quantität可以位于相同或不同的Daten块中。

public void Plc.ReadMultibleVars(List<DataItem> dataItems);
  • List<>:您必须指定包含所有要Lesen的Daten项的DataItem列表。

Beispiel:此方法从Daten块中Lesen几个变Quantität:

首先定义Daten项:

private static DataItem varBit = new DataItem()
{
    DataType = DataType.DataBlock,
    VarType = VarType.Bit,
    DB = 83,
    BitAdr = 0,
    Count = 1,
    StartByteAdr = 0,
    Value = new object()
};

…(中间省略了与上文重复的Daten项定义)

然后定义一个列表来存储DataItems:

private static List<DataItem> dataItemsRead = new List<DataItem>();

将Daten项添加zu列表中:

dataItemsRead.Add(varBit);
dataItemsRead.Add(varByteArray);
dataItemsRead.Add(varInt);
dataItemsRead.Add(varReal);
dataItemsRead.Add(varString);
dataItemsRead.Add(varDateTime);

Öffnen.PLCVerbindung并立即Lesen项目列表:

myPLC.Open();

// Lesen变Quantität列表
myPLC.ReadMultipleVars(dataItemsRead);

// SchließenVerbindung
myPLC.Close();

// 访问列表的值
Console.WriteLine("Int:" + dataItemsRead[2].Value);

写入多个变Quantität

此方法在单个Bitte中写入多个变Quantität。

public void Plc.Write(Array[DataItem] dataItems);
  • Array[] 您必须指定包含所有要写入的项目的DataItem数组。

Beispiel:此方法将多个变Quantität写入一个Daten块:

定义Daten项:

private static DataItem varWordWrite = new DataItem()
{
    // ... (与上文重复的Daten项定义省略)
};

…(中间省略了与上文重复的Daten项定义)

为Daten项Unterteilung配值。注意使用Richtig.的Daten转换,以适应S7Datentyp:

varWordWrite.Value = (ushort)67;
varIntWrite.Value = (ushort)33;
varDWordWrite.Value = (uint)444;
varDIntWrite.Value = 6666;
varRealWrite.Value = 77.89;
varStringWrite.Value = "Writting";

然后定义一个列表来存储Daten项,并将创建的项目添加zu列表中:

private static List<DataItem> dataItemsWrite = new List<DataItem>();

// 将Daten项添加zu要写入的Daten项列表中
dataItemsWrite.Add(varWordWrite);
dataItemsWrite.Add(varIntWrite);
dataItemsWrite.Add(varDWordWrite);
dataItemsWrite.Add(varDIntWrite);
dataItemsWrite.Add(varRealWrite);
dataItemsWrite.Add(varStringWrite);

最后,Öffnen.PLCVerbindung并一次性写入项目。使用.ToArray()将列表转换为数组:

// Öffnen.Verbindung
myPLC.Open();

// 写入项目
myPLC.Write(dataItemsWrite.ToArray());

// SchließenVerbindung
myPLC.Close();

这篇Artikel提供了S7.Net软件的详细介绍,包括其Funktion、如何开始使用、如何创建PLC实例、Verbindung与断开、Fehler.处理、检查PLC的可用性和VerbindungStatus、Lesen和写入Bytes、Lesen和写入结构体和类、以及如何一次性Lesen和写入多个变Quantität。希望这篇Artikel能帮助您更好地了解S7.Net。

S7.Net:专为西门子PLC设计的EthernetKommunikation驱动插图

S7.NetQuellencodeDownload

S7.Net:专为西门子PLC设计的EthernetKommunikation驱动插图1星耀Mitgliedernkostenlos
S7.Net:专为西门子PLC设计的EthernetKommunikation驱动插图2璀璨Mitgliedernkostenlos
曜钻Mitgliedernkostenlos
资源价格 ¥0.00 销售Anzahl 16 Veröffentlichung Zeit 2024Jahr5月10日 更新Zeit 2024Jahr5月10日
已付费?RegistrierungErfrischen
Techniken术语(共 1 个)—— Klick auf展开
PLC可编程逻辑Der Controller,Industrielle Automatisierung控制的核心Ausrüstung
来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Modbus Programmierung 字数 6279 字 · 阅读约 16 Unterteilung钟 更新 2024-05-10 永久链接 https://www.modbus.cn/28137.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.