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

Ergebnis 1 bis 5 von 5

Thema: NoDave Infos...

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich möchte mit LibNoDave eine Anlage visualisieren, nun wollte Ich wissen wieviele Bytes von der SPS in einem Request übertragen werden! Und auch wie Ich 2 o. 3 Anfragen wenn sie nur ein paar bytes brauchen in einer Zusammenfassen kann! Gibts da Infos?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren NoDave Infos...  

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

    Daumen hoch

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ich möchte mit LibNoDave eine Anlage visualisieren, nun wollte Ich wissen wieviele Bytes von der SPS in einem Request übertragen werden! Und auch wie Ich 2 o. 3 Anfragen wenn sie nur ein paar bytes brauchen in einer Zusammenfassen kann! Gibts da Infos?
    Zitat Zitat von doc/daveReadBytes.html
    A typical PDU size is 240 bytes, limiting read calls to 222 bytes result length.
    Die tatsächliche PDU-Länge hängt von der CPU und dem Übertragungsweg (MPI-Adapter, Ethernet-CP...)ab.
    ein Beispiel, wie sich mehrere Variablen mit einer Anfrage lesen lassen, findest du in testMPI.c:
    Code:
    if(doMultiple) {
            printf("Now testing read multiple variables.\n"
            "This will read 1 Byte from inputs,\n"
            "4 bytes from flags, 2 bytes from DB6\n"
            " and other 2 bytes from flags\n");
            wait();
            davePrepareReadRequest(dc, &p);
            daveAddVarToReadRequest(&p,daveInputs,0,0,1);
            daveAddVarToReadRequest(&p,daveFlags,0,0,4);
            daveAddVarToReadRequest(&p,daveDB,6,20,2);
            daveAddVarToReadRequest(&p,daveFlags,0,12,2);
            daveAddBitVarToReadRequest(&p, daveFlags, 0, 25 /* 25 is 3.1*/, 1);
            res=daveExecReadRequest(dc, &p, &rs);
            
            printf("Input Byte 0 ");
            res=daveUseResult(dc, &rs, 0); // first result
            if (res==0) {
                a=daveGetU8(dc);
                printf("%d\n",a);
            } else 
            printf("*** Error: %s\n",daveStrerror(res));
            
            printf("Flag DWord 0 ");    
            res=daveUseResult(dc, &rs, 1); // 2nd result
            if (res==0) {
            a=daveGetS16(dc);
                printf("%d\n",a);
            } else 
            printf("*** Error: %s\n",daveStrerror(res));
            
            printf("DB 6 Word 20: ");    
            res=daveUseResult(dc, &rs, 2); // 3rd result
            if (res==0) {
            a=daveGetS16(dc);
                printf("%d\n",a);
            } else 
            printf("*** Error: %s\n",daveStrerror(res));
            
            printf("Flag Word 12: ");        
            res=daveUseResult(dc, &rs, 3); // 4th result
            if (res==0) {
            a=daveGetU16(dc);
                printf("%d\n",a);
            } else 
            printf("*** Error: %s\n",daveStrerror(res));    
            
            printf("Flag F3.1: ");        
            res=daveUseResult(dc, &rs, 4); // 4th result
            if (res==0) {
            a=daveGetU8(dc);
                printf("%d\n",a);
            } else 
            printf("*** Error: %s\n",daveStrerror(res));        
            
            printf("non existing result (we read 5 items, but try to use a 6th one): ");
            res=daveUseResult(dc, &rs, 5); // 5th result
            if (res==0) {
            a=daveGetU16(dc);
                printf("%d\n",a);
            } else 
            printf("*** Error: %s\n",daveStrerror(res));        
            
            daveFreeResults(&rs);  
    }
    Wie es beim Schreiben geht, folgt gleich dahinter.

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

    Standard

    Optimiert LibNoDave einen solchen multiplen read request? wenn ich verschiedene bereiche aus einem db lese, das es automatisch einen großen bereich draus macht?
    Und wenn die anfrage zu groß wird, wird sie dan automtisch auf mehrere gesplittet?
    Oder muss Ich das selbst realisieren?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Otimierung???  

  4. #4
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard

    Versuch macht schlau:
    Ich würde einfach mal versuchen, den kompletten DB am Stück einzulesen.

    Die Welt ist doch digital: es geht oder es geht nicht!

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

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Optimiert LibNoDave einen solchen multiplen read request? wenn ich verschiedene bereiche aus einem db lese, das es automatisch einen großen bereich draus macht?
    Und wenn die anfrage zu groß wird, wird sie dan automtisch auf mehrere gesplittet?
    Oder muss Ich das selbst realisieren?
    Libnodave enthält keine Funktion, um die Größe der wahrscheinlichen (im Fehlerfall ist sie kleiner) Antwort-PDU auf einen multiple read request zu berechnen. Das schien mir einfach nicht nötig. Ferner kannst du auch beliebig weitere Variablen an die Anfrage anhängen, so daß sie nicht einmal mehr versendet werden kann. Ich habe nicht ausprobiert was dann passiert. Bei "multiple read" bist du selbst verantwortlich!

    Was argv_usr anspricht, das Lesen eines ZUSAMMENHÄNGENDEN Datenblocks (z.B. DB, können aber auch Merker sein, wenn genug vorhanden) ist KEIN Fall für multiple read. daveReadBytes schickt die Anfrage an die CPU und überläßt es ihr, ob sie Antwort gibt oder Fehler meldet. Es gibt aber die "Komfort"-Funktionen daveReadManyBytes
    und daveWriteManyBytes, die zerlegen die Anfrage und setzen die Anworten auch wieder zu einem Block zusammen.
    Nachteil: Wenn du ein Byte mehr liest als in die Antwort_PDU paßt, macht es 2 Anfragen daraus, deine Kommunikation ist nur halb so schnell und du merkst es nicht.
    Aber vielleicht möchtest du lieber das Datenvolumen verringern, z.B. im DB einen DINT gegen INT tauschen oder reserviertes Feld aus einem UDT schmeißen.

  6. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    argv_user (22.11.2007)

Ähnliche Themen

  1. Infos Blemo?!
    Von c.wehn im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 12.05.2017, 09:11
  2. Elau alle Infos zu mir!
    Von Oede_Bloede im Forum Antriebstechnik
    Antworten: 10
    Letzter Beitrag: 15.02.2008, 07:36
  3. Infos zum TD400C ?
    Von DennisBerger im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.01.2008, 09:52
  4. Infos zu Step 7 V5.4
    Von eisen im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 07.04.2006, 12:47
  5. Modbus Infos
    Von Joos im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 31.12.2005, 18:53

Lesezeichen

Berechtigungen

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