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

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

Thema: Strukturen an Funktionen übergeben

  1. #21
    Registriert seit
    13.02.2012
    Ort
    Münsingen
    Beiträge
    14
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Welche SFC "SCALE" verwendest du? Nach meinem Verständnis müsstes du doch die Funktion "NORM-X" verwenden ???
    Grüßle vo dr Alb ra
    Patrick

    keine Ahnung - und davon jede Menge

  2. #22
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.069
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Vielleicht löscht du noch mal den FC105 (Scale) und ziehst ihn aus der Library in deinen Bausteinordner.
    Zitat Zitat von patx Beitrag anzeigen
    Welche SFC "SCALE" verwendest du? Nach meinem Verständnis müsstes du doch die Funktion "NORM-X" verwenden ???
    So wie ich das lese...
    Zitat Zitat von SPS-EK Beitrag anzeigen
    So habe es weiter eingegrenzt und herausgefunden wann die CPU in Stop springt und zwar wenn ich die High und Low limit werte auf 16220.0 und -2700.0 setze.
    Ist das vermutlich was selbst gebautes... sicher kein FC105 (da HL, LL nicht einstellbar)....

    @TE: Versuch mal dein Problem zu reduzieren...
    Reduzier den Programm mal auf das Minimum was zum Absturz führt. (Vielleicht ist das schon die Analogfunktion alleine)
    Das könntest du ja hier einstellen. Zumindest könntest du den Code der Skalierfunktion zeigen die bei Einstellung 16220.0 / -2700.0 zum CPU-Stop führt....
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  3. #23
    SPS-EK ist offline Benutzer
    Themenstarter
    Registriert seit
    23.10.2015
    Ort
    Hessen
    Beiträge
    49
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    So wie ich das lese...

    Ist das vermutlich was selbst gebautes... sicher kein FC105 (da HL, LL nicht einstellbar)....

    @TE: Versuch mal dein Problem zu reduzieren...
    Reduzier den Programm mal auf das Minimum was zum Absturz führt. (Vielleicht ist das schon die Analogfunktion alleine)
    Das könntest du ja hier einstellen. Zumindest könntest du den Code der Skalierfunktion zeigen die bei Einstellung 16220.0 / -2700.0 zum CPU-Stop führt....
    @ Ronin: Das Problem habe ich schon durch sukzessives ausklammern eingeschränkt.

    @ All: Es liegt an der SCALE-SFC(FC105). Die hat sehr wohl ein HI-LIM und ein LOW-LIM für die Skalierung der Variable, ohne das kann man ja auch nicht skalieren. Die Probleme treten nur bei den zuvor beschriebenen Skalierungswerten auf. Der Code steht auf Seite eins, in der Funktion wird der FC105 gecallt und die Werte entsprechend Übergeben. Ausser einer weiteren Fehlerauswertung wird darin nichts gemacht und daran kann es nicht liegen, da es bei den anderen Analogwertverarbeitungen mit der selben Funktion funktioniert.
    Ich reiche ja den Fehlercode des FC105 durch in mein FB dennoch wird kein Fehler angezeigt sondern die CPU springt in STOP.
    Geändert von SPS-EK (31.08.2016 um 18:57 Uhr)

  4. #24
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    11.872
    Danke
    500
    Erhielt 2.604 Danke für 1.877 Beiträge

    Standard

    Wenn du auf den FC105 gehst und dann "F1" drückst, kommt eine rel. ausführliche Hilfe. Darin ist auch die Formel, nach welcher im FC 105 scaliert wird.
    Das würde ich mal nachprogrammieren (Kann man eh gut gebrauchen, wenn mal "nicht"-Siemens-Analogwerte scaliert werden sollen, z.B. von einer Beckhoff-Klemme).
    Dann sollte es funktionieren oder aber du kommst damit diesem ominösen Fehler auf die Spur.

    PS: Hier mal nachgereicht ein etwas älterer Nachbau des FC105, als Quelle:

    Code:
    FUNCTION FC 105 : VOID
    TITLE =Einlesen Analog Werte
    //Skalierung eines Rohwertes
    //Rohwert einstellbar 0..32000 (INT)
    //Ausgangswert einstellbar 0,0 bis ... (REAL)
    //
    //OUT =  [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
    AUTHOR : x2
    NAME : Analog
    VERSION : 1.1
    
    
    
    
    VAR_INPUT
      IN_EW : WORD ;    //IN
      OG_Rohwert : INT ;    //K2 Oberer Wert Rohwert Eingangswort INT
      UG_Rohwert : INT ;    //K1 Oberer Wert Rohwert Eingangswort INT
      OG_Ausgang : REAL ;    //HI_LIM Oberer Analogausgangswert REAL
      UG_Ausgang : REAL ;    //LO_LIM Unterer Analogausgangswert REAL
    END_VAR
    VAR_OUTPUT
      OUT : REAL ;    //Ergebniss Ausgangswert REAL
    END_VAR
    VAR_TEMP
      OG_Rohwert_REAL : REAL ;    
      UG_Rohwert_REAL : REAL ;    
      K2wenigerK1 : REAL ;    //K2 - K1
      HI_LIM_LO_LIM : REAL ;    //HI LIM - LO LIM
      Zwischen_1 : REAL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Anfang
    
    
    //OUT =  [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
    
    
    NETWORK
    TITLE =Wandelung OG/UG Rohwert in REAL
    
    
          L     #OG_Rohwert; 
          ITD   ; //16bit INT --> 32bit INT
          DTR   ; //32bit INT --> 32 REAL
          T     #OG_Rohwert_REAL; //32bit REAL
    
    
          L     #UG_Rohwert; 
          ITD   ; //16bit INT --> 32bit INT
          DTR   ; //32bit INT --> 32 REAL
          T     #UG_Rohwert_REAL; //32bit REAL
    
    
    NETWORK
    TITLE =UG Rohwert - OG Rohwert, K2-K1
    
    
          L     #OG_Rohwert_REAL; //32bit REAL
          L     #UG_Rohwert_REAL; //32bit REAL
          -R    ; 
          T     #K2wenigerK1; 
    
    
    NETWORK
    TITLE =HI_LIM–LO_LIM
    
    
          L     #OG_Ausgang; 
          L     #UG_Ausgang; 
          -R    ; 
          T     #HI_LIM_LO_LIM; 
    NETWORK
    TITLE =Zwischen 1
    
    
          L     #IN_EW; //Input
          ITD   ; //16bit INT --> 32bit INT
          DTR   ; //32bit INT --> 32 REAL
          L     #UG_Rohwert_REAL; // - K1
          -R    ; 
          L     #K2wenigerK1; // : K2-K1
          /R    ; 
          T     #Zwischen_1; //= ((FLOAT (IN) – K1)/(K2–K1))
    
    
    
    
    NETWORK
    TITLE =OUT
    
    
          L     #Zwischen_1; 
          L     #HI_LIM_LO_LIM; // =  [ #Zwischen_1 * (HI_LIM–LO_LIM)]
          *R    ; 
          L     #UG_Ausgang; //  + LO_LIM
          +R    ; 
          T     #OUT; // =  [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
    
    
    END_FUNCTION
    Geändert von Ralle (31.08.2016 um 19:40 Uhr)
    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

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

    gochtel (05.09.2016)

  6. #25
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.069
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Zitat Zitat von SPS-EK Beitrag anzeigen
    @ All: Es liegt an der SCALE-SFC(FC105).
    Die hat sehr wohl ein HI-LIM und ein LOW-LIM für die Skalierung der Variable, ohne das kann man ja auch nicht skalieren
    Ah sorry, ich dachte dass du mit dem HighLimits/LowLimits (16220.0 und -2700.0) den Skalierbereich auf der Eingangsseite gemeint hast, der ist ja bei FC105 fest auf 0-27648 bzw. +/-27648.
    Du hast aber ganz normal die Skaliergrenzen für den Ausgangswert gemeint... My Bad.

    Zitat Zitat von SPS-EK Beitrag anzeigen
    Die Probleme treten nur bei den zuvor beschriebenen Skalierungswerten auf. Der Code steht auf Seite eins, in der Funktion wird der FC105 gecallt und die Werte entsprechend Übergeben. Ausser einer weiteren Fehlerauswertung wird darin nichts gemacht und daran kann es nicht liegen, da es bei den anderen Analogwertverarbeitungen mit der selben Funktion funktioniert.
    Ich reiche ja den Fehlercode des FC105 durch in mein FB dennoch wird kein Fehler angezeigt sondern die CPU springt in STOP.
    Könntest du das mal als Mini-Projekt hochladen, dann könnte man das eventuell selber auf einer CPU probieren...
    Geändert von RONIN (31.08.2016 um 19:51 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  7. #26
    SPS-EK ist offline Benutzer
    Themenstarter
    Registriert seit
    23.10.2015
    Ort
    Hessen
    Beiträge
    49
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Wenn du auf den FC105 gehst und dann "F1" drückst, kommt eine rel. ausführliche Hilfe. Darin ist auch die Formel, nach welcher im FC 105 scaliert wird.
    Das würde ich mal nachprogrammieren (Kann man eh gut gebrauchen, wenn mal "nicht"-Siemens-Analogwerte scaliert werden sollen, z.B. von einer Beckhoff-Klemme).
    Dann sollte es funktionieren oder aber du kommst damit diesem ominösen Fehler auf die Spur.

    PS: Hier mal nachgereicht ein etwas älterer Nachbau des FC105, als Quelle:

    Code:
    FUNCTION FC 105 : VOID
    TITLE =Einlesen Analog Werte
    //Skalierung eines Rohwertes
    //Rohwert einstellbar 0..32000 (INT)
    //Ausgangswert einstellbar 0,0 bis ... (REAL)
    //
    //OUT =  [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
    AUTHOR : x2
    ...

    Danke Ralle, für den Tipp. Die Formel habe ich dort gefunden.
    Was meinst du mit "nicht Siemens Analogwert"? Zählen darunter auch 4-20mA Geber die nicht von Siemens stammen?
    Wobei mich das wundern würde, wir haben noch nie Probleme mit dem FC105 und egl welchen 4-20mA oder mV Gebern gehabt.


    Zitat Zitat von RONIN Beitrag anzeigen
    Ah sorry, ich dachte dass du mit dem HighLimits/LowLimits (16220.0 und -2700.0) den Skalierbereich auf der Eingangsseite gemeint hast, der ist ja bei FC105 fest auf 0-27648 bzw. +/-27648.
    Du hast aber ganz normal die Skaliergrenzen für den Ausgangswert gemeint... My Bad.


    Könntest du das mal als Mini-Projekt hochladen, dann könnte man das eventuell selber auf einer CPU probieren...
    Genau, komisch ist nur das die Funktion mir den Fehlercode nicht in den FB übergibt sondern direkt auf Stop springt wenn der Wert wie beschrieben oder 32767 ist. Dabei müsste mir die Funktion eigentlich den Fehlercode von Drahtbruch durch geben.

    Das Miniprojekt wird schwierig, da viel in dem FB gemacht wird und das ganze Projekt schon etwas umfangreicher ist.


    @ All: Mittlerweile verursacht nur noch ein Wert Probleme, ich habe noch eine Fehlerhaft Überlagerte Adressierung gehabt Habt ihr noch ein Tipp was es sein könnte?

  8. #27
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    11.872
    Danke
    500
    Erhielt 2.604 Danke für 1.877 Beiträge

    Standard

    Mit "Siemens-Analogwert" meine ich die Siemens-Hardware. Diese gehen im Rohwert von 0-27648, genau mit diesen Werten arbeitet auch der originale FC 105 von Siemens.
    Wenn man z.B.Beckhoff-Karten verwendet, muß man anders skalieren, der Rohwert geht ja nach Karte bis 32000, bzw. die Karte kann auch ganz anders konfigureirt werden.
    Dann kann man mit dem FC105 von Siemens nicht viel anfangen, sondern muß selbst rechnen. Das macht der von mir gepostete FC105.
    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

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

    SPS-EK (12.09.2016)

  10. #28
    SPS-EK ist offline Benutzer
    Themenstarter
    Registriert seit
    23.10.2015
    Ort
    Hessen
    Beiträge
    49
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also ich finde das Problem nicht, wieso bei dem einen Analogwert die CPU auf Stop geht.

    Was mir gerade auffällt ist das Thema "lokale Fehlerbehandlung", diese habe ich für die Analogkonvertierungsfunktion nicht aktiviert sondern gebe nur den Fehlercode von FC105 in den aufrufenden Baustein am Ende zurück.
    Code:
    // END ====================================================================================================================================
    // Return functionvalue
    #analogue_input_converting := #t_av_scale_error_code;
    Könnte es damit zusammenhängen?

    Laut Hilfe wird bei Lesefehler
    "Die Bearbeitung des Programms wird mit dem Ersatzwert "0" fortgesetzt."
    In der Step 7 Pro Programmierleitfaden wird aber geschrieben:
    CPU S7-1500:
    – Bei einem Programmierfehler wechselt die CPU in den Betriebszustand STOP und
    schreibt einen Eintrag in den Diagnosepuffer.
    – Bei einem Peripheriezugriffsfehler bleibt die CPU im Betriebszustand RUN und schreibt
    einen Eintrag in den Diagnosepuffer.
    Geändert von SPS-EK (12.09.2016 um 10:16 Uhr)

  11. #29
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.555
    Danke
    825
    Erhielt 2.825 Danke für 2.274 Beiträge

    Standard

    Zitat Zitat von SPS-EK Beitrag anzeigen
    @ All: Mittlerweile verursacht nur noch ein Wert Probleme, ich habe noch eine Fehlerhaft Überlagerte Adressierung gehabt Habt ihr noch ein Tipp was es sein könnte?
    Zitat Zitat von SPS-EK Beitrag anzeigen
    Also ich finde das Problem nicht, wieso bei dem einen Analogwert die CPU auf Stop geht.
    Vielleicht noch eine weitere "Fehlerhaft Überlagerte Adressierung"?

    Warum genau geht die CPU in STOP? --> siehe Diagnosepuffer der CPU
    Wo genau geht die CPU in STOP? --> siehe Diagnosepuffer der CPU oder ggf. die Fehlerstelle eingrenzen durch stückweises deaktivieren von Code

    Zitat Zitat von SPS-EK Beitrag anzeigen
    Das Miniprojekt wird schwierig, da viel in dem FB gemacht wird und das ganze Projekt schon etwas umfangreicher ist.
    Ist das wirklich so schwer, den Programmcode des einen FB soweit zu reduzieren, daß er vorzeigbar wird? Vielleicht verschwindet ja auch der Fehler beim Reduzieren - dann schau, was Du entfernt hast.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. #30
    SPS-EK ist offline Benutzer
    Themenstarter
    Registriert seit
    23.10.2015
    Ort
    Hessen
    Beiträge
    49
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo PN/DP,

    danke für dein Beitrag.

    Ich habe den Code schon bis zu dem FC-Aufruf auskommentiert und nur noch meine Analogwertumrechnung aktiv gehabt und die CPU geht in Stop.
    Diese Funktion wird mehrmals in dem FB aufgerufen und macht nur bei dem einen Wert ein Fehler. Die Adrsssierung stimmt, habe ich nun auch schon 3 mal geprüft.
    Den Diagnosepuffer kann ich gerade nicht auswerten, wurde aber hier schonmal gepostet.

    Das einzige was mir noch einfällt, ist das es mit der "lokalen Fehlerbehandlung" zu tun haben könnte. Diese habe ich inaktiv.

Ähnliche Themen

  1. Step 7 Vergleichen von Strukturen
    Von Chräshe im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 01.06.2015, 21:04
  2. Step 7 Strukturen ergänzen un verändern
    Von lion1702 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.10.2014, 13:17
  3. Step 7 L P#..... mit Strukturen ?
    Von Waelder im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.05.2013, 11:37
  4. Flexible und Strukturen
    Von Farinin im Forum HMI
    Antworten: 5
    Letzter Beitrag: 02.08.2012, 13:40
  5. Funktionen in Funktionen aufrufen
    Von Baldaro im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 21.06.2009, 16:17

Lesezeichen

Berechtigungen

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