C#, Libnodave : Variabilität von ReadBits, etc erhöhen

Keb

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wieder ein "Hallöchen" an alle!

Mein "Problem" ich bin am erstellen eines "Diagnosetools" in C# zum lesen und schreiben verschiedener Bereiche einer SPS.

Ich erstelle das mit Hilfe der LibNoDave Bibliothek.

Nun möchte ich aber, um meinen Code so gering und übersichtlich wie möglich zu halten, den Aufruf der Read/Write Befehle variabel gestalten, weiß aber nicht, wie ich das in C# implementieren kann.
(Ich arbeite erst seit ein paar Tagen mit C#:sad:)

Das ganze sieht im Moment so aus:
Code:
 private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            tbReadBit.Text = string.Empty;
            byte[] buffer = new byte[1];
            int res = dc.readBits(libnodave.daveDB, (int)nDBBit.Value, ByteBitToBit((int)nByteBit.Value, (int)nBitBit.Value), 1, buffer);
            if (res != 0)
                throw new Exception("unable to read");
            tbReadBit.Text = buffer[0].ToString();
        }
        catch (Exception ex)
        {
            cbBit.Checked = false;
            MsgBox(ex);
        }
    }

Und ich möchte so was in die Richtung haben(der nächste Code funktioniert(natürlich)nicht):
Code:
private void button1_Click(object sender, EventArgs e)
    {
        string TempStr = "dave.DB";
//        string TempStr = "dave.Flags";
//        string TempStr = "dave.Input";
//        string TempStr = "dave.Output";
        try
        {
            tbReadBit.Text = string.Empty;
            byte[] buffer = new byte[1];
            int res = dc.readBits(libnodave.TempStr, (int)nDBBit.Value, ByteBitToBit((int)nByteBit.Value, (int)nBitBit.Value), 1, buffer);
            if (res != 0)
                throw new Exception("unable to read");
            tbReadBit.Text = buffer[0].ToString();
        }
        catch (Exception ex)
        {
            cbBit.Checked = false;
            MsgBox(ex);
        }
    }

Geht sowas in die Art überhaupt? Wenn ja wie lässt sich das implementieren?
Wenn nein, was für Möglichkeiten hätte ich denn noch?

Ich danke euch schon jetzt für Eure Mühe :D
 
les dich in klassen und methoden ein ... galileo computing hat geballtes wissen rund um C# zum kostenfreien nachlesen ins netz gestellt
 
Entschuldigt für die späte Antwort, hatte kein Internet.

Ich danke euch für die nützlichen Hinweise.

Grüße
 
Guten Morgen!
Ich hätte noch eine geht/geht nicht Frage zu den Methoden.

Ich rufe in einer Methode eine andere auf und die gibt einen String zurück. Nun möchte ich, dass die Funktion außer dem Wert auch noch zurückgibt, ob die Funktion mit Fehler beendet wurde. Ich würde die betreffende Methode nun so umschreiben, dass ich ein String-Array zurück bekomme. Und in [0] des Arrays steht dann, ob ein Fehler aufgetreten ist.

Nun zu der Frage:
Gibt es denn auch eine andere Möglichkeit, wie zum Beispiel das was ich unten dargestellt habe? Dass ich der Funktion eine boolsche Variable mitgebe, die ich in der Funktion ändere und nach der Funktion dann prüfe(ohne Globale Variablen zu verwenden)?
Code:
    private void btReadInput_Click(object sender, EventArgs e)
    {
        bool Fehler = false;
        tbReadInput.Text = string.Empty;
        tbReadInput.Text = leseBits(libnodave.daveInputs, 0, (int)nByteInput.Value, (int)nBitInput.Value, Fehler);
        if (Fehler) // Prüfen ob Funktion aufgrund eines Fehlers beendet wurde.
        {
            // mach etwas
        }
    } // btReadInput_Click

private string leseBits(int libBereich, int libDatenBaustein, int libByte, int libBit, bool Fehler)
    {
        try
        {
            byte[] buffer = new byte[1];
            int res = dc.readBits(libBereich, libDatenBaustein, ByteBitToBit(libByte, libBit), 1, buffer);
            if (res != 0)
                throw new Exception("unable to read");
            Fehler = false;
            return buffer[0].ToString();
        }
        catch (Exception ex)

        {
            MsgBox(ex);
            Fehler= true;
            return null;
        }
    }

Sozusagen nicht nur In-Variablen sondern In-Out-Variablen habe.
In anderen Sprechen scheint es das zu geben. Wie sieht es mit C# aus? Im openbook.gallileo habe ich bei den Methode nichts vergleichbares gesehen.

Mit freundlichsten Grüßen
Keb
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
es gibt in diesem Segment so ziemlich alles, was man sich vorstellen kann - es ist manchmal nur ein wenig mühsam das "wie" herauszufinden.
In deinem Fall ist der mir bekannte Weg der, dass deine Methode einen Boolean zurückgibt, der TRUE wäre wenn alles OK ist und FALSE werden würde wenn es einen Fehler gab. Deine Variable würdest du ByRef übergeben und damit die ursprüngliche Variable verändern.
Wenn du allerdings in deiner Methode schon eine Exception wirfst dann kannst du auch diese außerhalb der Methode auswerten.
Ganz gut generell für das Erstellen eigener Methoden ist es, zu schauen, wie andere ähnliche, nicht von dir erstellte Methoden, so etwas machen.
Das ist am Anfang viel "Suchen im Internet".

Gruß
Larry
 
Hallo Larry,
ich danke dir für deine schnelle Antwort und werde meine Suche anhand deines Posts etwas genauer fortsetzen können.


Edit:
ByRef ist genau das was ich brauche, ich danke dir vielmals Larry :D


Grüße
Keb
 
Zuletzt bearbeitet:
Zurück
Oben