Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: LibNoDave C# Wort/Doppelwort schreiben

  1. #1
    Registriert seit
    02.09.2014
    Beiträge
    15
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Einen wunder schönen Nachmittag wünsche ich euch.

    Ich beschäftige mich seit ein paar Tagen mit C# und LibNoDave. Beides ist noch Neuland für mich.
    Durch viel lesen und suchen habe ich schon einiges geschafft (Bits/Bytes/Merker/E/A; lesen/schreiben).

    Nun komme ich nicht mehr weiter.

    Ich möchte nun ein Wort bzw ein Doppelwort eines DB's lesen und beschreiben. Das lesen funktioniert, nur mit dem schreiben hab ich keine Idee wie ich das machen könnte.

    Hier den bisherigen Code:
    Code:
        // WORT lesen    
    private void btReadWord_Click(object sender, EventArgs e)
        {
            try
            {
                tbReadWord.Text = string.Empty;
                dc.readBytes(libnodave.daveDB, (int)nDBWord.Value, (int)nByteWord.Value, 2,null);
                int res = dc.getS16();   
                tbReadWord.Text = res.ToString();
            }
            catch (Exception ex)
            {
                MsgBox(ex);
            }
        }
        // WORT schreiben *IN ARBEIT*
        private void btWriteWord_Click(object sender, EventArgs e)
        {
            try
            {
                int res = dc.writeBytes(libnodave.daveOutputs, (int)nDBWord.Value, (int)nByteWord.Value, 2, new byte[] { (byte)nWriteWord.Value }); // Ist noch nicht angepasst!!
                if (res != 0)
                    throw new Exception("unable to write");
            }
            catch (Exception ex)
            {
                MsgBox(ex);
            }
        }
    Mir fällt nichts ein, wie ich die Funktion zum schreiben von Bytes abändern muss, um ein Wort schreiben zu können.

    Ich hoffe ich habe mein Problem gut genug erläutert und freue mich auf jeglichen Hinweis der zum Ziel führt.

    Danke schon jetzt für jede Hilfestellung.

    PS: Falls ihr eine Dokumentation zu LibNoDave C# habt wäre das auch super ich konnte bisher noch keine entdecken.
    Zitieren Zitieren LibNoDave C# Wort/Doppelwort schreiben  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Kannst dir mal meine Bibliothek ansehen: https://github.com/jogibear9988/DotN...ToolBoxLibrary Ist ein high level wrapper um libnodave (ok bietet noch ein bischen mehr, aber damit hats mal angefangen...)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. Folgende 2 Benutzer sagen Danke zu Jochen Kühner für den nützlichen Beitrag:

    Keb (16.09.2014),voni_1 (25.09.2014)

  4. #3
    Registriert seit
    01.10.2012
    Beiträge
    203
    Danke
    12
    Erhielt 56 Danke für 36 Beiträge

    Standard

    Ich mach das so. Der String muß halt vorher in ein Array aufgedröselt werden.
    Code:
    //=============================================================================================================================
            // String / Char in SPS schreiben
            //=============================================================================================================================
            public int write_string(string[] input)
            {
                int _result = 0;
                int length = input.Length;
                byte[] bytes = new byte[length];
                int i = 0;
                for (i = 0; i <= length-1; i++)   //length-1
                {
                    bytes[i] = Convert.ToByte(input[i]);
                }
                try
                {
                    _result = dc.writeBytes(libnodave.daveDB, 3, 10, 10, bytes);//Array in SPS schreiben
                }
                catch
                {
                    //Fehlermeldung 
                }
                return _result;
            }
    Geändert von Bapho (16.09.2014 um 07:33 Uhr)
    Nüchtern betrachtet war es besoffen besser.

  5. Folgender Benutzer sagt Danke zu Bapho für den nützlichen Beitrag:

    Keb (16.09.2014)

  6. #4
    Avatar von Keb
    Keb ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.09.2014
    Beiträge
    15
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @Jochen : Vielen Dank Jochen, das sieht auf den ersten Blick schon sehr umfangreich aus, da finde ich sicher etwas.

    @Bapho : Das aufdröseln des Strings in ein Array hatte ich mir auch schon im Hinterkopf überlegt, doch nicht gewusst wie ich das in C# codieren könnte. Ich danke dir vielmals und werde mich gleich mal in die Programmierung stürzen.

    Ich danke Euch herzlichst!
    Ich weiß, dass ich nichts weiß. Aber das weiß ich!


  7. #5
    Registriert seit
    01.10.2012
    Beiträge
    203
    Danke
    12
    Erhielt 56 Danke für 36 Beiträge

    Standard

    Code:
    string _test = "Blablubb";
    char[] _result = _test.ToCharArray();
    Nüchtern betrachtet war es besoffen besser.

  8. #6
    Avatar von Keb
    Keb ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.09.2014
    Beiträge
    15
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Dank der Vorlage von Bapho für Strings, habe ich es geschafft, eine Dezimalzahl im Format WORD zu schreiben.

    Hier der laufende Code:
    Code:
    private void btWriteWord_Click(object sender, EventArgs e)    
    {
            Int16 myInt16 = Convert.ToInt16(nWriteWord.Value);      // Konvertieren der angegebenen Dezimalzahl
            byte[] byteArray = BitConverter.GetBytes(myInt16);        
            byte[] bytes = byteArray.Reverse().ToArray();           // drehen des Arrays, damit die Bytes in der Richtigen Reihenfolge in den DB geschrieben werden
    
            try
            {
                int res = dc.writeBytes(libnodave.daveDB, (int)nDBWord.Value, ((int)nByteWord.Value),2,bytes);
                if (res != 0)
                    throw new Exception("unable to write");                                     
              }
            catch (Exception ex)
            {
                MsgBox(ex);
            }
        }
    Danke nochmal für den Denkanstoß Bapho

    Mit freundlichen Grüßen

    Keb
    Ich weiß, dass ich nichts weiß. Aber das weiß ich!


  9. #7
    Avatar von Keb
    Keb ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.09.2014
    Beiträge
    15
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen!
    Ich habe noch eine Frage zum schreiben, die hier denke ich auch noch rein passt.

    Ich möchte im Bereich der Merker(daveFlags) und Ausgänge(daveOutputs) außer Bits auch ein Byte,Wort,Doppelwort schreiben können.
    Den folgenden Code verwende ich bei DB's:
    Code:
    int res = dc.writeBytes(libnodave.daveDB,DB, StartByte,AnzahlByte, bytes)
      if (res != 0)
                    throw new Exception("unable to write");
    Bei Merkern verwende ich diesen Code:
    Code:
    int res = dc.writeBytes(libnodave.daveFlags,0, StartByte,1, bytes)
      if (res != 0)
                    throw new Exception("unable to write");
    Bei Ausgängen verwende ich diesen Code:
    Code:
    int res = dc.writeBytes(libnodave.daveOutputs,0, StartByte,1, bytes)
      if (res != 0)
                    throw new Exception("unable to write");
    Obwohl der Code bis auf die hier geschriebene Stellen identisch ist, will er mir im Merker und Ausgang Bereich keine Bytes schreiben. Woran kann das liegen?
    Kann man Bytes nur im DB schreiben?

    Grüße Keb

  10. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Keb Beitrag anzeigen
    will er mir im Merker und Ausgang Bereich keine Bytes schreiben.
    Was heißt "will keine Bytes schreiben" - bekommst Du irgendeine Fehlermeldung oder siehst Du an der SPS nur nicht das von Dir erhoffte Ergebnis?
    Kann es sein, daß das SPS-Programm "Deine" Merker und Ausgänge dauernd beschreibt?

    In welche CPU willst Du eigentlich schreiben?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #9
    Avatar von Keb
    Keb ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.09.2014
    Beiträge
    15
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich habe wohl vergessen dazu zu schreiben, dass er die Zeile "throw new Exception("unable to write");" ausführt. Das bedeutet für mich, das in der Libnodave Funktion ein Fehler auftritt. Was für einer das ist kann ich ja leider nicht einsehen bzw ich wüsste nicht wo.
    Ich habe nochmal nachgeschaut welche CPU ich benutze:
    SIMATIC CPU 314C-2PN/CP
    Auf der CPU ist kein Programmcode vorhanden, der die Merker/ Ausgänge beschreibt. Wenn ich die Merker/Ausgänge die ich mit dem Byte beschreiben möchte,
    Bitweise beschreibe erhalte ich keinen Fehler.

    Grüße
    Keb

    Ich weiß, dass ich nichts weiß. Aber das weiß ich!


  12. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Welche Fehlernummer steht in res?
    Mit daveStrError kann man sich die Fehlernummer in einen Fehlertext umwandeln lassen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Step 7 Libnodave mit C# in DB schreiben
    Von Maddin* im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.11.2013, 17:51
  2. Libnodave PAW schreiben
    Von FeigeKalle im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 04.02.2011, 14:45
  3. mit libnodave in db schreiben
    Von mike97714 im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 30.06.2009, 08:33
  4. Libnodave Daten lesen/schreiben
    Von Acidic im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.06.2008, 08:32
  5. libnodave timer/counter schreiben
    Von b0den im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 16.05.2008, 10:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •