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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: An FB übergebene INT-Variable als Array-Index nutzen

  1. #11
    Registriert seit
    10.05.2005
    Beiträge
    2.005
    Danke
    220
    Erhielt 234 Danke für 205 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Volker


    Anbei der Code für den "Modular PID V5.1" Baustein FB 16 Name "Norm".


    Das Handbuch kannst du dir hier runterladen.

    http://support.automation.siemens.co...16&treeLang=de


    Kapitel 2-77

    Physikalische Normierung.



    ALSO WAS AUS DER PRAXIS


    //***************************************************
    //* Version vom 21.06.2006 getestet
    //***************************************************
    FUNCTION_BLOCK FB16
    TITLE= 'physical norm'
    NAME: NORM
    FAMILY: MODCONT
    AUTHOR: AUT_SCL
    VERSION: '1.0'

    VAR_INPUT
    INV : REAL := 0.0; // input variable
    IN_HVAL : REAL := 100.0; // physical input value high
    OUT_HVAL : REAL := 100.0; // physical output value high
    IN_LVAL : REAL := 0.0; // physical input value low
    OUT_LVAL : REAL := 0.0; // physical output value low
    END_VAR

    VAR_OUTPUT
    OUTV : REAL := 0.0; // output variable
    END_VAR
    BEGIN

    OUTV := ((((OUT_HVAL - OUT_LVAL) *INV ) / (IN_HVAL - IN_LVAL)) + OUT_LVAL) - (((OUT_HVAL - OUT_LVAL) * IN_LVAL) / (IN_HVAL - IN_LVAL));

    END_FUNCTION_BLOCK




    Den AWL-Code kannst du dir selbst erzeugen.

    (Er hat keinen Know-How-Protect wie der Orginale FB )
    (Verwendung NUR für Informationszwecke, Copirigth von der Fa. Siemens ! ! ! )
    (Wie alle Runtimes von Siemens)

    (NUR FUER STUDIENZWECKE ! ! !)


    Ich bin auf deine Lösung gespannt !
    (Vermutlich wir dein Code länger sein als mit SCL ! )


    Karl

  2. #12
    Registriert seit
    24.11.2005
    Ort
    Bielefeld
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es scheint sich in eine ideologische Diskussion zu wenden, nun gut.

    Natürlich kann man das in AWL programmieren.
    Natürlich kann man hier und dort eine Milisekunde einsparen.
    Aber man programmiert ja nicht um sich auf die Schultern zu klopfen sondern um den Kunden zu befriedigen und übersichtlichen und sauberen Code zu erzeugen, den man auch noch in einem Jahr versteht wenn der Kunde das Projekt erweitern möchte.
    Wenn man als "Könner" ineinander verschachtelte UDTs verarbeitet mit Index usw. und am besten noch Datensätze verschiebt kopiert pipapo dann ist man meiner unbedeutenden Meinung nach dammig ineffektiv.
    Mein Grundsatz beim programmieren ist: Datenverarbeitung mit SCL
    den Rest mit den anderen IEC Sprachen.
    Bei Motorensteuerungen hat z.B. SCL nichts zu suchen.

  3. #13
    Registriert seit
    10.05.2005
    Beiträge
    2.005
    Danke
    220
    Erhielt 234 Danke für 205 Beiträge

    Standard

    Hi

    >Mein Grundsatz beim programmieren ist: Datenverarbeitung mit SCL
    >den Rest mit den anderen IEC Sprachen.
    Grundsätzlich stimmt es.


    >Bei Motorensteuerungen hat z.B. SCL nichts zu suchen.
    Was verstehst du unter Motorensteuerung ?

    Schau dir mal die Runtime "Easy Motion Control" an, ist auch in SCL programiert.

    Lagegeregeltes Positionieren mit Software. (Irgendwie was mit Motoren,Drehgeber, Schleppabstandsüberwachung, Handbetrieb .... für
    Motoren und Servo-Achsen)


    Handbuch dazu:

    http://support.automation.siemens.co...23&treeLang=de

    Karl

  4. #14
    Registriert seit
    24.11.2005
    Ort
    Bielefeld
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Da haben wir uns missverstanden, ich meinte natürlich nicht Regeln und Positionieren, das läuft meiner Meinung nach unter Datenverarbeitung.

    ich meinte solche Dinge wie:
    U Motorschutzschalter
    U Reparaturschalter
    U Folgemotor_läuft
    =Freigabe Motor

    Mit freigabe Motor kann dann ein SCL Baustein freigegeben werden der regelt.

    Grosse logische Blöcke sind in KOP/FUP/AWL übersichtlicher.

  5. #15
    Registriert seit
    10.05.2005
    Beiträge
    2.005
    Danke
    220
    Erhielt 234 Danke für 205 Beiträge

    Standard

    Hi MAuksutat

    >Mit freigabe Motor kann dann ein SCL Baustein freigegeben werden der >regelt.
    >Grosse logische Blöcke sind in KOP/FUP/AWL übersichtlicher.

    Da gebe ich dir noch meiner Meinung 100 % recht !





    Karl

  6. #16
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.866
    Danke
    78
    Erhielt 806 Danke für 549 Beiträge

    Reden

    Zitat Zitat von gravieren
    Physikalische Normierung.
    ALSO WAS AUS DER PRAXIS
    (Vermutlich wir dein Code länger sein als mit SCL ! )
    sicher. aber nicht im ag.
    und das die formel in scl einfacher einzugeben ist bestreite ich auch gar nicht.

    der code geht noch. habe schon schlechter übersetzte gesehen.

    hier der compilierte. 42 zeilen. 5 davon überflüssig.
    Code:
          SET   
          SAVE  
          =     L      0.1
          L     #OUT_HVAL
          L     #OUT_LVAL
          -R    
          L     #INV
          *R    
          L     #IN_HVAL
          TAK   
          T     LD     2
          TAK   
          L     #IN_LVAL
          -R    
          L     LD     2
          TAK   
          /R    
          L     #OUT_LVAL
          +R    
          L     #OUT_HVAL
          TAK   
          T     LD     2
          TAK   
          L     #OUT_LVAL
          -R    
          L     #IN_LVAL
          *R    
          L     #IN_HVAL
          TAK   
          T     LD     6
          TAK   
          L     #IN_LVAL
          -R    
          L     LD     6
          TAK   
          /R    
          L     LD     2
          TAK   
          -R    
          T     #OUTV
          SAVE  
          BE
    hier meiner
    Code:
    //OUTV := ((((OUT_HVAL - OUT_LVAL) *INV ) / (IN_HVAL - IN_LVAL)) + OUT_LVAL) - (((OUT_HVAL - OUT_LVAL) * IN_LVAL) / (IN_HVAL - IN_LVAL))
    //24 zeilen
          L     #IN_HVAL
          L     #IN_LVAL
          -R    
          T     #inval
          L     #OUT_HVAL
          L     #OUT_LVAL
          -R    
          T     #outval
          L     #IN_LVAL
          *R    
          L     #inval
          /R    
          T     #puffer1
          L     #outval
          L     #INV
          *R    
          L     #inval
          /R    
          L     #OUT_LVAL
          +R    
          L     #puffer1
          -R    
          T     #OUTV
    NOCH FRAGEN ?
    Geändert von volker (16.07.2006 um 13:28 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  7. #17
    Registriert seit
    10.05.2005
    Beiträge
    2.005
    Danke
    220
    Erhielt 234 Danke für 205 Beiträge

    Standard

    Hi Volker

    Schau dir mal die Baustenlänge im AG an.

    5 Zeilen sind bei SCL scheinbar "immer" überflüssig !


    " SET
    SAVE
    = L 0.1

    SAVE
    BE
    "


    Test doch noch mal unter "gleichen Bediengungen"

    D.g. Code doch mal SCL mit hilfe der Temp-Variablen puffer1, inval, outval.


    Du wirst bemerken, dass die Anzahl der Zeilen in etwa den deines Codes entspricht.



    Ich habe den Code NICHT überprüft, jedoch reduziert sich die Anzahl der Anweisungen AWL-Befehle wie den code beweist.

    Ohne Temp-Variablen ist der Code (bis auf die 5 Zeilen ) identisch.
    (Von der Reihenfolge abgesehen identisch.)
    Bin mir da ziemlich sicher.


    Könntest du das noch testen ?
    (Würde mich stark Interessieren)
    (Nicht, das ich recht haben will, Danke im Voraus).



    Ich habe dutzende Codes (SCL --> AWL) untersucht und nach Optimierungsmöglichkeiten / Optimierungsfehler im Comiler gesucht.



    Bis auf Sprungmarken:
    z.b.

    SPA A7d0 // Könnte mann sich sparen !
    A7d0: L #ER
    T #ErKp


    Keine Optimierungsfunktion gefunden.
    (Zutreffend ab SCL V5.01 und höher)





    Karl

  8. #18
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.866
    Danke
    78
    Erhielt 806 Danke für 549 Beiträge

    Standard

    D.g. Code doch mal SCL mit hilfe der Temp-Variablen puffer1, inval, outval.
    weil ich jetzt selbst wissen wollte.

    Code:
    inval := IN_HVAL - IN_LVAL;
    outval := OUT_HVAL - OUT_LVAL;
    puffer1 := outval * IN_LVAL / inval;
    OUTV := outval * inv / inval + out_lval - puffer1;
    erzeugt absolut den identischen code den ich geschrieben habe. hier hatte der compiler aber auch gar keine andere wahl.

    nun gut. ohne die temps wäre meiner natürlich auch länger geworden.
    aber ich bin halt so intelligent diese zu benutzen.

    Keine Optimierungsfunktion gefunden.
    (Zutreffend ab SCL V5.01 und höher)
    das sagt mir jetzt irgendwie garnichts ?
    Geändert von volker (16.07.2006 um 18:21 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  9. #19
    Registriert seit
    10.05.2005
    Beiträge
    2.005
    Danke
    220
    Erhielt 234 Danke für 205 Beiträge

    Standard

    Hi Volker


    >erzeugt absolut den identischen code den ich geschrieben habe. hier >hatte der compiler aber auch gar keine andere wahl.
    O.K!


    >nun gut. ohne die temps wäre meiner natürlich auch länger geworden.
    Interesant.


    >aber ich bin halt so intelligent diese zu benutzen.
    Will dir nicht zu nahe tretten, ist ein SCL-Compiler.

    Er hört aufs "Wort" und bei dem 2 Code hat er auch auf dich gehört und temps benutzt.


    Ich hatte den Code bereits mit temps als Quell-Code.
    (Siemens macht diesen Baustein auch ohne temps)

    Frage nach Code-Länge und Zykluszeit ?
    Brauchen bestimmte Code mehr Taktzyklen ?



    Zitat:
    Keine Optimierungsfunktion gefunden.
    (Zutreffend ab SCL V5.01 und höher)
    >das sagt mir jetzt irgendwie garnichts ?

    Unglücklich von mir ausgedrückt. Ich meinte, dass der Compiler schon optimierten Code erzeugt, den ich nicht mehr verbessern kann.
    (Bin natürlich nicht der Obercrack aber dennoch)


    (Bis auf 1-2 unsinige/unnötige "SPA-Anweisungen" bei ca. 5 k erzeugten AWL-Code)



    >aber ich bin halt so intelligent diese zu benutzen (temps)
    Optimierung erfolgt wie du bereits sagtest durch "Brain"
    Der Algorythmus bestimmt Geschwindigkeit und Codelänge.



    P.S. Gibt es irgendwo Informationen über die
    Anzahl der Takte für einen bestimmten Befehl.
    (Finde nur Informationen für Step 5)


    Danke Volker für deine Mühe.


    Karl

  10. #20
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.866
    Danke
    78
    Erhielt 806 Danke für 549 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von gravieren
    [>aber ich bin halt so intelligent diese zu benutzen.
    Will dir nicht zu nahe tretten, ist ein SCL-Compiler.
    fasse ich auch so nicht auf.
    vielleicht sollte ich meine meine meinung zu scl nochmal überdenken.

    Er hört aufs "Wort" und bei dem 2 Code hat er auch auf dich gehört und temps benutzt.
    leider.
    wäre doch schön wenn er so intelligent wäre.
    auf der anderen seite könnte sowas evtl auch zu probs führen.

    Ich hatte den Code bereits mit temps als Quell-Code.
    (Siemens macht diesen Baustein auch ohne temps)
    ahh. also zum ärgern.
    imho ist der kostenpflichtig. da ich den noch nie gebraucht habe, hab ich den auch nicht. hat siemens den in scl oder awl geproggt?


    >>Frage nach Code-Länge und Zykluszeit ?
    die codelänge:
    fb16 158
    fb17 128
    fc16 114
    zeit habe ich nicht getestet

    >>Brauchen bestimmte Code mehr Taktzyklen ?
    denke nicht.
    meine mal irgendwo gehört zu haben, dass diverse transferoperation u.u. mehr als einen zyklus dauern. weiss nicht mehr genau... sfc20 evtl. oder irgendwelche send/receive via profibus

    >>P.S. Gibt es irgendwo Informationen über die Anzahl der Takte für einen bestimmten Befehl.
    falls du die ausführungszeit meinst findst du die in der
    operationsliste
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. Index Array
    Von peraho im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.10.2012, 09:16
  2. Array mit index
    Von bluebird277 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 29.08.2011, 11:23
  3. Schieberegister mit Array und Variablem Index
    Von bluebird277 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.03.2011, 12:05
  4. Index aus Array auslesen
    Von heri1980 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.09.2010, 14:54
  5. C-Script aus Index in Variable schreiben
    Von WendeMarkus im Forum HMI
    Antworten: 0
    Letzter Beitrag: 23.08.2010, 05:34

Lesezeichen

Berechtigungen

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