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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: LibNoDave C# Wort/Doppelwort schreiben

  1. #11
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die Fehlernummer wäre 10, die daveStrError funktion hab ich noch nicht gefunden suche aber gerade danach


    EDIT:
    Gesucht und gefunden. der Fehlertext lautet: "The desire item is not available in the PLC".
    Dazu frage ich mich wie das sein kann, da ich ja die Bits des Bytes wo ich beschreiben möchte einzeln beschreiben kann. Dort müsste dann theoretisch der gleiche Fehler auftauchen bei einem der Bits. Das ist aber nicht der Fall.

    Keb
    Geändert von Keb (24.09.2014 um 10:49 Uhr)
    Ich weiß, dass ich nichts weiß. Aber das weiß ich!


  2. #12
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.293
    Danke
    932
    Erhielt 3.320 Danke für 2.682 Beiträge

    Standard

    Dann hast Du vermutlich einen falschen Wert in "StartByte" drin.
    Wenn Du MB100 oder MW100 oder MD100 lesen willst, dann muß "StartByte" den Wert 100 haben.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #13
    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 für das Start Byte noch einmal Werte angegeben: Den Wert 100, den Wert 0 und den Wert 1 getestet. Es ergab sich leider keinerlei Änderung der Fehlermeldung.

    Keb

    Edit: Ich glaub ich muss mir für die Merker selbst eine ByteSchreiben Funktion über ersetllen, die über einzelne Bits schreibt.
    Geändert von Keb (24.09.2014 um 12:13 Uhr)
    Ich weiß, dass ich nichts weiß. Aber das weiß ich!


  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Kannst du mal den kompletten Code einer der nicht funktionierenden Methoden (inkl. Variablen-Deklarationen) hier einstellen ?

  5. #15
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier der Ganze Code der glaube ich relevant ist.
    Code:
        private void btWriteAll_Click(object sender, EventArgs e)
        {
            // Variablen Initialisieren
            bool BitBool = false;
            bool ByteBool = false;
            bool StringBool = false;
    
    
            bool RealZahl = false;
            bool Fehler = false;
    
    
            int libBereich = 0;
            int libDatenBaustein = 0;
            int libByte = 0;
            int libBit = 0;
            int libAnzahlByte = 0;
    
    
            string tempStr = string.Empty;
    
    
            // in welchem Bereich soll gelesen werden, zuweisung der Bausteinnummer.
            switch (comboBox1.SelectedItem.ToString())
            {
                case "DatenBaustein":
                    libBereich = libnodave.daveDB;
                    libDatenBaustein = (int)nDBAll.Value;
                    break;
                case "Merker":
                    libBereich = libnodave.daveFlags;
                    libDatenBaustein = 0;
                    break;
                case "Eingang":
                    libBereich = libnodave.daveInputs;
                    libDatenBaustein = 0;
                    break;
                case "Ausgang":
                    libBereich = libnodave.daveOutputs;
                    libDatenBaustein = 0;
                    break;
            } // Switch-Case
    
    
            // Zuweiseung der Werte anhand des Ausgewählten Formats
            switch (comboBox2.SelectedItem.ToString())
            {
                case "Bit":
                    BitBool = true;
                    libBit = (int)nBitAll.Value;
                    break;
                case "Byte":
                  //  if (libBereich != libnodave.daveDB) { MessageBox.Show(this, "Diese Funktion ist fehlerbehaftet und steht daher noch nicht zur Verfügung!\nWir bitten um Verständnis."); break; } 
                    libAnzahlByte = 1;
                    ByteBool = true;
                    break;
                case "Wort":
                    if (libBereich != libnodave.daveDB) { MessageBox.Show(this, "Diese Funktion ist fehlerbehaftet und steht daher noch nicht zur Verfügung!\nWir bitten um Verständnis."); break; } 
                    libAnzahlByte = 2;
                    ByteBool = true;
                    break;
                case "Doppelwort":
                    if (libBereich != libnodave.daveDB) { MessageBox.Show(this, "Diese Funktion ist fehlerbehaftet und steht daher noch nicht zur Verfügung!\nWir bitten um Verständnis."); break; } 
                    ByteBool = true;
                    break;
                case "Real":
                    if (libBereich != libnodave.daveDB) { MessageBox.Show(this, "Diese Funktion ist fehlerbehaftet und steht daher noch nicht zur Verfügung!\nWir bitten um Verständnis."); break; } 
                    libAnzahlByte = 4;
                    RealZahl = true;
                    ByteBool = true;
                    break;
                case "String":
                    if (libBereich != libnodave.daveDB) { MessageBox.Show(this, "Diese Funktion ist fehlerbehaftet und steht daher noch nicht zur Verfügung!\nWir bitten um Verständnis."); break; } 
                    StringBool = true;
                    break;
            } // Switch-Case
    
    
            libByte = (int)nByteAll.Value;
    
    
            if (BitBool)
            {
                schreibeBits(nWriteAll.Text, libBereich, libDatenBaustein, libByte, libBit, ref Fehler);
            }
    
    
            if (ByteBool)
            {
                schreibeBytes(nWriteAll.Text, libBereich, libDatenBaustein, libByte, libAnzahlByte, RealZahl, ref Fehler);
            }
            if (StringBool)
            {
                schreibeString(tbWriteAll.Text, libBereich, libDatenBaustein, libByte, ref Fehler);
            }                    
        
        }// btnWriteAll_Click
    
    
    
        private void schreibeBytes(string ZuSchreibenderWert, int libBereich, int libDatenBaustein, int libByte,int libAnzahlByte, bool RealZahl, ref bool Fehler)
        {
            timer2.Enabled = false;
    
    
            byte[] byteArray;
            byte[] bytes = {};
    
    
            // Für Byte schreiben
            if (libAnzahlByte==1)
            {
                Int16 tempInt = Convert.ToInt16(ZuSchreibenderWert);
                bytes = BitConverter.GetBytes(tempInt);  
            }// if
           
            // Für Wort schreiben
             if (libAnzahlByte==2)
            {
                Int16 myInt16 = Convert.ToInt16(ZuSchreibenderWert);
                byteArray = BitConverter.GetBytes(myInt16);
                bytes = byteArray.Reverse().ToArray();        
            }// if
          
            // Für Doppelwort schreiben
            if (libAnzahlByte==4)
            {
                // für Real schreiben
                if (RealZahl)
                {
                    // String prüfen und vorbereiten
                    ZuSchreibenderWert = ZuSchreibenderWert.Replace('.', ',');
                    // String in Float, Float in Byte[] umwandeln  
                    float tempFloat;
                    try
                    {
                        tempFloat = float.Parse(ZuSchreibenderWert);
    
    
                    }
                    catch (Exception ex)
                    {
                        MsgBox(ex);
                        Fehler = true;
                        timer2.Enabled = true;
                        return;
                    }
                    byteArray = BitConverter.GetBytes(tempFloat);
                    byteArray = byteArray.Reverse().ToArray(); // Drehen des Arrays, da sonst die Bytes in umgedrehter Reihenfolge geschrieben werden  
                }// if
                else 
                {
                    Int32 myInt32 = Convert.ToInt32(nWriteDWord.Value);
                    byteArray = BitConverter.GetBytes(myInt32);
                    bytes = byteArray.Reverse().ToArray();
                }// else
    
    
            }// if
    
    
          // Schreiben der Bytes            
            try
            {
                int res = dc.writeBytes(libnodave.daveDB, libDatenBaustein, libByte, libAnzahlByte, bytes);            
                if (res != 0)
                    throw new Exception("unable to write");
                Fehler = false;
                timer2.Enabled = true;
                return;
            }
            catch (Exception ex)
            {
                Fehler = true;
                MsgBox(ex);
                timer2.Enabled = true;
                return;
            }// try_catch
        }// schreibeBytes
    Ich habe gerade beim Code einfügen gesehen, dass ich an einer Stelle anstatt der Variable "libBereich" direkt libnodave.daveDB stehen hatte. Hab es geändert und getestet. Jetzt geht alles ...

    Das ist mir jetzt wirklich richtig peinlich.
    So etwas zu übersehen...*Kopf_trifft_Tischplatte*

    Ich danke Euch wirklich wirklich sehr für eure Bemühungen.
    Verzeiht mir.

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


Ä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
  •