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

Ergebnis 1 bis 2 von 2

Thema: Probleme mit PrepareReadrequest und mehren Variablen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe noch Probleme mit PrepareReadrequest und addVarToReadRequest

    Habe dieses Problem nur beim 2ten Aufruf der Funktionen. Es gehen ja mit einem Read Request bis zu 20 Variablen (nutze gearde max. 1. D.h. nach 18 Variablen führen Ich den Request aus, und starte dann mit einer neuen PDU! Die 18 liest er auch fehlerfrei, aber der 19ten kommt dann:

    The desired Adress is beyond limit for this PLC
    oder
    The desired item is not available in the PLC

    Hier noch ein Ausschnitt aus meinem Code:

    Code:
     //Count how Many Bytes from the PLC should be read and create a Byte Array for the Values
                int completeReadSize = 0;
                foreach (var libNoDaveValue in valueList)
                {
                    completeReadSize += libNoDaveValue._internalGetReadSize();
                }
                byte[] completeData = new byte[completeReadSize];
    
    
                //Get the Maximum Answer Len for One PDU
                int maxReadSize = _dc.getMaxPDULen() - 18;
    
    
                int akReadSize = 0;
                int positionInCompleteData = 0;
                int akVar = 0;
                int anzVar = 0;
                int anzReadVar = 0;
               
                libnodave.PDU myPDU = _dc.prepareReadRequest();
                
                //Todo Split the Read Value, if it does not fit into one PDU
                foreach (var libNoDaveValue in valueList)
                {
                    if (libNoDaveValue.LibNoDaveDataSource != LibNoDaveDataSource.Datablock && libNoDaveValue.LibNoDaveDataSource != LibNoDaveDataSource.InstanceDatablock)
                        libNoDaveValue.DatablockNumber = 0;
    
                    int readSize = libNoDaveValue._internalGetReadSize();
                    if (readSize + akReadSize > maxReadSize || anzReadVar == 18)
                    {                    
                        var rs = new libnodave.resultSet();
                        int res = _dc.execReadRequest(myPDU, rs);
                        if (res != 0)
                            throw new Exception("Error: " + libnodave.daveStrerror(res));
    
                       
    
                        //Save the Read Data to a User Byte Array (Because we use this in the libnodavevalue class!)
                        int akres = 0;
                        for (; akVar < anzVar; akVar++)
                        {                       
                            res = _dc.useResult(rs, akres++);
                            if (res != 0)
                                throw new Exception("Error: " + libnodave.daveStrerror(res));
    
                            for (int n = 0; n < valueList[akVar]._internalGetReadSize(); n++)
                            {
                                completeData[positionInCompleteData++] = Convert.ToByte(_dc.getU8());
                            }
                        }
                        rs = null;
                        myPDU = null;
                        myPDU = _dc.prepareReadRequest();
                        readSize = 0;
                        anzReadVar = 0;
                    }
    
                    akReadSize = akReadSize + readSize;
                    anzVar++;
                    anzReadVar++;
                    myPDU.addVarToReadRequest(Convert.ToInt32(libNoDaveValue.LibNoDaveDataSource), libNoDaveValue.DatablockNumber, libNoDaveValue.ByteAddress, readSize);
                }
    
                if(akReadSize>0)
                {
                    var rs = new libnodave.resultSet();
                    int res = _dc.execReadRequest(myPDU, rs);
                    if (res != 0)
                        throw new Exception("Error: " + libnodave.daveStrerror(res));                
    
                    //Save the Read Data to a User Byte Array (Because we use this in the libnodavevalue class!)
                    int akres = 0;
                    for (; akVar < anzVar; akVar++)
                    {                    
                        res = _dc.useResult(rs, akres++);
                        if (res != 0)
                            throw new Exception("Error: " + libnodave.daveStrerror(res));
    
                        for (int n = 0; n < valueList[akVar]._internalGetReadSize(); n++)
                        {
                            completeData[positionInCompleteData++] = Convert.ToByte(_dc.getU8());
                        }
                    }
                    rs = null;
                }
    Geändert von Jochen Kühner (11.05.2010 um 15:31 Uhr)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren [solved] Probleme mit PrepareReadrequest und mehren Variablen  

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hatte einen Tipfehler, und wollte dann 0 Bytes zum ReadRequest hinzufügen...

    Nun gehts...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Fehler behoben...  

Ähnliche Themen

  1. WinCC Rezeptur und Variablen Probleme
    Von advbug im Forum HMI
    Antworten: 5
    Letzter Beitrag: 10.11.2011, 12:23
  2. PrepareReadRequest und Antwort > PDU Size
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 11.05.2010, 16:25
  3. Antworten: 5
    Letzter Beitrag: 30.11.2009, 10:27
  4. Antworten: 4
    Letzter Beitrag: 05.09.2007, 00:15
  5. Cimplicity 5.0 Variablen Probleme
    Von Cosi im Forum HMI
    Antworten: 1
    Letzter Beitrag: 19.12.2005, 12:36

Lesezeichen

Berechtigungen

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