Laden...

Fragen zur Schnittstelle Sharp7 (C# - S7)

Erstellt von Tommylik vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.288 Views
T
Tommylik Themenstarter:in
51 Beiträge seit 2019
vor 2 Jahren
Fragen zur Schnittstelle Sharp7 (C# - S7)

Guten Abend Community,

Ich habe folgendes im I-Net gefunden.
Sharp7 Manual
Demoprojekte

Mit dieser Anleitung konnte ich mich erfolgreich über einer Winforms mit einer S7 verbinden.
Meine MainForm habe ich mit angehängt.

Es gibt 2 Sache die ich einfach nicht kapiere. Kann mir einer von Euch das bitte erklären.
Warum steht ComponentResult (in grüner Schrift) zwischen Private und LeakResult() und was bedeutet das?
Meistens steht da private void oder bool oder int ... aber in blauer Schrift.

Warum wird in der Methode gleich eine neue Instanz von ComponentResult erstellt?


private ComponentResult LeakResult()
        {
            ComponentResult result = new ComponentResult();
			
            // Reads the buffer.
            int dbNumber = short.Parse(txtDBNr.Text);
            int offset = short.Parse(txtDBOffsetNr.Text);
            int laenge = short.Parse(txtDBSizeNr.Text);

            byte[] buffer = new byte[laenge];

            client.DBRead(dbNumber, offset, laenge, buffer);

            return result;
        }

Ich würde gerne die GUI mit den Textboxen von den SPS Koponenten trennen
und alles was zwischen #region SPS Methoden #endregion steht in eine Klasse auslagern.
Geht das mit diesem Code und lohnst sich der Aufwand überhaupt.?

Grüße Tommylik

4.939 Beiträge seit 2008
vor 2 Jahren

Hallo,

das sind aber Grundlagen der OOP! ComponentResult ist der Rückgabetyp der Methode (und wird - bei deiner VS-Einstellung - in grün angezeigt, weil es eine eigene Klasse oder Struktur ist, im Gegensatz zu den Standardtypen void, bool, int, ...).

Warum dort aber dieser Rückgabetyp verwendet wird, welche innerhalb der Methode nicht weiter benutzt wird (außer daß dessen Standardkonstruktor aufgerufen wird), kann ich dir auch nicht sagen (evtl. haben einfach alle SPS-Methoden diesen einheitlichen Rückgabetyp?).

Diese Methoden (sowie die zugehörigen Klassenmember wie z.B. client) solltest du aber recht einfach in eine eigene Klasse auslagern können. Bedenke aber, daß du dann alle Zugriffe auf die GUI-Komponenten (wie z.B. die Textbox-Texte) dann als Parameter übergeben mußt.

A
764 Beiträge seit 2007
vor 2 Jahren

Hallo Tommylik

Ich vermute, dass result noch gefüllt werden kann, z.b. ob die DBRead-Operation erfolgreich war.

[Edit]
Ich habe jetzt doch mal nachgeschaut, in der von dir verlinkten Seite kann man ein Beispiel dazu finden:


private ComponentResult LeakResult()
{
    ComponentResult Result = new ComponentResult();
    byte[] Buffer = new byte[26];
    // Reads the buffer.
    Client.DBRead(100, 0, 26, Buffer);
    // Extracts the fields and inserts them into the struct
    Result.SerialNumber = S7.GetCharsAt(Buffer, 0, 12);
    Result.TestResult = S7.GetIntAt(Buffer, 12);
    Result.LeakDetected = S7.GetRealAt(Buffer, 14);
    Result.TestDateTime = S7.GetDateTimeAt(Buffer, 18);
    return Result;
}

Gruß
Alf

C
55 Beiträge seit 2020
vor 2 Jahren

Hallo,

Wenn etwas grün angezeigt wird, heißt das die Variable niemals verwendet wird. Auch ist diese Variable immer etwas ausgegraut. Wenn man mit der Maus darüber fährt wird das auch entsprechend im Popup angezeigt. Siehe Bild im Anhang.

Die Lösung wäre es die Variable zu verwenden wie es Alf vorgeschlagen hat, dann wird sie auch nicht mehr grün angezeigt.

Grüße

463 Beiträge seit 2009
vor 2 Jahren

Die Lösung wäre es die Variable zu verwenden wie es Alf vorgeschlagen hat, dann wird sie auch nicht mehr grün angezeigt.

Das ist so nicht ganz richtig - die Rückgabe der Variable reicht aus, damit diese nicht als unbenutzt gilt... Eine zusätzliche Verwendung innerhalb der Methode ist nicht notwewndig.