IP-S7-Link .Net Advanced Code Snippets

 Traeger Industry Components GmbH

© by TIS

Verwenden Sie einen der verschiedenen SPS-Geräteanbieter, indem Sie eine Instanz der entsprechenden Ableitungen der PlcDevice Klasse erstellen.

PlcDevice device = new SiemensDevice(new IPDeviceEndPoint("192.168.0.80"));

Nachdem eine Instanz von (z. B. ) der SiemensDevice Klasse erstellt wurde, verwenden Sie einfach die von der Klasse bereitgestellten Eigenschaften, um die entsprechenden Geräte-Metadaten einzurichten.

SiemensDevice device = new SiemensDevice(new IPDeviceEndPoint("192.168.0.80"));
 
device.Type = SiemensDeviceType.S71200;
device.ChannelType = SiemensChannelType.OperationPanel;

In den meisten Szenarien ist es schon genug, ein Gerät mit dem entsprechenden Gerätetyp im Konstruktor des Geräts zu erstellen, da der Default-Kanal meistens den gemeinsamen Anforderungen entspricht.

SiemensDevice device = new SiemensDevice(new IPDeviceEndPoint("192.168.0.80"), SiemensDeviceType.S71200);

Das Framework bietet die Möglichkeit, verschiedene Arten von end points durch die PlcDeviceEndPoint Klasse zu definieren. Die am häufigsten verwendete end point-Implementierung ist die IPDeviceEndPoint Klasse. Mit dieser Klasse können Sie die IP Adresse und optional die Rack und Slot Nummer der SPS angeben.

PlcDeviceEndPoint endPoint = new IPDeviceEndPoint("192.168.0.80");
 
// Alternatively also specify the rack.
PlcDeviceEndPoint endPointWithRack = new IPDeviceEndPoint("192.168.0.80", 0);
 
// Alternatively also specify the rack and slot.
PlcDeviceEndPoint endPointWithRackSlot = new IPDeviceEndPoint("192.168.0.80", 0, 2);

Mit Hilfe einer Ableitung der PlcDevice Klasse erstellen Sie einfach eine neue Verbindung, die mit dem dargestellten Gerät verknüpft ist. Das Erstellen einer Instanz mithilfe dieser Factory-Methode wird dann die vom Provider abhängige Implementierung der PlcDeviceConnection Klasse zurückgeben.

PlcDevice device = new SiemensDevice(new IPDeviceEndPoint("192.168.0.80"));
PlcDeviceConnection connection = device.CreateConnection();

Um den aktuellen Konnektivitätsstatus der Instanz PlcDeviceConnection Klasse abzurufen, verwenden Sie das State Property, um das entsprechende Element PlcDeviceConnectionState Enumeration Member zu erhalten.

if (connection.State == PlcDeviceConnectionState.Connected) {
    // ...
}

Um die Zustandsübergänge zu behandeln, verwenden Sie eine oder mehrere der Status spezifischen Events der Instanz PlcDeviceConnection Klasse.

connection.Connected += Program.HandleConnectionConnected;

Um das Ereignis zu behandeln, deklarieren Sie den übereinstimmenden Ereignishandler wie folgt:

private static void HandleConnectionConnected(object sender, EventArgs e)
{
    Console.WriteLine("Connection established!");
}

Um einen einzelnen Wert zu lesen, verwenden Sie eine der Read Methoden der PlcDeviceConnection Klasse.

int value = connection.ReadInt32("DB1.DBD 1");

Um ein Array von Werten zu lesen, verwenden Sie die zusätzlichen Leseüberladungen und übergeben die Anzahl der zu lesenden Elemente:

int[] values = connection.ReadInt32("DB1.DBD 1", 3);

Um einen einzelnen Wert mit einem Derivat der PlcValue<T> Klasse zu lesen, verwenden Sie eine der ReadValue Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32 value = new PlcInt32("DB1.DBD 1");
int valueData = connection.ReadValue(value);

Um ein Array von Werten unter Verwendung eines Derivats der PlcArray<T, TElement> Klasse zu lesen, verwenden Sie eine der ReadValue Überladungen wie folgt:

PlcInt32Array values = new PlcInt32Array("DB1.DBD 1", 3);
int[] values = connection.ReadValue(values);

Um mehrere Werte gleichzeitig mit Derivaten der PlcValue<T> Klasse zu lesen, verwenden Sie eine der ReadValues Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32 value1 = new PlcInt32("DB1.DBD 1");
PlcInt32 value2 = new PlcInt32("DB2.DBD 1");
PlcInt32 value3 = new PlcInt32("DB3.DBD 1");
 
int[] values = connection.ReadValues(value1, value2, value3);

Um mehrere Arrays von Werten gleichzeitig mit Derivaten der PlcArray<T, TElement> Klasse zu lesen, verwenden Sie eine der ReadValues Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32Array values1 = new PlcInt32Array("DB1.DBD 1", 3);
PlcInt32Array values2 = new PlcInt32Array("DB2.DBD 1", 4);
PlcInt32Array values3 = new PlcInt32Array("DB3.DBD 1", 5);
 
int[][] values = connection.ReadValues(values1, values2, values3);

