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

Ergebnis 1 bis 4 von 4

Thema: Delphi mit s7-300

  1. #1
    Registriert seit
    14.03.2006
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo erst mal,

    ich hab ein kleines problem. ich muss ein programmierpraktikum machen und als thema hab ich eine kleine anlagen steuerung, die über eine oberfläche gesteuert werden soll. ich soll also anstelle der hardware schalter alles über in delphi programmierte buttons machen.
    als hardware hab ich eine s7-315-2DP mit einer digitalen eingabebaugruppe und einer digitalen ausgabebaugruppe. verbinden tue ich mich von meinem laptop über eine cp-5512. ich benutze die delphi version 7 und hab siemens prodave 5 um eine verbindung zwischen delphi und s7 herzustellen. das prodave s7 demo tool funktioniert auch ohne probleme, d.h. ich kann mit prodave die s7 ansprechen.

    ich bin in delphi kein profi aber kleine programme bekomme ich hin und die s7 programmierung ist auch nicht mein problem. aber ich hab keinen plan, wie ich wo was in delphi von prodave einbinden muss, damit ich eine verbindung zur s7 hinbekomme.
    im forum hier und in vielen anderen auch anderssprachigen hab ich keine konkrete antwort gefunden.
    kann mir vielleicht jemand mit einem kleinen delphi beispiel helfen in dem bei einem click auf einen button ein wert in ein db in einer s7 geschrieben wird oder irgendwie weiter helfen?

    vielen dank schonmal
    Zitieren Zitieren Delphi mit s7-300  

  2. #2
    Registriert seit
    09.08.2004
    Ort
    Münsterland
    Beiträge
    232
    Danke
    21
    Erhielt 13 Danke für 10 Beiträge

    Standard

    tach,

    mach es mit libnodave....

    Hab mich Anfangs auch schwer getan, aber dann ist der Groschen gefallen ( Danke an Ralle ) und seit dem ist das Super !

    Such mal nach Libnodave im Forum ....

    gruß stricky

  3. #3
    schissern ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.03.2006
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hab ich mich auch schon mit beschäftigt und alles dazu gelesen was hier steht, bringt mich auch nicht weiter und die verbindung klappt nicht richtig

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab eine ältere Version von Prodave-Mini. Hier mal ein paar Fragmente aus meinem Delphi-Code:

    Typedefinitionen:
    Code:
     
    BPuf = array[0..1024] of Byte;                            {* Bytepuffer *}
     
    type
      TSPSBuf = record
        SPSBuf: array of BPuf;
        AltSPSBuf: array of BPuf;
    end;
    type
      plcadrtype = record
        adr: Byte;
        SEGMENTID: Byte;
        SLOTNO: Byte;
        RACKNO: Byte;
      end;
    Variablendeklaration:
    Code:
     
      //MPI
      plc_adr_table : array of plcadrtype;
      plc_name:array[0..255] of char;
      plc_res ,plc_amount: longint;
      plc_buffer : array[0..512] of word;
    Die benötigten Funktionen aus der DLL deklarieren:
    Code:
     
    function Load_tool ( no:Byte; name: {pointer} PChar; adr:{pointer} PChar): longint; stdcall;
    function DB_read ( dbno: longint; dwno: longint; var amount: longint; var plc_buffer): longint stdcall;
    function DB_write ( dbno: longint; dwno: longint; var amount: longint; var plc_buffer): longint stdcall;
    function D_field_write ( dbno: longint; dwno: longint; amount: longint;var plc_buffer): longint stdcall;
    function new_ss (no: Byte): longint stdcall;
    function Unload_tool: longint; stdcall;
    Die Funktionen implementieren:
    Code:
     
    //MPI
    function Load_tool ( no:Byte; name: {pointer} PChar; adr:{pointer} PChar): longint; stdcall; external 'W95_S7M.DLL' name 'load_tool';
    function DB_read ( dbno: longint; dwno: longint; var amount: longint; var plc_buffer): longint stdcall; external 'W95_S7M.DLL' name 'db_read';
    function DB_write ( dbno: longint; dwno: longint; var amount: longint; var plc_buffer): longint stdcall; external 'W95_S7M.DLL' name 'db_write';
    function D_field_write ( dbno: longint; dwno: longint; amount: longint; var plc_buffer): longint stdcall; external 'W95_S7M.DLL' name 'd_field_write';
    function new_ss (no: Byte): longint stdcall; external 'W95_S7M.DLL' name 'new_ss';
    function Unload_tool: longint; stdcall; external 'W95_S7M.DLL' name 'unload_tool';
    Daten für die Verbindung eintragen:
    Code:
     
    for I := 0 to SimDatenListe.SimN - 1 do
      begin
        plc_adr_table[i].adr := SimDatenListe.SimEintrag[I + 1].MPIAdrSim; {adresse}
        plc_adr_table[i].SEGMENTID := 0; {segment id}
        plc_adr_table[i].SLOTNO := 2; {slot nr}
        plc_adr_table[i].RACKNO := 0; {rack nr}
      end;
      plc_adr_table[SimDatenListe.SimN].adr := 0;
      strcopy(plc_name,'S7ONLINE');
    Öffnen einer MPI-Verbindung zur SPS:
    Code:
     
    InitPG1Fehler := Load_tool(1,addr(plc_name),addr(plc_adr_table[0]));
    Auslesen von Daten (wird z.Bsp. in einem extra Thread oder in einer Schleife aufgerufen):
    Code:
     
    var
    blen: word;
      DBAR: BPuf;
     
    ...
     
    begin
                  //MPI ProDaveS7
                  plc_amount := 1024;
                  Y[SPS] := new_ss(SPS);
                  if Y[SPS] = 0 then
                  begin
                    Y[SPS] := DB_read(SimDatenListe.SimEintrag[SPS].DBSim,0,plc_amount,DBAR);
                    if Y[SPS] = $303 then          //$303 --> DB ist zu kurz
                      Y[SPS] := 0;
                    if Y[SPS] = 0 then
                      DBDat.SPSBuf[SPS] := DBAR;
                  end;
                end;
    Daten schreiben:
    Code:
     
    begin
        Anzahl := 2;
        DBST := SimDatenListe.SimEintrag[SPS].DBSim;
        DNummer := DWNummer;
        Buf[0] := DL;
        Buf[1] := DR;
        F := new_ss(SPS);
        F := D_field_write(DBST ,DNummer ,Anzahl ,Buf);
      end;
    Die Verbindung wieder schließen:
    Code:
     
    //MPI ProDaveS7
        InitPG1Fehler := Unload_tool;
    Das ist mal schnell rauskopiert, ich hatte mehrere SPS, deshalb sind Dinge dabei, die bei dir nicht unbedingt rein müssen, aber als Anhaltspunkt reichts vielleicht. Prodave hat aber eine Doku dabei , mit der man schon etwas anfangen kann.

    PS: Prodave hat eine andere DLL und evtl. haben sich bei der neuen Version die Funktionsaufrufe verändert.
    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

Ähnliche Themen

  1. Delphi 7
    Von enter im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 21.05.2007, 06:34
  2. Delphi - S7 300 - MPI
    Von gogl im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 13.06.2006, 10:50
  3. Delphi und SPS
    Von sfc46 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.12.2004, 10:32
  4. Wago 750-650 mit Delphi und MBT.dll
    Von Anonymous im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 22.10.2004, 21:22
  5. Delphi ==> S7-300
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.12.2003, 15:12

Lesezeichen

Berechtigungen

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