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

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

Thema: Verständnisproblem bei DB aufruf im FC

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Bin gerade am Basteln eines FC´s welcher Werte aus einem DB lesen soll.
    Dabei soll die Datenbausteinnummer über die In-Schnittstelle übermittelt werden.

    FC 1

    In: #DB_Nummer INT

    Code:
    AUF DB [#DB_Nummer]
    ...
    Bringt mir die Meldung: "Keine indirekten Operationen erlaubt für FC-Parameter DB_Nummer!

    Lege ich in der Temp-Schnittstelle noch einen Parameter:

    Temp: #DB_NummerW INT
    an und verwende Ihn folgendermaßen:

    Code:
    L #DB_Nummer
    T #DB_NummerW
    AUF DB [#DB_NummerW]
    ...
    Dann funktioniert´s.

    Könnte mir da bitte jemand mal kurz erklären aus welchem Grund die erste Variante nicht funktioniert??
    Steh da seid guten 3 Stunden im Wald und seh nur Bäume..

    Ich danke schonmal!
    Zitieren Zitieren Verständnisproblem bei DB aufruf im FC  

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

    Standard

    Da ein parameter und lOkaldaten für eine s7 grundverschiedene dinge sind, aber im awl code halt gleich aussehen! Und es eben keinen mc7 code für öffne db indirekt über parameter gibt
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    S7online (09.12.2010)

  4. #3
    Registriert seit
    02.10.2010
    Beiträge
    453
    Danke
    62
    Erhielt 87 Danke für 69 Beiträge

    Standard

    Auszug aus der Hilfe...

    · Der Pointer muß für die speicherindirekte Adressierung in einem der folgenden Bereiche gespeichert werden:
    · M - Merker
    · L - Lokaldaten
    · D - Datenbaustein (DB oder DI)
    · STAT - Statische Daten (nicht bei multiinstanzfähigen Bausteinen)

  5. Folgender Benutzer sagt Danke zu Corosop15 für den nützlichen Beitrag:

    S7online (09.12.2010)

  6. #4
    Registriert seit
    19.01.2009
    Ort
    Hamm
    Beiträge
    83
    Danke
    24
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Da ein parameter und lOkaldaten für eine s7 grundverschiedene dinge sind, aber im awl code halt gleich aussehen! Und es eben keinen mc7 code für öffne db indirekt über parameter gibt
    Deswegen muss dein Wert (DB-Nummer) im Akku 1-L stehen (wie du es programmiert hast).

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.328
    Danke
    932
    Erhielt 3.332 Danke für 2.690 Beiträge

    Standard

    Speicherindirekte Adressierung mit "Pointer im Wortformat" = Index geht nur mit Index in L, M, D oder STAT - also NICHT mit Index als IN-Parameter.
    (siehe Step7-Hilfe)

    Einen DB indirekt öffnen sollte man besser so machen:
    In: #DB_Nummer BLOCK_DB
    Code:
          AUF   #DB_Nummer
    dann erscheint Deine indirekte Verwendung von DB wenigstens in den Referenzdaten.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgende 3 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    MCerv (25.02.2011),S7online (09.12.2010),Sesssko (09.12.2010)

  9. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.328
    Danke
    932
    Erhielt 3.332 Danke für 2.690 Beiträge

    Standard

    Zitat Zitat von Sesssko Beitrag anzeigen
    Deswegen muss dein Wert (DB-Nummer) im Akku 1-L stehen (wie du es programmiert hast).
    ???
    Kannste mal etwas ausführlicher erklären was Du meinst?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #7
    S7online ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.08.2010
    Beiträge
    2
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch



    Danke, ich glaub ich hab´s verstanden.

    Der In-Wert (#DB_Nummer) ist in diesem Fall ein Pointer der auf den Wert Zeigt, welchen ich in der Außenbeschaltung anlege.

    Richtig??

    Dann ist mir klar daß dann die Fehlermeldung kommt.

    Grüße!

  11. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Nee ... ist so nicht richtig.
    Alle Variablen bis DWORD-Breite werden immer byValue übergeben und nicht byReference.
    Es ist (oder muss schon so sein) wie oben beschrieben ...

    Gruß
    Larry

  12. #9
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.527 Danke für 1.286 Beiträge

    Standard

    Besser als die Variante wäre imho sowieso der IN-Parameter als Block_DB,
    damit findet man diese Art des DB Zugriffs, wenigstens bis zum Aufruf des FC, FB, in den Referenzdaten.

    Edith sagt:
    PN/DP war "schneller"

    Mfg
    Manuel
    Geändert von MSB (09.12.2010 um 16:53 Uhr)
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  13. #10
    Registriert seit
    14.11.2008
    Beiträge
    66
    Danke
    3
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Alle Variablen bis DWORD-Breite werden immer byValue übergeben und nicht byReference.
    Schön wär's. Das gilt nur für elementare Datentypen. Jeder UDT wird "by reference" übergeben.

    Außerdem wird in (fast) jedem Fall intern ein weiteres Pointer-Level dazwischengeschaltet. Diese Pointer stehen mitten im Code vor dem Call und zeigen auf die eigentlichen Daten; bei INOUT-, OUT- und UDT-Parametern wieder ein Pointer. Diese letztgenannten Pointer, Konstanten und vermutlich anderes werden vermutlich irgendwo in den Lokaldaten angelegt.

    Das erklärt, warum FC-Calls mit Parametern so extrem viel Rechenzeit und Speicherplatz brauchen; ebenso die Zugriffe im FC auf die Parameter.

    Nur bei BLOCK_DB-Übergaben und ähnlichem wird der DB selbst im Code abgelegt. Deshalb muss er beim Aufruf konstant sein. Wenn er nicht konstant ist, muss man wieder auf INT ausweichen, womit sich der Kreis zur ürsprünglichen Frage schließt.

Ähnliche Themen

  1. Verständnisproblem S7 400 H FH usw.
    Von Bender25 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.06.2015, 21:24
  2. DP/RS232 Verständnisproblem
    Von Beren im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 23.06.2011, 08:30
  3. AWL Verständnisproblem
    Von invoices im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 12.08.2010, 11:35
  4. Verständnisproblem mit pointer ?
    Von Waelder im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.08.2009, 09:02
  5. Verständnisproblem Zeiger/AWL
    Von kiestumpe im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 15.06.2006, 09:12

Lesezeichen

Berechtigungen

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