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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 40

Thema: Problem mit OUT Variabeln

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Geht nicht, da eine Statische Variable eine DB variable ist, und auf DB gehen keine direkten Out Zugriffe.
    Woher stammt denn diese "Erkenntnis"? Komisch, daß mein Step7 das nicht weiß.
    Bei mir funktionieren Zuweisungen von FC.OUT auf STAT oder DB.DBX schon immer prima.


    Zitat Zitat von explorer42 Beitrag anzeigen
    also noch mal:

    FC1:

    U E1.0
    = #sensor (ist eine out variable)


    im FB1:

    Call FC1
    sensor:=#stat_sensorzustand (ist eine statische variable)
    ...

    Call FC2
    invariable:=#stat_sensorzustand
    ...

    so funktioniert aber Anlage richtig:

    Call FC2
    invariable:="-42B6"
    ...
    Ist es zuviel verlangt, daß Du mal genau erklärst, was bedeutet: "funktioniert richtig" und "funktioniert nicht richtig"?

    Genau Dein Beispiel funktioniert bei mir auf Anhieb "richtig". Hier mal als AWL-Quelle:
    Code:
    FUNCTION "FC1" : VOID
    TITLE =
    VERSION : 0.1
    
    VAR_OUTPUT
      sensor : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
          U     E      1.0; 
          =     #sensor; 
    END_FUNCTION
    
    FUNCTION "FC2" : VOID
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      invariable : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
          U     #invariable; 
          =     M    102.0; 
    END_FUNCTION
    
    FUNCTION_BLOCK "FB1"
    TITLE =
    VERSION : 0.1
    
    VAR
      stat_sensorzustand : BOOL ;	
    END_VAR
    BEGIN
    NETWORK
    // Zum Testen M101.0 nach E1.0 übertragen
          U     M    101.0;     // Test-Steuervariable
          =     E      1.0; 
    
    // FC1 überträgt E1.0 nach #stat_sensorzustand
          CALL "FC1" (
               sensor := #stat_sensorzustand);
    
    // FC2 überträgt #stat_sensorzustand nach M102.0
          CALL "FC2" (
               invariable := #stat_sensorzustand);
    
    // M102.0 muß nun den selben Zustand wie M101.0 haben
          U     M    102.0; 
          U     M    101.0; 
          =     M    103.0; 
    END_FUNCTION_BLOCK
    
    DATA_BLOCK "DB1"
    TITLE =
    VERSION : 0.0
    
    "FB1"
    BEGIN
       stat_sensorzustand := FALSE; 
    END_DATA_BLOCK
    
    ORGANIZATION_BLOCK "OB1"
    TITLE = "Main Program Sweep (Cycle)"
    VERSION : 0.1
    
    // VAR_TEMP
    // ...
    // END_VAR
    BEGIN
    NETWORK
          CALL "FB1" , "DB1" ;
    
    END_ORGANIZATION_BLOCK
    Ist Dein FB1-Instanz-DB aktuell? (ggf. löschen und neu erstellen lassen)
    Werden bei Dir irgendwo die AR1- und AR2-Register verändert?
    Hast Du irgendwo im Programm indirekte Schreibzugriffe, die eventuell nicht sauber sind?

    Gruß
    Harald

  2. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    vierlagig (29.06.2010)

  3. #22
    explorer42 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.01.2008
    Beiträge
    10
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    funtioniert richtig bedeutet das die Anlage bzw. Zylinder genau das macht was ich möchte.
    d.h. ich habe zwei zylinder in der Maschine. Zylinder1 darf ausfahren wenn Zylinder 2 in Grundstellung ist. Fährt irgendwann aus. Aber macht es nicht wenn ich über stat oder db variable gehe.

    Instanz DB , Schreibzugriffe, AR1 und AR2 habe ich überprüft. In Ordnung.

  4. #23
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von explorer42 Beitrag anzeigen
    Danke für die Antworten!

    d.h. wenn ich es richtig verstanden habe:

    eine db-variable am in eingang eines FCs wird irgendetwas aus dem L-Stack geladen.
    bei einem Eingangswort nicht weil der Pointer direkt auf das EW zeigt.

    Aber was passiert wenn ich die db variable nicht vorher lese sondern vorher immer zyklisch über einen FC out beschreibe
    und dann später lese?
    Die DB Variable wird in die Lokaldaten umgespeichert und dann von dort gelesen. Aber Sie wird nur vor dem FC Aufruf umgespeichert wenn es ein In oder ein IN_OUT Parameter ist. Genauso werden die Lokaldaten nur zurück in den Db geschrieben wenn es sich um OUT oder IN_OUT Variablen handelt!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #24
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Woher stammt denn diese "Erkenntnis"? Komisch, daß mein Step7 das nicht weiß.
    Bei mir funktionieren Zuweisungen von FC.OUT auf STAT oder DB.DBX schon immer prima.
    Gruß
    Harald
    Was nicht funktioniert sind lesende Zugriffe auf Out Variablen eines FCs, bei dem ein DB oder DI Datenwort an der OutVariable benutzt wird, wenn die Out Variable vor dem ersten lesen nicht beschrieben wird!

    Und auch nur wenn man es so:

    Code:
          CALL  "POSITIONSKONTROLLE"
           aa:=DB1.DBW0
    und nicht so
    Code:
    AUF DB1
          CALL  "POSITIONSKONTROLLE"
           aa:=DBW0
    programmiert!
    Geändert von Jochen Kühner (29.06.2010 um 11:30 Uhr)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #25
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Die DB Variable wird in die Lokaldaten umgespeichert und dann von dort gelesen. Aber Sie wird nur vor dem FC Aufruf umgespeichert wenn es ein In oder ein IN_OUT Parameter ist. Genauso werden die Lokaldaten nur zurück in den Db geschrieben wenn es sich um OUT oder IN_OUT Variablen handelt!
    also war dein MC7-ausflug für die lösung des problems nicht notwendig. ich hatte ihn im hintergrund schon gestern gemacht und festgestellt, dass es daran nicht liegt... aber schön zu wissen, dass du dir nen kopp machst...



    Zitat Zitat von explorer42
    Instanz DB , Schreibzugriffe, AR1 und AR2 habe ich überprüft. In Ordnung.
    wie überprüft?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #26
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    also war dein MC7-ausflug für die lösung des problems nicht notwendig. ich hatte ihn im hintergrund schon gestern gemacht und festgestellt, dass es daran nicht liegt... aber schön zu wissen, dass du dir nen kopp machst...
    Ja aber im MC7 kann mal halt schön sehen was Step 7 daraus macht. Es sind ja in MC7 eigentlich alle Befehle so wie in AWL eingegeben, außer die Calls, da es eben dafür keinen direkten MC7 Befehl gibt...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #27
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ja aber im MC7 kann mal halt schön sehen was Step 7 daraus macht. Es sind ja in MC7 eigentlich alle Befehle so wie in AWL eingegeben, außer die Calls, da es eben dafür keinen direkten MC7 Befehl gibt...
    ja, ja... kannste jetz wieder zurück in deinen entwicklungskeller gehen?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    PN/DP (29.06.2010)

  10. #28
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    ja, ja... kannste jetz wieder zurück in deinen entwicklungskeller gehen?
    Ne, bin leider im OG, da Ich mein EG zur Zeit renoviere... Und da ist's grad verdammt warm... Also wird die Entwicklung wohl etwas stocken...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  11. #29
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ne, bin leider im OG, da Ich mein EG zur Zeit renoviere... Und da ist's grad verdammt warm... Also wird die Entwicklung wohl etwas stocken...
    Hast Du da jetzt Langeweile und mußt User mit halbverstandenen technischen Details verunsichern?

    Im übrigen ist es in jeder Programmiersprache so, daß temporäre Variablen und Übergabeparameter auf dem Stack vor
    einer expliziten Zuweisung einen undefinierten Inhalt haben. Das ist keine Spezialität von Step7.

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Was nicht funktioniert sind lesende Zugriffe auf Out Variablen eines FCs, bei dem ein DB oder DI Datenwort an der OutVariable benutzt wird, wenn die Out Variable vor dem ersten lesen nicht beschrieben wird!
    Das ist nicht auf DB oder DI beschränkt und hat auch nichts damit zu tun, ob man die voll-qualifizierte Schreibweise
    für den DB-Aktualparameter benutzt oder die Kurzform ohne Angabe des DB. Egal welcher Aktualparameter (D,L,M) an der
    OutVariable (von einfachem Datentyp) dran ist, das Lesen (in- oder außerhalb des FC) ohne vorherige Zuweisung (im FC)
    ist zwar möglich, ergibt aber immer zufälligen bzw. undefinierten Mist.

    Ausnahme: Übergabe von Datentypen, die mehr als 4 Byte groß sind und Pointer.
    Da ist es völlig egal, ob die als IN, OUT oder IN_OUT übergeben werden, die Übergabeparameter können nach Herzenslust
    gelesen und beschrieben werden.

    Gruß
    Harald

  12. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    vierlagig (29.06.2010)

  13. #30
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Hast Du da jetzt Langeweile und mußt User mit halbverstandenen technischen Details verunsichern?

    Im übrigen ist es in jeder Programmiersprache so, daß temporäre Variablen und Übergabeparameter auf dem Stack vor
    einer expliziten Zuweisung einen undefinierten Inhalt haben. Das ist keine Spezialität von Step7.


    Das ist nicht auf DB oder DI beschränkt und hat auch nichts damit zu tun, ob man die voll-qualifizierte Schreibweise
    für den DB-Aktualparameter benutzt oder die Kurzform ohne Angabe des DB. Egal welcher Aktualparameter (D,L,M) an der
    OutVariable (von einfachem Datentyp) dran ist, das Lesen (in- oder außerhalb des FC) ohne vorherige Zuweisung (im FC)
    ist zwar möglich, ergibt aber immer zufälligen bzw. undefinierten Mist.

    Ausnahme: Übergabe von Datentypen, die mehr als 4 Byte groß sind und Pointer.
    Da ist es völlig egal, ob die als IN, OUT oder IN_OUT übergeben werden, die Übergabeparameter können nach Herzenslust
    gelesen und beschrieben werden.

    Gruß
    Harald

    Nee würd Ich so nicht behaupten. Du kannst ja mal eine Out Variable in einem FC definieren und deren wert lesen. Das Funktioniert. Es ist natürlich nicht schön, aber es geht!

    Es ist ja so das der Compiler den gleichen Code aus dem FC Aufruf macht, ob ein Parameter IN, OUT oder IN_OUT ist, es wird nur was anderes erzeugt wenn der Parameter vorher in Lokaldaten umgespeichert werden muss (Beispiel DBxx.DBWyy).
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. [WinCCflexibel] Variabeln in Ordner
    Von rostiger Nagel im Forum HMI
    Antworten: 21
    Letzter Beitrag: 14.04.2011, 19:16
  2. flanken mit temp variabeln
    Von iPDI im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 12.07.2010, 09:20
  3. Problem mit PERSISTENT-Variabeln
    Von CoDeSys123456 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 27.03.2010, 23:57
  4. Variabeln rangieren WinCC V6.2
    Von Chaos0815 im Forum HMI
    Antworten: 12
    Letzter Beitrag: 06.01.2010, 09:27
  5. Unbenutzte Variabeln suchen
    Von Reto im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.01.2007, 13:04

Lesezeichen

Berechtigungen

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