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

Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 62

Thema: Libnodave lernen

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.170
    Danke
    922
    Erhielt 3.287 Danke für 2.656 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich meine, das schafft noch nichtmal Step7, zyklusgenau alle 10ms auszulesen.
    Puffere Deine Messdaten in einen DB, da bist Du auf der sicheren Seite, egal wie schnell Deine SPS ist.
    Am Ende des Meßzyklus setze ein Triggerbit, dann kannst Du in aller Ruhe den Datenblock auslesen.

    Zur Kommunikationsgeschwindigkeit gibt es Erfahrungen von Forumsmitgliedern, die werden sich sicher noch melden. Irgendwo gibt es hier im Forum auch schon Beiträge mit Zeitangaben.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #22
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Wenn ich nur eine Fliesskommazahl aus der SPS lese mit ReadBytes und GetFloat dann ist die Zykluszeit in der VB6 Loop-Until-Schleife (gelesen mit timeGetTime aus der (winmm.dll ) durchschnittlich 20ms. Lese ich aber drei Fliesskommazahlen aus der SPS schwillt die Zykluszeit in meiner Schleife auf 70-80ms an.

    Ich moechte so wie das alle Programme machen, die Daten aus der SPS lesen, keine Veraenderungen am SPS Programm machen. Ich moechte eine Daten-Rate von 20-30ms erreichen, und dabei ungefaehr 8 Worte lesen.

    Leider bekomme ich beim Execute-Befehl die Fehlermeldung 5, means the data address is beyond the CPUs address range.
    Geändert von Burkhard (10.12.2013 um 14:08 Uhr) Grund: Fehler

  3. #23
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Liest du ein- oder 3 mal mit ReadBytes? wenn du readmes und faqs gelesen hast, wirst du auch gelesen haben, daß ich dazu rate, möglichst viele Variablen en bloc zu lesen. Die Ausführungszeit von getFloat ist vernachlässigbar.

  4. #24
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.170
    Danke
    922
    Erhielt 3.287 Danke für 2.656 Beiträge

    Standard

    Ich selber habe keine Zeitmessungen gemacht doch ich meine, es macht fast keinen Unterschied in der Geschwindigkeit, ob man 1 REAL oder 50 REAL aus einem Array mit ReadBytes liest. Wenn man jeden REAL in einer extra Anfrage liest, dann multipliziert sich natürlich die Auslesezeit. Wenn Deine Daten quer durch die ganze SPS verstreut liegen, dann solltest Du das Auslesen in einem Multiple Item Read zusammenfassen. Das beste ist aber, die Daten schon in der SPS "kommunikationsfreundlich" in einem DB zusammenzufassen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #25
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke dass ihr euch die Zeit genommen habt zu antworten. Ja, ich lese dreimal mit ReadBytes. Jedes mal lese ich vier Byte und wandle mit GetFloat in eine REAL-Zahl. Das Ziel ist es, wie mit einem handelsueblichen Data-Logging-Programm, die Verbindung zur SPS herzustellen, eine Anzahl an Daten aus zu waehlen und diese dann mit einer akzeptablen durchschnittlichen Zykluszeit zwischen 40ms und 50 ms auszulesen. Es sollen, wenn moeglich, keine Aenderungen an der SPS durchgefuehrt werden muessen!

    Ja, ich habe die FAQ und Doku gelesen und weiss, dass meine Anfangsvariante mit einzelnen ReadBytes-Befehlen, die zu Testzwecken ganz gut war, verbesserungswuerdig ist. Darum habe ich gestern auch mit dem Multiple Item Read begonnen. Ich habe mich an das VBA Beispielprogramm gehalten: die PDU erzeugt, das Resultset erzeugt, den Request vorbereitet, Variablen zum Request hinzu gefuegt (die gleich Werte wie bei meinen Readbyte-Befehlen, die funktionieren), aber beim ExecuteRequest-Befehl bekomme ich den Fehler 5. Wenn ich die Meldung umwandle, erhalte ich "the data address is beyond the CPUs address range." Irgendwo habe ich was falsch gemacht. Ich probiere es heute noch mal aus und poste meine Code.

    Gruss aus Shanghai. Burkhard.
    Geändert von Burkhard (11.12.2013 um 03:29 Uhr) Grund: Fehler

  6. #26
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Unglücklich

    Code:
    Sub MyReadMultipleItemsFromPLC()
        Dim FloatResult1 As Single
        Dim FloatResult2 As Single
        Dim FloatResult3 As Single
        Dim ResultSet As Long
        Dim PDU As Long
        Dim Err As String
        
        'Establish Connection to PLC
        
        PortHandle = openSocket(102, "10.196.47.224")
        
        If PortHandle > 0 Then
            DeviceInterface = daveNewInterface(PortHandle, PortHandle, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
            Result = daveInitAdapter(DeviceInterface)
           
            If Result = 0 Then
                DeviceConnection = daveNewConnection(DeviceInterface, 0, 0, 2)
                Result = daveConnectPLC(DeviceConnection)
                If Result = 0 Then
                    MsgBox ("connectPLC successful")
                Else
                    MsgBox ("connectPLC failed")
                    End
                End If
            Else
                Call MsgBox("InitAdapter failed")
                End
            End If
        Else
            Call MsgBox("OpenSocket failed")
            End
        End If
        'Read Data as single requests from PLC
    
        Result = daveReadBytes(DeviceConnection, daveDB, 195, 80, 4, Empty)
        FloatResult1 = daveGetFloat(DeviceConnection)
            
        Result = daveReadBytes(DeviceConnection, daveDB, 199, 0, 4, Empty)
        FloatResult2 = daveGetFloat(DeviceConnection)
            
        Result = daveReadBytes(DeviceConnection, daveDB, 199, 4, 4, Empty)
        FloatResult3 = daveGetFloat(DeviceConnection)
    
        'Read Data as multiple item request from PLC
         PDU = daveNewPDU
         Call davePrepareReadRequest(DeviceConnection, PDU)
         Call daveAddVarToReadRequest(PDU, daveDB, 199, 0, 4)
         Call daveAddVarToReadRequest(PDU, daveDB, 199, 4, 4)
         Call daveAddVarToReadRequest(PDU, daveDB, 195, 80, 4)
           
        ResultSet = daveNewResultSet
        
        Result = daveExecReadRequest(DeviceConnection, PDU, ResultSet)
        
        If Result = 0 Then
            
            Result = daveUseResult(DeviceConnection, ResultSet, 0)
            FloatResult1 = daveGetFloat(DeviceConnection)
            
            Result = daveUseResult(DeviceConnection, ResultSet, 0)
            FloatResult2 = daveGetFloat(DeviceConnection)
            
            Result = daveUseResult(DeviceConnection, ResultSet, 0)
            FloatResult2 = daveGetFloat(DeviceConnection)
                
            daveFreeResults (ResultSet)
        Else
            Err = daveStrError(Result)
        End If
        
        daveFree (ResultSet)
        daveFree (PDU)
        Call CloseConnection
    End Sub
    Hier ist der mein Testcode. Ich bekomme bei ExecuteRequest, wie gesagt, den Fehler Nummer 5. Und weiss nicht was ich falsch mache... Bitte helft mir!!

    Wenn ich statt daveDB, daveFlags verwende und die Merker MW0, MW2 und MW4 lese, dann bekomme ich keinen Fehler. Ich will aber keine Merker lesen, ich will Datenbausteine lesen.
    Geändert von Burkhard (11.12.2013 um 03:40 Uhr) Grund: Fehler entdeckt

  7. #27
    Registriert seit
    21.10.2010
    Beiträge
    158
    Danke
    21
    Erhielt 29 Danke für 17 Beiträge

    Standard

    Und es gibt DB199 und DB195 in der SPS?

  8. #28
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ja, natürlich, Wie du in meinem Test Code siehst, stelle ich ja die Verbindung zur SPS her, lese dann mit readbytes dreimal aus den DB 195 und 199. Ohne Fehler!
    Dann will ich aus den gleichen DB lesen, aber mit dem multiple Read request. Beim execute gibt's die Fehlermeldung. Da ist offenbar ein derber Bug in libnodave!
    Geändert von Burkhard (12.12.2013 um 00:19 Uhr) Grund: Fehler

  9. #29
    Registriert seit
    21.10.2010
    Beiträge
    158
    Danke
    21
    Erhielt 29 Danke für 17 Beiträge

    Standard

    Hab gerade noch einmal getestet, bei mir läufts einwandfrei.

  10. #30
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von funkey Beitrag anzeigen
    Hab gerade noch einmal getestet, bei mir läufts einwandfrei.
    Oben im Programm siehst du das normale Lesen mit ReadBytes, aus genau den gleichen DBs wo ich dann auch unten mit dem Multiple Read lese. Siehst du denn einen Fehler in meinem Code?

    Nutzt du auch VBA in Excel? Liest du auch aus DBs? Kannst du mal deinen Code posten? Danke!
    Geändert von Burkhard (12.12.2013 um 05:35 Uhr) Grund: Zusatz

Ähnliche Themen

  1. AWL lernen
    Von Flux im Forum Simatic
    Antworten: 32
    Letzter Beitrag: 08.10.2012, 15:07
  2. E-Plan lernen
    Von dirknico im Forum E-CAD
    Antworten: 20
    Letzter Beitrag: 23.01.2012, 21:44
  3. Englisch lernen
    Von Lipperlandstern im Forum Stammtisch
    Antworten: 18
    Letzter Beitrag: 07.12.2007, 15:05
  4. Pascal lernen
    Von tycomatze im Forum Hochsprachen - OPC
    Antworten: 18
    Letzter Beitrag: 05.07.2007, 09:13
  5. WIN CC lernen
    Von Outrider im Forum HMI
    Antworten: 4
    Letzter Beitrag: 27.07.2004, 16:21

Lesezeichen

Berechtigungen

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