Um mehrere Derivate der PlcValue<T> Klasse oder der PlcArray<T, TElement> Klasse verwenden, verwenden Sie eine der ReadValues Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32 value1 = new PlcInt32("DB1.DBD 1");
PlcInt32Array values2 = new PlcInt32Array("DB2.DBD 1", 4);
PlcBoolean value3 = new PlcBoolean("DB3.DBX 1.0");
PlcBooleanArray values4 = new PlcBooleanArray("DB4.DBX 1.0", 5);
PlcString value5 = new PlcString("DB5.DBB 1", 32);
 
object[] values = connection.ReadValues(value1, values2, value3, values4, value5);

Um eine benutzerdefinierte Ableitung der PlcObject Klasse zu lesen, verwenden Sie die Read<T> Methode wie folgt:

MachineData data = connection.Read<MachineData>();

Die MachineData-Klasse könnte wie folgt aussehen:

public class MachineData : PlcObject
{
    [PlcMember("DB1.DBX 100.0", Length = 7)]
    private bool[] toolConfigurations;
 
 
 
    public MachineData()
        : base()
    {
    }
 
 
 
    [PlcMember("DB1.DBB 120")]
    public DateTime EstimatedFinishDate { get; set; }
 
    [PlcMember("DB1.DBB 1", Length = 16)]
    public string JobNumber { get; set; }
 
    [PlcMember("DB1.DBD 100")]
    public int Speed { get; set; }
 
    [PlcMember("DB1.DBW 50")]
    public float Temperature { get; set; }
 
    [PlcMember("DB1.DBX 100.0")]
    public bool UseCuttingTool { get; set; }
 
 
 
    public bool IsToolConfigured(int toolIndex)
    {
        return this.toolConfigurations[toolIndex];
    }
}

Um einen einzelnen Wert zu schreiben, verwenden Sie einen der Write Methoden der PlcDeviceConnection Klasse.

connection.WriteInt32("DB1.DBD 1", 123);

Um ein Array von Werten zu schreiben, verwenden Sie eine der zusätzlichen Write Überladungen:

connection.WriteInt32("DB1.DBD 1", 123, 456, 789);

Um einen einzelnen Wert mit einem Derivat der PlcValue<T> Klasse zu schreiben, verwenden Sie eine der WriteValue Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32 value = new PlcInt32("DB1.DBD 1", 123);
connection.WriteValue(value);

Um ein Array von Werten mit einem Derivat der PlcArray<T, TElement> Klasse zu schreiben, verwenden Sie eine der WriteValue Überladungen wie folgt:

PlcInt32Array values = new PlcInt32Array("DB1.DBD 1", 123, 456, 789);
connection.WriteValue(values);

Um mehrere Werte gleichzeitig mit Derivaten der PlcValue<T> Klasse zu schreiben, verwenden Sie eine der WriteValues Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32 value1 = new PlcInt32("DB1.DBD 1", 123);
PlcInt32 value2 = new PlcInt32("DB2.DBD 1", 456);
PlcInt32 value3 = new PlcInt32("DB3.DBD 1", 789);
 
connection.WriteValues(value1, value2, value3);

Um mehrere Arrays von Werten gleichzeitig unter Verwendung von Derivaten der PlcArray<T, TElement> Klasse zu schreiben, verwenden Sie eine der WriteValues Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32Array values1 = new PlcInt32Array("DB1.DBD 1", 1, 2, 3);
PlcInt32Array values2 = new PlcInt32Array("DB2.DBD 1", 4, 5, 6);
PlcInt32Array values3 = new PlcInt32Array("DB3.DBD 1", 7, 8, 9);
 
connection.WriteValues(values1, values2, values3);

Um mehrere Derivate der PlcValue<T> Klasse oder der PlcArray<T, TElement> Klasse zu schreiben, verwenden Sie eine der WriteValues Überladungen der PlcDeviceConnection Klasse wie folgt.

PlcInt32 value1 = new PlcInt32("DB1.DBD 1", 123);
PlcInt32Array values2 = new PlcInt32Array("DB2.DBD 1", 4, 5, 6);
PlcBoolean value3 = new PlcBoolean("DB3.DBX 1.0", true);
PlcBooleanArray values4 = new PlcBooleanArray("DB4.DBX 1.0", true, false, true, false, true);
PlcString value5 = new PlcString("DB5.DBB 1", "This is my string value.");
 
connection.WriteValues(value1, values2, value3, values4, value5);

Um eine benutzerdefinierte Ableitung der PlcObject Klasse zu sschreiben, verwenden Sie die Methode Write<T> wie folgt:

MillJob job = new MillJob("MJ:100012");
job.Input = 1;
job.RotationSpeed = 3500;
job.ToolDiameter = 12.8;
job.Output = 3;
 
connection.Write(job);

Die MillJob-Klasse könnte wie folgt aussehen:

public class MillJob : PlcObject
{
    public MillJob(string number)
        : base()
    {
        this.Number = number;
    }
 
 
 
    [PlcMember("DB1.DBD 20")]
    public int Input { get; set; }
 
    [PlcMember("DB1.DBB 1")]
    public string Number { get; private set; }
 
    [PlcMember("DB1.DBD 25")]
    public int Output { get; set; }
 
    [PlcMember("DB1.DBD 30")]
    public int RotationSpeed { get; set; }
 
    [PlcMember("DB1.DBW 40")]
    public float ToolDiameter { get; set; }
}