Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Fragen zur Schnittstelle Sharp7 (C# - S7)
Tommylik
myCSharp.de - Member



Dabei seit:
Beiträge: 51
Herkunft: Löwenstadt

Themenstarter:

Fragen zur Schnittstelle Sharp7 (C# - S7)

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4093

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 634

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Alf Ator am .
private Nachricht | Beiträge des Benutzers
ClaraSoft
myCSharp.de - Member



Dabei seit:
Beiträge: 35

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 453
Herkunft: Untermeitingen

beantworten | zitieren | melden

Zitat von ClaraSoft
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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am .
private Nachricht | Beiträge des Benutzers