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

Ergebnis 1 bis 3 von 3

Thema: LibNoDave Runtime Error

  1. #1
    Registriert seit
    19.07.2004
    Beiträge
    414
    Danke
    44
    Erhielt 34 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich mache gerade meine ersten Gehversuche mit LibNoDave und Ethernet.

    Ich habe mir folgende Testroutine gemacht:

    Code:
    procedure TfrmMain.Button1Click(Sender: TObject);
    var aDaveInterface: pdaveInterface;
        aDaveConnection: pdaveConnection;
        aDaveOsSerialType: _daveOSserialType;
        Buffer: Array[0..1024] of Byte;
    
    begin
      aDaveOsSerialType.rfd := OpenSocket(102, '10.10.0.200');
      aDaveOsSerialType.wfd := aDaveOsSerialType.rfd;
      if (aDaveOsSerialType.rfd > 0) then begin
        aDaveInterface := DaveNewInterface(aDaveOsSerialType, 'IF1', 15, daveProtoISOTCP, daveSpeed187k);
     	  aDaveInterface^.Timeout := 5000000;
        if (daveInitAdapter(aDaveInterface) = 0) then begin
        	aDaveConnection := daveNewConnection(aDaveInterface, 2, 0, 2);
        	if (daveConnectPLC(aDaveConnection) = 0) then begin
    
            daveReadBytes(aDaveConnection, daveDB, 5, 0, 200, @Buffer);
    
    
            daveDisconnectPLC(aDaveConnection);
          end;
       	  daveDisconnectAdapter(aDaveInterface);
        end;
      end;
    end;
    Und bei: aDaveInterface := DaveNewInterface(aDaveOsSerialType, 'IF1', 15, daveProtoISOTCP, daveSpeed187k);
    gibt es schon einen Runtime - Error. Diese Routinen habe ich aus dem Beispiel übernommen.
    Verstehe ich das falsch ??? Oder gibt es einen echten logischen Fehler in meinem Hirn ??
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt



    Zitieren Zitieren LibNoDave Runtime Error  

  2. #2
    Avatar von Lazarus™
    Lazarus™ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2004
    Beiträge
    414
    Danke
    44
    Erhielt 34 Danke für 20 Beiträge

    Standard

    Hat sich dann auch erledigt... Habe mal die ganzen cdecl; gelöscht.

    Ist InitAdapter überhaupt nötig, bei TCPIP ??
    Wieso liest die Lib nicht MB0 - 255 in einem Zug ??? Nur 200 Bytes ???
    Liest die Lib auch z.B. MB1000 etc. ???
    Gibt es eine Grenze für 200 Byte pro auftrag ???
    Und zu guter letzt, sind in PDU.data alle meine Bytes sequenziell abgelegt ??? Wie gross ist der Buffer ???
    Angehängte Dateien Angehängte Dateien
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Lazarus™
    Hat sich dann auch erledigt... Habe mal die ganzen cdecl; gelöscht.
    Ist InitAdapter überhaupt nötig, bei TCPIP ??
    Nein, aber es tut einfach nix. Es bläht auch deinen Code nur minimal auf. Dafür kann die Anwendung unverändert mit mit allen Protokollen laufen.
    Zitat Zitat von Lazarus™
    Wieso liest die Lib nicht MB0 - 255 in einem Zug ??? Nur 200 Bytes ???
    Liest die Lib auch z.B. MB1000 etc. ???
    Gibt es eine Grenze für 200 Byte pro auftrag ???
    Es gibt eine Grenze der Länge der PDU (Datenpakete), je nach CPU und Übertragungsweg. Die wird in connectPLC "ausgehandelt", bei dir wahrscheinlich 240.
    Libnodave zeigt dir das Ergebnis des "Aushandelns" mit der -d Option bei den Testprogrammen, oder daveSetDebug(daveDebugConnect) oder setDaveDebug(daveDebugAll) im eigenen Programm.

    Die maximale Länge der Daten beim Lesen ist 18 weniger, beim Schreiben 28 weniger, also 222 bzw. 212.
    Um längere Blöcke zu lesen oder zu schreiben, mußt du halt daveReadBytes oder daveWriteBytes mehrfach aufrufen. Das machen andere Bibliotheken intern, aber ich halte es für gut, wenn sich der Anwender dessen bewußt ist, es dauert dann viel länger.

    Viellicht kommt ja jemand auch mit einem Word statt einem DWord aus, wenn er dadurch bei der Gesamtlänge unter der Grenze bleibt.

    Die nächste Version wird Funktionen daveReadManyBytes oder daveWriteManyBytes enthaten, die das intern erledigen.

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 08.09.2011, 00:22
  2. Runtime Error bei OPC Read Item
    Von D_Lar im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 29.03.2011, 16:34
  3. Antworten: 12
    Letzter Beitrag: 04.03.2011, 08:38
  4. LibNodave 64bit write error on Linux
    Von 3electrons im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 23.04.2010, 19:42
  5. Libnodave --> Adapter geht auf Error
    Von bytethief im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 14.07.2009, 12:34

Lesezeichen

Berechtigungen

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