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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: LibNoDave + S7Online

  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 habe folgende Routine:

    Code:
    procedure TfrmMain.ConnectPlc;
    begin
      sbMain.Panels[0].Text := 'Verbindung wird hergestellt';
      sbMain.Update;
      DaveOsSerialType.RFD := {OpenSocket(7777, '10.90.0.243');} OpenS7Online('S7ONLINE', Self.Handle);
      DaveOsSerialType.WFD := DaveOsSerialType.RFD;
      if (DaveOsSerialType.RFD > 0) then begin
        DaveInterface := DaveNewInterface(DaveOsSerialType, 'IF1', LocalMPI, {DaveProtoNlPro} DaveProtoS7Online, DaveSpeed187K);
        DaveInterface^.Timeout := 20000;
        if (DaveInitAdapter(DaveInterface) = 0) then begin
          DaveConnection := DaveNewConnection(DaveInterface, PlcMPI, Rack, Slot);
          if (DaveConnectPLC(DaveConnection) = 0) then begin
            btnConnection.Caption := 'Von SPS trennen';
            sbMain.Panels[0].Text := 'Verbindung hergestellt';
            Connected := True;
           end else
            Disconnect;
        end else
          Disconnect;
      end;
    end;
    Mit der Ausgeklammerten Version (NLPro) geht es einwandfrei, aber mit der
    S7Online Version nicht. Funktioniert das S7Online generell ???
    Ich würde gerne das S7Online nehmen, damit das Tool dann allgemeingültig ist und immer zu verwenden, egal ob TCP/IP oder Adapter etc.

    Wenn dieses problem gelöst ist, wird es bald ein DB-Backup hier zum Download geben, ich denke das kann man ab und an mal brauchen.
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt



    Zitieren Zitieren LibNoDave + S7Online  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Hier mal meine Routine zum Connect und Disconnect. Vielleicht kannst du da ja was rauslesen. S7Online funktioniert bei mir. Step7 muß installiert sein. Allerdings hab ich das bisher immer nur mit einer SPS gleichzeitig hinbekiommen. Wollte ich 2 oder 3 SPS mit S7Online öffnen, bekam ich für jede SPS immer die Werte der ersten SPS, die Verbindung hergestellt hatte.

    Code:
    procedure Connect;
    var
      Address: string;
      I, FIPPort: Integer;
    begin
      //MPI libnodaveS7
    
      for I := 1 to SimDatenListe.SimN do
      begin
        if ((NOT DaveInterface.Remote[I].IsOpen) AND SimDatenListe.SimEintrag[I].ComSimState AND NOT (SimDatenListe.SimEintrag[I].Driver = AS511_DLL)) then
        begin
          Case SimDatenListe.SimEintrag[I].Protocol of
            Ord(daveProtoMPI), Ord(daveProtoMPI2), Ord(daveProtoMPI3), Ord(daveProtoMPI4), Ord(daveProtoPPI):
              begin
                Address:= ComPort_to_Str(SimDatenListe.SimEintrag[I].ComPort) + #0;
                DaveInterface.Remote[I].DaveFDS.rfd:=SetPort(@Address[1], '38400', 'O');
              end;
            Ord(daveProtoAS511):
              begin
                Address:= ComPort_to_Str(SimDatenListe.SimEintrag[I].ComPort) + #0;
                DaveInterface.Remote[I].DaveFDS.rfd:=SetPort(@Address[1], '9600', 'E');
                DaveInterface.Remote[I].CpuRack := 0;
                DaveInterface.Remote[I].CpuSlot := 0;
              end;
            Ord(daveProtoISOTCP), Ord(daveProtoISOTCP243), Ord(daveProtoIBH), Ord(daveProtoIBH_PPI), Ord(daveProtoNLPro):
              begin
                Address:= SimDatenListe.SimEintrag[I].IPAddress + #0;
                FIPPort := SetIPPort(SimDatenListe.SimEintrag[I].Protocol);
                DaveInterface.Remote[I].IPPort := FIPPort;
                DaveInterface.Remote[I].DaveFDS.rfd:=OpenSocket(FIPPort, @Address[1]);
              end;
            Ord(daveProtoS7Online):
              begin
                Address:= 'S7ONLINE'+ #0;
                DaveInterface.Remote[I].DaveFDS.rfd:=OpenS7Online(@Address[1], Application.MainForm.Handle);
              end;
          end;
        end;
    
        if ((NOT DaveInterface.Remote[I].IsOpen) AND SimDatenListe.SimEintrag[I].ComSimState AND NOT (SimDatenListe.SimEintrag[I].Driver = AS511_DLL)) then
        begin
          DaveInterface.Remote[I].DaveFDS.wfd := DaveInterface.Remote[I].DaveFDS.rfd;
          if DaveInterface.Remote[I].DaveFDS.rfd >= 0 then
          begin
            Address:='IFS'+IntToStr(I) + #0;
            DaveInterface.MPIlocal := SimDatenListe.SimEintrag[I].MPILocal;
            DaveInterface.Remote[I].Protocol := TNodaveProtocol(SimDatenListe.SimEintrag[I].Protocol);
            DaveInterface.MPISpeed := TNodaveSpeed(SimDatenListe.SimEintrag[I].MPISpeed);
            DaveInterface.Remote[I].DaveIntf:=daveNewInterface(DaveInterface.Remote[I].DaveFDS, @Address[1], DaveInterface.MPILocal, ProtCode(DaveInterface.Remote[I].Protocol), Ord(DaveInterface.MPISpeed));
            DaveInterface.Remote[I].DaveIntf^.timeout:=SimDatenListe.SimEintrag[I].Timeout;
            DaveInterface.Remote[I].IntfError:=daveInitAdapter(DaveInterface.Remote[I].DaveIntf);
            if DaveInterface.Remote[I].IntfError = 0 then
            begin
              if ((not DaveInterface.Remote[I].RemoteActive) AND SimDatenListe.SimEintrag[I].ComSimState) then
              begin
                DaveInterface.Remote[I].DaveConn:=daveNewConnection(DaveInterface.Remote[I].DaveIntf, DaveInterface.Remote[I].MPIRemote, DaveInterface.Remote[I].CpuRack, DaveInterface.Remote[I].CpuSlot);
                DaveInterface.Remote[I].LastError:=daveConnectPLC(DaveInterface.Remote[I].DaveConn);
                DaveInterface.Remote[I].RemoteActive:=(DaveInterface.Remote[I].LastError = 0);
    //            If DaveInterface.Remote[I].Active then
    //              ReadBytes
    //            else
    //              DoOnError(daveStrerror(FLastError));
                Last_DaveError_Str := daveStrerror(DaveInterface.Remote[I].LastError);
                InitPG1Fehler := DaveInterface.Remote[I].LastError;
                DaveInterface.Remote[I].IntfActive := True;
              end;
            end;
          end
          else
          begin
            InitPG1Fehler := 1001;//DaveInterface.Remote[I].DaveFDS.rfd;
            DaveInterface.Remote[I].LastError := 1001;//DaveInterface.Remote[I].DaveFDS.rfd;
            Last_DaveError_Str := 'kein Interface';
          end;
        end
        else
        begin
    //      InitPG1Fehler := DaveInterface.Remote[I].DaveFDS.rfd;
    //      DaveInterface.Remote[I].LastError := DaveInterface.Remote[I].DaveFDS.rfd;
    //      Last_DaveError_Str := daveStrerror(DaveInterface.Remote[I].LastError);
        end;
      end;
    end;
    
    //Close the connection to the PLC.
    procedure Disconnect;
    var
      I: Integer;
    begin
      for I := 1 to SimDatenListe.SimN do
      begin
        if DaveInterface.Remote[I].IntfActive then
        begin
    //      if DaveInterface.Remote[I].IntfError <> 0 then
          begin
            try
    //          if DaveInterface.Remote[I].LastError = 0 then   //wurde mit der neuen Version von Axel mit Timout für TCP beseitigt!!!!!
                DaveInterface.Remote[I].IntfError := daveDisconnectPLC(DaveInterface.Remote[I].DaveConn);
              daveFree(DaveInterface.Remote[I].DaveConn);
              DaveInterface.Remote[I].IntfError := daveDisconnectAdapter(DaveInterface.Remote[I].DaveIntf);
              daveFree(DaveInterface.Remote[I].DaveIntf);
              if DaveInterface.Remote[I].Protocol <> daveProtoS7Online then
              begin
                if ((DaveInterface.Remote[I].Protocol = daveProtoISOTCP)
                   or (DaveInterface.Remote[I].Protocol = daveProtoISOTCP243)
                   or (DaveInterface.Remote[I].Protocol = daveProtoIBH)
                   or (DaveInterface.Remote[I].Protocol = daveProtoIBH_PPI)
                   or (DaveInterface.Remote[I].Protocol = daveProtoNLPro)) then
                  closeSocket(DaveInterface.Remote[I].DaveFDS.rfd)
                else
                  closePort(DaveInterface.Remote[I].DaveFDS.rfd);
              end
              else
              begin
                closeS7online(DaveInterface.Remote[I].DaveFDS.rfd);
              end;
            except
    //        On E: Exception do DoOnError('Error in function TNoDave.Disconnect: ' + E.Message);
            end;
            DaveInterface.Remote[I].IntfActive := False;
            DaveInterface.Remote[I].RemoteActive := False;
          end;
        end;
      end;
    end;
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Lazarus™ (22.04.2009)

  4. #3
    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

    @Ralle: Yepp, das funktioniert. Meine Version war ja in etwa genau so gemacht ... Das Problem lag woanders ...

    @Zottel: Schlechte Nachrichten ... Ich glaube mit Delphi 2009 funktioniert die Library nicht mehr. Ein Connect war absolut unmöglich.
    Die selbe Applikation unter Delphi 2007 compiliert rennt
    Warum das so ist, kann ich nicht sagen, aber scheinbar ist der Compiler soweit verändert, das eben die LibNoDave nicht mehr geht.
    Eventuell hat das damit zu tun, das einiges verändert wurde betreffend Unicode. Vielleicht haut das mit den Strings und PChars so nicht mehr hin...
    Ist aber nur ein Verdacht
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




  5. #4
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Standard

    Hallo,

    Zitat Zitat von Lazarus
    Eventuell hat das damit zu tun, das einiges verändert wurde betreffend Unicode. Vielleicht haut das mit den Strings und PChars so nicht mehr hin...
    Ist aber nur ein Verdacht
    Und diesen Verdacht teile ich mit Dir

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Unicode  

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

    Lazarus™ (22.04.2009)

  7. #5
    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 QM,

    das du meinen Verdacht mit mir teilst, finde ich ja irgendwie doof

    Ich hoffte wirklich das es wie sonst auch an mir liegt, aber ich glaube diesmal eben auch nicht ... Sehr schlecht ...

    Werde dann wohl umsteigen/downgraden auf ein altes Delphi ...

    Vielleicht gibt es ja bald mal eine neue Version von LibNoDave
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




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

    Standard

    Zitat Zitat von Lazarus™ Beitrag anzeigen
    Vielleicht gibt es ja bald mal eine neue Version von LibNoDave
    Habe kein Delphi, kann daher nicht nachprüfen.
    Und was mache ich dann?
    Umstellen auf neu und alle mit alt ärgern sich?
    Oder 2 Versionen?
    Es müßte meiner Meinung nach reichen, daß der Anwender nodave.pas neu kompiliert. Falls Pchars jetzt auf Unicode zeigen müßte man halt ein PByte definieren.

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

    Lazarus™ (24.04.2009)

  10. #7
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Idee

    Hallo,

    Zitat Zitat von Zottel
    Falls Pchars jetzt auf Unicode zeigen müßte man halt ein PByte definieren.
    Naja, diese Auffassung kann ich nicht so richtig teilen. Unicode heisst zwei Byte pro Zeichen, im Gegensatz zum altbekannten Ansicode mit 1 Char = 1 Byte.
    Viele Delphianer haben lautstark die Einführung von Unicode zur Internationalisierung Ihrer Anwendungen von Embarcadero (früher Borland und auch GodeGear) in den entsprechenden Foren eingefordert. Das ist mit D2009 nun endlich geschehen, als Folge davon darf ich nochmal einige tausend Euronen in aktualisierte Fremdkomponenten von Kassl, DevArt, Steema Software, TMS und Konsorten investieren...

    Zitat Zitat von Lazarus
    Ich hoffte wirklich das es wie sonst auch an mir liegt, aber ich glaube diesmal eben auch nicht
    Nee, liegt nicht an Dir, die Umstellung von Delphi auf Unicode hat wirklich interessante Effekte

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Unicode  

  11. Folgender Benutzer sagt Danke zu Question_mark für den nützlichen Beitrag:

    Lazarus™ (24.04.2009)

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

    Zottel: Danke, du hast recht.

    Ich habe in der NoDave.pas:

    - ALLE pChar gegen pAnsiChar
    - ALLE String gegen AnsiString
    - ALLE Char gegen AnsiChar

    getauscht und funzt ...

    Das Selbe auch in der NoDaveComponent und alles rennt wieder ...


    Danke dir ...
    Geändert von Lazarus™ (25.04.2009 um 15:34 Uhr)
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




  13. #9
    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

    @Zottel: Ich habe das alles jetzt etwas genauer getestet. Mit den o.g. Änderungen läuft alles korrekt, soweit ich das getestet habe.
    Eine Übersetzung mit einem "älteren" Delphi 2007 war genauso möglich.

    Eventuell könnte man die Änderungen ja direkt mit in dein Librarypaket stecken. Zumindest habe ich die Dateien mal mit angehängt ...
    Angehängte Dateien Angehängte Dateien
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Lazarus™ Beitrag anzeigen
    Eventuell könnte man die Änderungen ja direkt mit in dein Librarypaket stecken. Zumindest habe ich die Dateien mal mit angehängt ...
    Danke, ich schau mir das mal an, und wenn möglich pflege ich es dann in meinen aktuellen Stand der Komponente ein.


    Gruß Axel
    Man muß sparn wo mn knn!

Ä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
  •