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

Ergebnis 1 bis 10 von 10

Thema: IF-Anweisung in CFC

  1. #1
    Registriert seit
    07.07.2011
    Ort
    Schrobenhausen/Schiefling
    Beiträge
    228
    Danke
    36
    Erhielt 29 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hi all,
    ich möchte Statusmeldungen meiner rollosteuerung, die in byte vorliegen, in der visu als string ausgeben.
    dazu habe ich eine string-variablenliste mit den texten definiert.
    jetzt brauche ich z.b. eine if-then konstuktion. wie macht man das in cfc?
    der baustein if und then hat jeweils nur einen ausgang...
    wie muß ich den vergleich machen?
    inhaltlich etwa so:
    if bstatus=100, then move s100 to sstatus
    aber jetzt in cfc???
    dank+gruß
    Zitieren Zitieren IF-Anweisung in CFC  

  2. #2
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Ich arbeite eigentlich garnicht mit CFC...
    Aber auch dem Bauch heraus würde ich sagen, dass du für jeden Vergleich einen "=" Block brauchst und einen "MOVE" Baustein mit "EN" Pin.
    Das Ergebnis deines "=" Vergleichs legst du auf den "EN" Pin.
    Dann sollte der MOVE Befehl nur ausgeführt werden, wenn das Vergleichsergebnis true ist.

    Code:
    bstatus -
               =            MOVE
    100     -     - ------- -EN  
    
                       s100 -     - sstatus
    In ST wäre das Ganze natürlich sehr viel einfacher mit einem Array zu lösen .......

  3. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    tomrey (21.01.2013)

  4. #3
    tomrey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.07.2011
    Ort
    Schrobenhausen/Schiefling
    Beiträge
    228
    Danke
    36
    Erhielt 29 Danke für 22 Beiträge

    Standard

    Danke, hab's wie folgt hinbekommen:
    ScreenShot001.jpg
    aber da gibt es doch sicher ne elegantere Lösung (Tabellen o.ä) zumal in dieser Form die Wartung recht aufwändig ist.
    Wie würdest du das mit array machen (hab damit noch keine Erfahrung...)
    Dank+Gruß

  5. #4
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Code:
    Var
       Meldungen : Array[1..100] of String(80);
       Status : String(80);
       Index : Int;
    end_var
    
    Meldung[1] := 'bli';
    Meldung[2] := 'bla';
    Meldung[3] := 'blub';
    ....
    
    Status := Meldungen[Index];
    Das füllen des Arrays mit Text evtl. in eine Aktion auslagern und diese nur einmal im ersten Zyklus ausführen.
    Alternativ kann das Array auch im Deklarationsteil mit den Werten initialisiert werden. Aber wenn du viele Meldungen hast wird es dann schwer immer den richtigen Index zu treffen.

    PS
    bStatus ist ein etwas unglücklicher Name für eine Byte Variable. Normalerweise ist b in der Notation ein Bool. Hatte mich da schon etwas gewundert.
    Ich nehme z.B. immer n für alle natürlichen Zahlen und f für Gleitkomma. Aber das ist ja jedem selbst überlassen

  6. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    tomrey (22.01.2013)

  7. #5
    tomrey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.07.2011
    Ort
    Schrobenhausen/Schiefling
    Beiträge
    228
    Danke
    36
    Erhielt 29 Danke für 22 Beiträge

    Standard

    Danke, das Anlegen hab ich damit, jetzt fehlt mir noch der Zugriff, also:
    meine wenn-Bedingung, dann move WAS (array-Pos durchsuchen) nach sStatus.

    Meine Bezeichner hab ich von Wago und Oscat. Da beginnen die bools mit x, bytes mit b und strings mit s.
    Ich bin erst seit Herbst am Thema dran und habs jetzt so verinnerlicht. Kommst du gf. aus der Siemens-Welt? Da soll ja vieles anders sein..?
    Schönen Gruß

  8. #6
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Du kannst ein Array mit den Texten anlegen und dann nimmst du einfach nen MOVE-Block und an dessen Eingang schreibst du arrMeldetexte[Meldenummer].

    In deinem Beispiel, wo diese offenbar bei 130 anfangen für die 1. Meldung könnte man auch schreiben arrMeldetexte[bStatus-130], sofern das Array als ARRAY[0..MAXMESSAGES] definiert wurde. Das geht in jeder Programmiersprache.
    "Always code as if the guy, who ends up maintaining your code, is a violent psychopath who knows, where you live."
    -------------------------------------------------------------------------------------------------------------------------------------------------------
    Youtube-Channel

  9. #7
    tomrey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.07.2011
    Ort
    Schrobenhausen/Schiefling
    Beiträge
    228
    Danke
    36
    Erhielt 29 Danke für 22 Beiträge

    Standard

    Danke, das hab ich schon so verstanden, mein Problem ist aber, dass die Texte zu fest definierten Fehlercodes gehören.
    Im Array ist aber ein fortlaufender Index..?

  10. #8
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Dein Fehlercode ist doch ein Byte, oder? Da reicht dann ein Array[0..255]. An die entsprechenden stellen schreibst du dann deine Meldung rein.
    z.B. für Fehlercode 55 wird dann im Array[55] der String abgelegt.

    Blöd wird das nur wenn du viele Lücken hast. Da wird dann halt Speicherplatz verschwendet.

    Du kannst aber auch ein 2 dimensionales Array anlegen. Quasi ein Wörterbuch. Eine Spalte enthält dann die Codes und die 2te die zugehörigen Meldungs-Strings.
    Das ganze ratterst du dann in einer Schleife durch. Wieder sehr einfach in ST aber ich glaube in CFC nur umständlich über Sprungmarken zu lösen....
    (Warum wolltest du es nochmal unbedingt in CFC lösen ? )

    Brauchst du das ganze für eine Visu? Wenn ja, welche verwendest du und kann die keine Melde/Alarmlisten?

  11. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    tomrey (22.01.2013)

  12. #9
    tomrey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.07.2011
    Ort
    Schrobenhausen/Schiefling
    Beiträge
    228
    Danke
    36
    Erhielt 29 Danke für 22 Beiträge

    Standard

    Danke, ja es sind viele Lücken..
    Also entweder 2-dim oder Melde/Alarmlisten
    Ich verwende die in Wago/Codesys eingebaute Visu.
    Da gibt es schon eine zentrale "Alarmkonfiguration" aber die "war noch nicht dran"
    Das ist dann wohl der entscheidende Anstoss mich damit zu beschäftigen.
    CFC weil ich sonst nichts kann...
    Gruß

  13. #10
    tomrey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.07.2011
    Ort
    Schrobenhausen/Schiefling
    Beiträge
    228
    Danke
    36
    Erhielt 29 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab mich mit der eingebauten Alarmkonfiguration beschäftigt aber das passt wohl nicht zu meiner Anforderung.
    In der zentralen Alarmkonf. müssen die Fehler-/Meldebedingungen definiert werden und ich habe diese im Programm bzw. den FBs.
    Erscheint mir so übersichtlicher/näher am Thema.
    Also bleibt das 2-dim Array. Wie ginge das in ST?
    Ich glaube, man kann auch ST in CFC einbinden...
    Gruß

Ähnliche Themen

  1. Anweisung AWL
    Von blurry333 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.02.2011, 20:38
  2. Anweisung ?
    Von Xaverl im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 06.01.2010, 14:29
  3. S5 Anweisung: B BS61
    Von SPSTorsten im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.11.2008, 11:46
  4. Antworten: 3
    Letzter Beitrag: 11.09.2007, 20:38
  5. AWL Anweisung
    Von mav im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 10.09.2007, 08:14

Lesezeichen

Berechtigungen

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