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

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

Thema: LibNoDave + S7Online

  1. #11
    Registriert seit
    22.02.2007
    Ort
    Sponheim
    Beiträge
    190
    Danke
    3
    Erhielt 10 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich hänge mich hier einfach mal an.
    Hab der Komponente auch noch 3 Kleinigkeiten hinzugefügt.

    1.
    Code:
    procedure TNoDave.ReadManyBytes(Area: TNoDaveArea; DB, Start, Size: Integer; Buffer: Pointer);
    2.
    Code:
    function TNoDave.GetString(Address: Integer; Buffer: Pointer; BufOffs: Integer; BufLen: Integer): AnsiString;
    3.
    Code:
    procedure TNoDave.WriteString(Address: Integer; Value: AnsiString; Count: Byte);
    Angehängte Dateien Angehängte Dateien
    Geändert von marcengbarth (05.05.2009 um 08:35 Uhr)
    Wie kann es sein, dass am Ende des Geldes noch Monat übrig ist?
    Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück!
    engbarth.es

  2. #12
    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

    Hallo ...

    schön, das sich was tut. Gibt es denn eventuell demnächst eine
    Aktualisierung der Komponente ????

    Ein paar "neue" funktionen fehlen inzwischen in der Komponente.
    Von daher wäre eine Überarbeitung schön. Wenn du (AFK) eventuell
    etwas unterstützung brauchen kannst, dann sag bescheid... Ich kann sicher
    etwas Zeit freischaufeln dafür

    Und vielen Dank für diese schöne Komponente... Dieser Dank geht natürlich
    auch an Zottel für die hervorragende Arbeit ...
    Geändert von Lazarus™ (05.05.2009 um 09:16 Uhr)
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




  3. #13
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von Lazarus™ Beitrag anzeigen
    - ALLE pChar gegen pAnsiChar
    - ALLE String gegen AnsiString
    - ALLE Char gegen AnsiChar
    Habe ich in meiner Version nachgezogen, danke für die Suche nach der Lösung.

    Zitat Zitat von marcengbarth Beitrag anzeigen
    Code:
    procedure TNoDave.ReadManyBytes(Area: TNoDaveArea; DB, Start, Size: Integer; Buffer: Pointer);
    function TNoDave.GetString(Address: Integer; Buffer: Pointer; BufOffs: Integer; BufLen: Integer): AnsiString;
    procedure TNoDave.WriteString(Address: Integer; Value: AnsiString; Count: Byte);
    Der Aufruf von daveReadManyBytes in der der Methode DoReadManyBytes hat eigentlich keinen Sinn gemacht, da in der Methode DoReadManyBytes schon immer bei Bedarf in mehrere Blöcke geteilt wurde. Darum habe ich die Methoden vor geraumer Zeit wieder rausgeschmissen, ReadManyBytes macht daher auch keinen Sinn mehr.

    GetString und WriteString hab ich mir angeschaut, habe mich dann aber entschlossen, das etwas anders zu implementieren:
    Code:
    function TNoDave.GetString(Address: Integer; Buffer: Pointer; BufOffs, BufLen: Integer): AnsiString;
    var
      BufPtr: Pointer;
      MaxLen: Integer;
      ActLen: Integer;
      BufIdx: Integer;
    begin
      Result:='';
      If BufOffs = -1 then BufOffs:=FBufOffs;
      If BufLen = -1 then BufLen:=FBufLen;
      BufPtr:=BufferAt(Address, 1, Buffer, BufOffs, BufLen);
      If Assigned(BufPtr) then MaxLen:=daveGetU8From(BufPtr) else MaxLen:=0;
      If MaxLen > 0 then
      begin
        BufPtr:=BufferAt(Address + 1, 1, Buffer, BufOffs, BufLen);
        If Assigned(BufPtr) then ActLen:=daveGetU8From(BufPtr) else ActLen:=0;
        If ActLen > MaxLen then Exit;
        BufIdx:=0;
        While BufIdx < ActLen do
        begin
          BufPtr:=BufferAt(Address + 2 + BufIdx, 1, Buffer, BufOffs, BufLen);
          If Assigned(BufPtr) then Result:=Result + Chr(daveGetU8From(BufPtr)) else
          begin
            Result:='';
            Exit;
          end;
          Inc(BufIdx);
        end;
      end;
    end;
    
    procedure TNoDave.WriteString(Address: Integer; Value: AnsiString);
    var
      MaxLen: Byte;
      ActLen: Byte;
      Dummy: AnsiString;
    begin
      MaxLen:=0;
      ReadBytes(FArea, FDBNumber, Address, 1, @MaxLen);
      ActLen:=Length(Value);
      If ActLen > MaxLen then ActLen:=MaxLen;
      Dummy:=Chr(ActLen) + Copy(Value, 1, ActLen);
      DoWriteValue(Address + 1, MaxLen + 1, @Dummy);
    end;
    Dadurch ist bei WriteString zwar ein zusätzlicher Lesezugriff erforderlich (langsamer), allerdings wird dafür verhindert, daß die Struktur eines Datenbausteins vom PC aus "kaputtgeschrieben" wird.

    Ich hoffe, daß sich da kein Fehler eingeschlichen hat, da ich es bei mir hier nicht so auf die Schnelle testen kann.


    Gruß Axel
    Man muß sparn wo mn knn!

  4. #14
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von Lazarus™ Beitrag anzeigen
    Gibt es denn eventuell demnächst eine
    Aktualisierung der Komponente ????
    Ist schon in Arbeit.

    Zitat Zitat von Lazarus™ Beitrag anzeigen
    Ein paar "neue" funktionen fehlen inzwischen in der Komponente.
    Welche ?

    Zitat Zitat von Lazarus™ Beitrag anzeigen
    Wenn du (AFK) eventuell etwas unterstützung brauchen kannst, dann sag bescheid...
    Fehler finden, Anregungen liefern, Tipps geben ...


    Gruß Axel
    Man muß sparn wo mn knn!

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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von afk Beitrag anzeigen
    Fehler finden, Anregungen liefern, Tipps geben ...
    Das geht los ...
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




Ähnliche Themen

  1. libnodave S7Online mir .Net
    Von eloboy im Forum Hochsprachen - OPC
    Antworten: 14
    Letzter Beitrag: 31.08.2011, 01:57
  2. Libnodave und S7online
    Von adi im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 05.01.2011, 16:31
  3. Libnodave mit VBA und S7Online
    Von Watchdog im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.06.2010, 09:45
  4. LibNoDave - S7Online - TCP/IP
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 09.03.2009, 12:33
  5. Libnodave und S7Online
    Von Ralle im Forum Hochsprachen - OPC
    Antworten: 14
    Letzter Beitrag: 02.02.2007, 13:49

Lesezeichen

Berechtigungen

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