Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Absoluter Anfänger - Hilfe bei AWL und Analoge Werte

2007-06-19
2007-06-19
  • Programier-Hans - 2007-06-19

    Hallo alle,

    ich bin absoluter Anfänger in der SPS-Programmierung und hätte ein paar Fragen.

    1. Ich möchte einen analogen Wert von 0 bis 20mA in 1mA Schritten hochzählen. Zwischen den Schritten soll ca. 0.5s Pause sein. Wie löst man sowas in AWL?

    2. Ich habe mehrere Funktionsblöcke. Jetzt will ich alle Funktionsblöcke verknüpfen und nacheinander ablaufen lassen. Macht man sowas auch in AWL?

    Soll man eigentlich in AWL mit Sprüngen arbeiten oder bleibt nichts anderes übrig? Folgendes habe ich getestet:

    CAL     RS1(SET := Start, RESET1 := Zeit2.Q)
    
    CAL     Zeit1(IN := RS1.Q1, PT := PLC_PRG.TIn)
    
    LD       Zeit1.Q
    
    JMPC           marke
    

    marke:

        LD TRUE
    
        ST Test
    

    Bei mir wird Test immer gleich TRUE und wartet nicht bis Zeit.Q TRUE wird. Warum ist dies so? Wie löst man sowas?

    Kennt ihr ein gutes Buch, in dem sowas beschrieben ist?

    Vielen Dank für die Hilfe.

    Grüße

    Hans

     
  • Ralph Holz - 2007-06-19

    Hallo Programier_Hans,

    das ist mal ein nettes Pseudonym! In AWL kommt man bei bedingten Zuweisungen nicht um Sprünge oder Bausteinaufrufe herum. Was ich allerdings nicht verstehe ist die Verwendung von dem RS Funbktionsbaustein dafür gibts in AWL (auch KOP, FUP und CFC) die Operatoren S und R man spart sich damit das instanzieren der RS Bausteine.

    So jetzt zu meinem AWL Ansatz für Dein Problem

    ```

    CAL Zeit1(IN:= NOT(Zeit1.Q),PT:= T#0.5s)
    LD Zeit1.q
    JMPCN dorthin
    ( hier dann hochzählen)
    dorthin:

    ```

    Für den Zeitwert kannst Du natürlich auch eine Variable nehmen.

    Gruß

    Ralph

     
  • Programier-Hans - 2007-06-19

    Hallo,

    warum schreibt man dann nicht:

    CAL Zeit1(IN:= NOT(Zeit1.Q),PT:= T#0.5s)

    LD Zeit1.q

    JMPC dorthin

    dorthin:

    Zähle um 1 hoch

    Also immer wenn die 0.5s erreicht sind wird Zeit1.Q TRUE und springt deshalb zur Marke dorthin?

     
  • Ralph Holz - 2007-06-19

    Kann man schon machts aber vom Aufbau unübersichtlicher und kompliziert wenn man sowas mehrfach in einer POU hat.

    LD Bedingung1
    JMPC dorthin1
        Hier was tun wenn Bedingung nicht erfüllt
    JMP dorthin2 (* Unbedingter Sprung damit die nächsten Zeilen nicht ausgeführt werden*) 
    dorthin1:
        Hier was tun
    dorthin2:
    

    Ich glaube nicht das das am Ende übersichtlicher wird.

    Gruß

    Ralph

     

Log in to post a comment.