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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: kann ich dass so machen?

  1. #1
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin moin,

    ich hoffe mit diesr Frage nicht wieder einen "Threadtsunami" auszulösen aber ich hätte gern mal eine grundsätzliche Einschätzung...

    Viele kenne ja bereits das Prog. oder Grundgerüst aus den vorhergegangenen Threads. Ich habe es auf Grund div. Anregungen und um es für mich übersichtlicher zu machen etwas umgebaut.

    Kann ich das eigenlich mit RS Gliedern schreiben oder ist auch davon mal wieder abzuraten?

    Danke vorab...

    Code:
    (*    Initialisierung      *)
    
    RS_Start(SET:= xStart_wab , RESET1:=xStop_wab );
    RS_Init(SET:= nLevel_t1<nLevel_t1_min AND nLevel_t2<nLevel_t2_min , RESET1:=F_TRIG_Start.Q );
    xStartVorgang:= RS_Init.Q1;
    
    (*    Startvorgang        *)
    
    IF RS_Start.Q1 AND RS_Init.Q1 AND xStop_wab=FALSE THEN
    
        RS_P1_Start(SET:=nLevel_t1<(nLevel_t1_max-100) , RESET1:=nLevel_t1>nLevel_t1_max );            (* P1     | T1 auffüllen                *)
        xP1:= RS_P1_Start.Q1;
    
        RS_GWP_Start(SET:=nLevel_t1>(nLevel_t1_min+400) , RESET1:=nLevel_t1>nLevel_t1_max );        (* GWP     | T1 auffüllen                *)
        xGWP:= RS_GWP_Start.Q1;
    
        TOF_StaFilt(IN:=nLevel_t1>nLevel_Filt_Start , PT:=tStartDauer , Q=> , ET=> );                (* Filt    | Start Filtrierungszyklus     *)
        xFilt:= TOF_StaFilt.Q;
    
        RS_P4_Start(SET:=nLevel_t2>nLevel_StaP4 , RESET1:=RS_Start.Q1=FALSE AND RS_Init.Q1=FALSE );    (* P4    | Start P4                     *)
        xP4:= RS_P4_Start.Q1;
    
        RS_MV2_Start(SET:=nLevel_t2>(nLevel_t1+100) , RESET1:=nLevel_t2>nLevel_t2 );                (* MV2    | Start Magnetventiel 2        *)
        xMV2:= RS_MV2_Start.Q1;
    
        F_TRIG_Start(CLK:=TOF_StaFilt.Q , Q=> );                                                    (* Rücksetzen Startvorgang          *)
    
    ELSE
    
        xStop_wab:= TRUE
    
    END_IF
    
    (*    Betrieb        *)
    
    IF RS_Start.Q1 AND RS_Init.Q1=FALSE AND xStop_wab=FALSE THEN
    
        RS_P4_Betrieb(SET:=nLevel_t2>(nLevel_t2_min+100) , RESET1:=nLevel_t2>nLevel_t2_min );        (* P4    | Start P4                     *)
        xP4:= RS_P4_Betrieb.Q1;
    
        RS_P1_Betrieb(SET:=nLevel_t1<1200 , RESET1:=nLevel_t1>nLevel_t1_max );                        (* P1     | T1 auffüllen                *)
        xP1:= RS_P1_Betrieb.Q1;
    
        RS_GWP_Betrieb(SET:=nLevel_t1>1500 , RESET1:=nLevel_t1>nLevel_t1_max );                        (* GWP     | T1 auffüllen                *)
        xGWP:= RS_GWP_Betrieb.Q1;
    
        RS_Filt(SET:=nLevel_t2<(nLevel_t2_min+100) , RESET1:=nLevel_t2>nLevel_t2_max OR nLevel_t1<nLevel_t1_min );    (* ZwischenFiltrierung         *)
        xFilt:= RS_Filt.Q1;
    
    ELSE
    
        xStop_wab:= TRUE
    
    END_IF
    Zitieren Zitieren kann ich dass so machen?  

  2. #2
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Da Du keine Funktionsbeschreibung der Anlage veröffentlicht hast, nehme ich an, dass Deine Frage mehr auf den Stil als auf die Funktion abzielt. Da wird es wohl wieder sehr verschiedene Meinungen geben.

    Ich selbst verwende in ST keine RS-Bausteine. Es ist nun mal eine textbasierte Sprache und ich halte etwas wie dieses
    Code:
    IF Stop
    THEN
    ELSIF Start
    THEN
    END_IF
    für besser lesbar. Aber das ist Geschmackssache.
    Was ich gar nicht gut finde, sind die immer noch vorhandenen bedingten Aufrufe von FB's aus der Standardbibliothek wie TOF oder F_TRIG. Diese FB's sind dafür gemacht, in jedem Programmzyklus aufgerufen zu werden. Bei bedingtem Aufruf können sie ein anderes Verhalten zeigen. Selbst ein bewusstes Ausnutzen dieses Umstandes halte ich für schlechten Stil.

    Und bevor ich es vergesse: Du hast nach wie vor getrennte Merker für "Init" und "Start". Warum? Die sollen doch niemals beide True sein, oder sehe ich das nicht richtig?

  3. #3
    xinix ist offline Benutzer
    Themenstarter
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Da Du keine Funktionsbeschreibung der Anlage veröffentlicht hast, nehme ich an, dass Deine Frage mehr auf den Stil als auf die Funktion abzielt.
    Ja genau! nur um eine Meinung zu erfahren ob ich mal wider total auf dem Holzwege bin, wie es ja nun wieder scheint...

    Was ich gar nicht gut finde, sind die immer noch vorhandenen bedingten Aufrufe von FB's aus der Standardbibliothek wie TOF oder F_TRIG. Diese FB's sind dafür gemacht, in jedem Programmzyklus aufgerufen zu werden. Bei bedingtem Aufruf können sie ein anderes Verhalten zeigen. Selbst ein bewusstes Ausnutzen dieses Umstandes halte ich für schlechten Stil.
    Ich weiß jetzt nicht so ganz was Du mit bedingtem Aufruf meinst.

    Du hast nach wie vor getrennte Merker für "Init" und "Start". Warum? Die sollen doch niemals beide True sein, oder sehe ich das nicht richtig?
    Die sollen sogar biede TRUE sein. In RS_Start will ich die Ganze Anlage mit einer Art Start und Stop "TASTER" bedienen. In RS_Ini regle ich den Start oder Betriebszustand...

    Meine Hauptfrage ist immer noch: Wie schupse ich eine Startsequenz an, die auf Grund eines momentanen Zustands der Füllstände ermittelt wird. Diese soll dann aber für z.B. 60min laufen. Dabei ist zu beachten, dass die Füllstande schnell den Zustand annehmen die für das anschupsen des Betriebszustandes wären. Dieser soll aber grundlegend erst nach ablauf der Startsequenz beginnen..

    Da wäre ich um ein Beispiel super dankbar...

  4. #4
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Zitat Zitat von xinix Beitrag anzeigen
    Ich weiß jetzt nicht so ganz was Du mit bedingtem Aufruf meinst.
    Ich meine den TOF_StaFilt und den F_TRIG_Start. Die stehen doch hinter einem IF...THEN. Was macht ein Timer, dessen Zeit gerade abläuft, wenn er auf einmal nicht mehr aufgerufen wird? Wird der Zeitablauf unterbrochen oder läuft die Zeit weiter ab? Ich habe es noch nie ausprobiert. Was der Trigger-FB macht, wenn er nach dem Zyklus, in dem sein Ausgang True geworden ist, nicht mehr aufgerufen wird, weiss ich dagegen schon. Der Ausgang bleibt dann True.

    Zitat Zitat von xinix Beitrag anzeigen
    Die sollen sogar biede TRUE sein. In RS_Start will ich die Ganze Anlage mit einer Art Start und Stop "TASTER" bedienen. In RS_Ini regle ich den Start oder Betriebszustand...
    Sorry, das habe ich übersehen. Das war im ersten Programm noch anders.

    Zitat Zitat von xinix Beitrag anzeigen
    Meine Hauptfrage ist immer noch: Wie schupse ich eine Startsequenz an, die auf Grund eines momentanen Zustands der Füllstände ermittelt wird. Diese soll dann aber für z.B. 60min laufen. Dabei ist zu beachten, dass die Füllstande schnell den Zustand annehmen die für das anschupsen des Betriebszustandes wären. Dieser soll aber grundlegend erst nach ablauf der Startsequenz beginnen..
    Warum kannst Du denn nicht nach den 60 Min in den normalen Betriebszustand übergehen?

  5. #5
    xinix ist offline Benutzer
    Themenstarter
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich meine den TOF_StaFilt und den F_TRIG_Start. Die stehen doch hinter einem IF...THEN. Was macht ein Timer, dessen Zeit gerade abläuft, wenn er auf einmal nicht mehr aufgerufen wird?
    1000 Dank für diesen Hinweis!

    Grundsätzlich ist der Einsatz von TOF, TON, F- und R-Trig aber schon legetim oder auch nicht? Wie sehe denn ein Timer alternativ in ST aus?

    Warum kannst Du denn nicht nach den 60 Min in den normalen Betriebszustand übergehen?
    Das möchte ich ja auch! Ich weiß halt nur nicht, welchen weg ich da einschlagen soll...

  6. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Zitat Zitat von xinix Beitrag anzeigen
    Grundsätzlich ist der Einsatz von TOF, TON, F- und R-Trig aber schon legetim oder auch nicht?
    Selbstverständlich.
    Nur ist es von Vorteil, wenn diese Funktionen nicht bedingt aufgerufen werden. Also ein Aufruf nach einer IF-Bedingung kann zu viel Ärger und seltsamen Verhalten führen. Daher die Zeitbausteine unbedingt aufrufen und nur die Ergebnisse in einer IF-Bedingung abfragen

    Gruß
    Dieter

  7. #7
    xinix ist offline Benutzer
    Themenstarter
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von StructuredTrash;323697 aus einem älteren Beitrag
    CASE OF bietet sich für so etwas meistens an. Ich würde allerdings die Werte für die Betriebsarten als Konstanten oder als Enumeration deklarieren. Die Wahrscheinlichkeit, dass durch Flüchtigkeitsfehler undefinierte Werte zustandekommen, wird damit geringer.
    Magst Du mir mal erleutern, was Du mit Werte als Konstante oder als Enumeration deklarieren meinst...

    Danke!

  8. #8
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Daumen hoch

    Zitat Zitat von xinix Beitrag anzeigen
    Magst Du mir mal erleutern, was Du mit Werte als Konstante oder als Enumeration deklarieren meinst...

    Danke!
    Das habe ich bereits, und zwar in Antwort #50 im selben Thread. Dort allerdings nur als Konstanten-Version. Deshalb hier noch mal mit einer Enumeration:
    Code:
    TYPE enBetriebsarten :
    (
       Aus,
       Init,
       Auto
    );
    END_TYPE
    
    VAR
       Betriebsart:enBetriebsarten;
    END_VAR
    
    CASE Betriebsart OF
       Aus:
       Init:
       Auto:
    END_CASE;

  9. #9
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard

    Wunderbarer Code! Als Ergänzung:

    Code:
    TYPE enBetriebsarten :
    (
       Aus,
       Init,
       Auto
    );
    END_TYPE
    
    VAR
       Betriebsart:enBetriebsarten;
      (* Timer wie TON TOF *)
      timerOnButton : TON;
    END_VAR
    
    timerOnButton(...);
    (* Weitere FB *)
    
    CASE Betriebsart OF
       Aus:
         IF timerOnButton.Q THEN 
            ... 
         END_IF;
       Init: 
        
       Auto:
    END_CASE;
    Ich habe immer die FB vor das Case-Konstrukt gestellt, weils sonst unübersichtlich wird. Man kann es natürlich auch anders machen, aber die Gefahr, dass etwas schiefläuft ist gross.

  10. #10
    xinix ist offline Benutzer
    Themenstarter
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Jo, daraus erkenne ich dass ich drei Betriebsarten steuern kann.
    Jetzt muss ich doch nur noch mal nachfragen, wie bekommen ich die Eigenschaft z.B. iTankLevel_T1<iTankLevel_Start auf die Enumeration Init gelegt. Wenn diese dann aktiviert wurde soll diese dann auch noch für 60min aktiv bleiben obwohl iTankLevel_T1 währen dessen schon lange größer als iTankLevel_Start.

    Danke!

Ähnliche Themen

  1. Broadcast-wie kann man das machen/nutzen
    Von Holger Levetzow im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 25.05.2010, 14:00
  2. Antworten: 8
    Letzter Beitrag: 29.12.2008, 14:47
  3. Wer kann mir das machen ??
    Von Tomi200 im Forum Stammtisch
    Antworten: 11
    Letzter Beitrag: 15.07.2008, 22:01
  4. Kann man Beckhoffvisu so öffnen, dass man nicht die PLC öffnet?
    Von Tigerkroete im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 31.12.2007, 11:52
  5. Seriöse Quelle, dass Siemens Marktführer ist.
    Von Tigerkroete im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.09.2006, 20:58

Lesezeichen

Berechtigungen

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