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

Ergebnis 1 bis 6 von 6

Thema: FM350-2 Zwei Werte miteinander vergleichen

  1. #1
    Registriert seit
    05.02.2016
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    wir möchten einen Zählerstand mit einem von uns vorgegebenen Wert vergleichen. Die Baugruppe zählt und schreibt den aktuellen Zählwert in ACT_CNTV0. Jetzt möchten wir, dass wir einen Zählstand vorgeben und beim erreichen des Zählstandes der Ausgang Q0 gesetzt wird.

    Unser Zählstand wird wie folgt gezählt:

    Code:
          CALL  CNT2RDPN , "CNT2RDPN_DB"
             DB_NO    :=60
             RET_VALU :=#merker1
          NOP 0
          L     100
          T     "DB_Zaehler".JOB_RD.NO
    Jetzt möchten wir unseren zu erreichenden Zählstand eingeben.

    Code:
          U     "DB_Zaehler".JOB_WR.BUSY
          U     "Tag_11"
          SPB   no2
          L     1000
          T     %DBD116
          L     32
          T     "DB_Zaehler".JOB_WR.NO
          CALL  CNT2WRPN , "CNT2WRPN_DB_2"
             DB_NO    :=60
             RET_VALU :=#merker4
    
    no2:  NOP 0
    In CMP_VAL0 steht nun auch der Wert 1000.

    Nun wissen wir nicht, wie wir den Ausgang setzen wenn unser Zähler den Wert 1000 erreicht. Den Ausgang haben wir bereits freigegeben.

    Wir möchten nicht die Parametriermaske nutzen sondern unsere Vergleichswerte immer flexibel ändern können.

    Vielen Dank für eure Hilfe!
    Geändert von JanM (05.02.2016 um 11:31 Uhr)
    Zitieren Zitieren FM350-2 Zwei Werte miteinander vergleichen  

  2. #2
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.335
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    Verbal beschrieben, Zählerstand laden und mit Vergleichswert auf "gleich oder größer" vergleichen, damit dann den Ausgang setzen ...
    Oder verstehe ich da etwas falsch?

    „Eine Frage raubt mir den Verstand bin ich verrückt oder sind es die Anderen ?“

    Albert Einstein

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.177
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Zählerstände im OB1 vergleichen und Ausgang schalten kann u.U. zu langsam sein.
    Ich vermute, die Zähler-Hardware soll selber direkt den Dosier(?)-Ausgang schalten. Dafür kann man die Zählerkanäle zur Laufzeit parametrieren und Starten.
    Welche Jobs man benutzen muß und Beispielprogramme sind im FM350-2-Handbuch zu finden.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Registriert seit
    26.01.2008
    Ort
    Weida
    Beiträge
    127
    Danke
    58
    Erhielt 47 Danke für 36 Beiträge

    Standard

    Hallo JanM,

    es sind drei Schritte nötig.

    1. Das schaltverhalten des Ausganges DQ0 in der HW-Konfig der FM parametrisieren.

    2. Den Vergleichswert in den Kanal DB schreiben. L 1000 T DB17.DBD18 (Bei mir DB17)

    3. Mit den Baustein "CNT_CTRL" das schreiben des Vergleichswert starten. (hier über M30.1)

    Im Bild 3 wird bei mir noch der Aktualwert mit M30.0 auf 0 gesetzt.

    Liegt nun der Istwert innerhalb des Vergleichswert (siehe Bild 1) wird der Ausgang Ein geschaltet.

    Über "STS_CMP1" des DB kann man den Status abfragen.

    FM350-2.jpg FM350-2-2.jpg FM350-2-3.jpg

    mfg Harald

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.177
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Zitat Zitat von JanM Beitrag anzeigen
    Nun wissen wir nicht, wie wir den Ausgang setzen wenn unser Zähler den Wert 1000 erreicht.
    Das Verhalten der Digitalausgänge wird in der Parametriermaske in HW Konfig festgelegt (z.B. (x) Einschalten bei Zählerstand >= Vergleichswert) und kann nicht im Programm geändert werden. Den Vergleichswert kann man aber zur Laufzeit umparametrieren. Dein Code mit dem Job 32 und CNT2WRPN sieht eigentlich gut aus.

    Detaillierte Beschreibung findest Du im Gerätehandbuch
    8.4 Einmalig Zählen
    8.10 Einstellung: Verhalten der Digitalausgänge

    Vielleicht hilft Dir das im Handbuch beschriebene Beispielprogramm in der TIA-Version:
    Programmbeispiel FM 350-2 zXX34_01_FM350-2 für TIA Portal

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.177
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von JanM Beitrag anzeigen
    Code:
          U     "DB_Zaehler".JOB_WR.BUSY
          U     "Tag_11"
          SPB   no2
          L     1000
          T     %DBD116                 <----- schreibe besser voll qualifiziert "DB_Zaehler".CMP_VAL0
          L     32                      <----- muß 30 für CMP_VAL0 sein
          T     "DB_Zaehler".JOB_WR.NO
          CALL  CNT2WRPN , "CNT2WRPN_DB_2"
             DB_NO    :=60
             RET_VALU :=#merker4
    
    no2:  NOP 0
    In CMP_VAL0 steht nun auch der Wert 1000.
    Die 32 - ist das ein Tippfehler? Du arbeitest mit Zählerkanal CH0, zum setzen von CMP_VAL0 muß die JOB_WR.NO 30 benutzt werden.


    Das Auslesen aller 8 Kanäle der FM350-2 mache ich so:
    Code:
    //*** Invoke control function for counter module FM350-2 ***
    //assign module addresses
          L     W#16#130                    //E 304 module address
          T     "DB_FM350-2(1)".MOD_ADR
    
    //assign the number of the counter-channel-DB for CNT2-FCs
          L     5                           //DB5 "DB_FM350-2(1)"
          T     #CNT2_DB
    
          AUF   "DB_FM350-2(1)"             //for reference list
    
          CALL  "CNT2_CTR"
           DB_NO:=#CNT2_DB
    
    
    //*** Open SW-gates and signalize the module state at module-LED DQ7 ***
    
          ...
          =     "DB_FM350-2(1)".CONTROL_SIGNALS.SW_GATE0
          ...
    
          U     "DB_FM350-2(1)".CHECKBACK_SIGNALS.PARA    //FM350-2 parameters assigned?
          =     "DB_FM350-2(1)".CONTROL_SIGNALS.CTRL_DQ7
    
          U     "AS_Clock_1Hz"
          ON    "DB_FM350-2(1)".CHECKBACK_SIGNALS.STS_TFB
          =     "DB_FM350-2(1)".CONTROL_SIGNALS.SET_DQ7
    
    
    //*** Read count/measurement values from FM350-2 ***
          U     "DB_FM350-2(1)".CHECKBACK_SIGNALS.PARA    //FM350-2 ist fertig mit Startup?
          SAVE                              //Set BIE
          SPBN  END                         //No, process no application
    
    //read-job active?
          L     "DB_FM350-2(1)".JOB_RD.NO   // 0 indicates: no active read-job
          PUSH
          OW
          O     <>0
          O     "DB_FM350-2(1)".JOB_RD.BUSY // read-job active? 
          SPB   RDDO                        // Yes, process the job
    
    //trigger a new read job
    //If PG-testmode is active (STS_TFB=TRUE), then only read the count values every 100 ms,
    //if PG-testmode is not active, then read so fast as possible.
          U     "AS_Clock_10Hz"
          FP    #RD_Trig_FPM
          ON    "DB_FM350-2(1)".CHECKBACK_SIGNALS.STS_TFB
          SPBN  RDEN                        //No new reading job
    
          L     100                         //job_no 100 for count channel 0 to 3
          U     #Job_Sel                    //now count channel 4 to 7?
          SPBN  JOB
          L     101                         //job_no 101 for count channel 4 to 7
    JOB:  T     "DB_FM350-2(1)".JOB_RD.NO
    
    //Load counter values from FM350-2
    RDDO: CALL  "CNT2_RD"
           DB_NO  :=#CNT2_DB
           RET_VAL:=#RD_RETVAL
    
    RDEN: UN    BIE                         //Error: job_no unknown or RD_RETVAL with error
          =     #RD_ERROR
    
          U     "DB_FM350-2(1)".JOB_RD.DONE
          SPBN  RDDE
          R     "DB_FM350-2(1)".JOB_RD.DONE
    
          L     #RD_RETVAL
          T     #RD_RETVAL_SAV
    
          UN    #Job_Sel                    //change to the other channels (0-3 <-> 4-7)
          =     #Job_Sel
    
    RDDE: L     #RD_RETVAL_SAV              //für Beobachten
    END:  SET
    Braucht man einen Zählerstand in jedem OB1-Zyklus, dann kann man PEW/PED ab Baugruppenadresse + 8 lesen (werden alle 2 ms aktualisiert). Siehe Handbuch S.51 Direktzugriffe

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. 2 Datenbausteine miteinander vergleichen
    Von SPS-Fuchs im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 10.12.2015, 08:44
  2. TIA Zeiten miteinander vergleichen
    Von kuti im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 22.09.2013, 19:44
  3. UDTs miteinander vergleichen
    Von Freakazoid im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 25.03.2011, 10:08
  4. 3 Char miteinander vergleichen
    Von MK_Auto im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 13.11.2010, 09:42
  5. Zwei S5 sollen miteinander Kommunizieren
    Von Ram-Brand im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 31.08.2009, 17:04

Lesezeichen

Berechtigungen

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