4-20mA Signal 0-20mA Analogeingangskarte

pius
2011-02-23
2011-02-24
  • pius - 2011-02-23

    Schönen Abend ,

    ich hätte wiedereinmal eine Frage an die Forumsgemeinde, und zwar , ich muss bei einer Anlage einen Drucksensor einbinden (Signal 4-20mA , 0-40Bar). Nun kommt mein kleines Problem , die Analogkarte die dort verbaut ist hat aber nur einen Bereich von 0-20 mA(XIOC 4AI-2AO-U1-I1), als SPS ist dort eine XC201-256MB verbaut.

    Weiß wer von euch eine Lösung für das Problem ?

    Vielen Dank !

    Mfg
    P.S

     
  • Rolf-Geisler - 2011-02-23

    Hallo,
    wenn 4 mA gleich 0 bar sind und 20 mA gleich 40 bar, sind 0 mA gleich Minus x bar. So würde ich jedenfalls die Sensorskalierung angehen ...
    Rolf

     
  • mactoolz - 2011-02-23

    Hi,

    ich würde sagen deine Karte hat eine 15Bit Auflösung, das heist

    Dein Eingangskarte hat eine Auflösung von 15 Bit = 32767

    40Bar sind deine maximalen Druckverhältnisse.

    40Bar / 32767 = 0,00122074037903988769188512833033 ich nenne deine Wert dann man X-Bar/dez

    Das bedeutet deine Eingangskarte liefert dir z.B. ein Eingangswort von 16383 * 0,00122074037903988769188512833033 = ca. 19,99999 Bar

    MacToolz

     
  • e-pappy - 2011-02-23

    Hallo!

    Ich würde den Wert, ähnlich wie mactoolz es tut, skalieren!

    Die Eingänge haben lt. Datenblatt eine Auflösung von 14Bit! Sprich Dein Eingangssignal reicht von 0-16384 (0-20mA)
    In der Moeller-Bibliothek sollte es eigentlich eine 2-Pkt-Gleichung geben (Lineare Gleichung).
    Am besten noch limitiert, d.h. der Ausgangswert ist begrenzt!
    Da Dein Drucksensor Dir bei 0bar = 4mA ausgibt und bei 40bar = 20mA soll, musst Du den Eingangswert entsprechend skalieren.

    (16384/20=819,2*4=3276,80)

    Am Baustein schiebst Du am entsprechenden Eingang das Klemmensignal rein und setzt für x1=3276, y1=0, x2=16384, y2=40
    Und das Ausgangssignal musst Du jetzt noch limitieren (LIMIT) mit unterer Grenze=0 und oberer Grenze=40

    Angenommen Dein Klemmensignal liegt unter 3276 (also unter 4mA), dann ist der Ausgang 0 bar
    Bei einem Klemmensignal von 16384 (20mA) zeigt der Ausgang dann 40 bar
    Bei einem Klemmensignal von 10649 (13mA) zeigt der Ausgang dann 25.42 bar

    Hoffe ich konnte helfen, ansonsten nochmal fragen

     
  • mactoolz - 2011-02-23

    Hi,

    ja oder so. Nur ich mache es sehr gerne so das ich das nehme was vom Bus kommt.
    Es geben auch Karten die nicht gerade die ersten Bits mit Daten belgen sondern vielleicht erst ab
    dem 3 Bit bis zum 15 dann muss man schieben.

    Also am besten immer darauf achten was die Karte so auf den Bus legt und vorallem wo und wie meine Daten sind.
    Kann aber auch mal vorkommen dass das erste Byte ein Statusbyte oder Steuerbyte sein könnte.

    MacToolz

     
  • pius - 2011-02-24

    Moin ,

    Vielen Dank erstmals für eure Hilfen , ich habe es jetzt so realisiert wie e-pappy gepostet hat .
    Scheint zu funktionieren.
    Ich habe es wie folgt gemacht ,

             (*========================================================================*)
    (*===== Druck Eintritt  VL          4-20mA = 0........40bar          =====*)
    (*========================================================================*)
    
    
    (*CAL       gmw_druck_vorlauf_im_tal(
    Eingangswert_UINT:=iw_differenz_druck_im_tal_vorlauf ,
    Zyklen_14Bit_UINT:=100  )
    gmw_druck_vorlauf_im_tal.Gewichteter_Mittelwert_UINT*)
    
    CAL     ip2_druck_vorlauf_im_tal(
    X_UINT:=iw_differenz_druck_im_tal_vorlauf ,
    Extrapolieren_unterdruecken_BOOL:=TRUE ,
    X1_UINT:=3276 ,
    X2_UINT:=16384 ,
    Y1_UINT:=0 ,
    Y2_UINT:=4000 ,
    Y_UINT=>pls_ist_differenz_druck_im_tal_vorlauf )
    
    (*========================================================================*)
    (*===== Druck Austritt  RL              4-20mA = 0........40bar     =====*)
    (*========================================================================*)
    
    CAL     gmw_druck_ruecklauf_im_tal(
    Eingangswert_UINT:=iw_differenz_druck_im_tal_ruecklauf ,
    Zyklen_14Bit_UINT:=100  )
    
    
    CAL     ip2_druck_ruecklauf_im_tal(
    X_UINT:=gmw_druck_ruecklauf_im_tal.Gewichteter_Mittelwert_UINT ,
    Extrapolieren_unterdruecken_BOOL:=TRUE ,
    X1_UINT:=3276 ,
    X2_UINT:=16384,
    Y1_UINT:=0 ,
    Y2_UINT:= 4000,
    Y_UINT=> pls_ist_differenz_druck_im_tal_ruecklauf)
    

    Y2_Unint ; wurde von mir auf 4000 skaliert , sodass ich ein paar nachkommastellen habe.

    Nochmals an alle Vielen Dank !

    Was sagt ihr dazu müsste eigentlich so passen , oder ?

    Mfg
    P.S

     
  • Anonymous - 2011-02-24

    Originally created by: jl

    Hallo!

    Ohne Rechnerei:

    In der Biblio Util.lib gibt es den FUB "LIN_TRAFO" der ein Eingangssignal z.B. 4-20 auf einen anderen Bereich umwandelt z.B. 0-16384.
    In deinem Fall werden 2 dieses FUB's benötigt. Der erste berechnet den diditalen Wert von 4 mA.
    Der zweite berechnet dann den Druck.

    LIN_TRAFO1(IN:= 4, IN_MIN:=0 ,IN_MAX:= 20, OUT_MIN:=0 ,OUT_MAX:= 16384,OUT=> , ERROR=> );
    LIN_TRAFO2(IN:= ai1,IN_MIN:=LIN_TRAFO1.OUT ,IN_MAX:= 16384, OUT_MIN:=0 ,OUT_MAX:= 40,OUT=> ,ERROR=> );

     
  • e-pappy - 2011-02-24

    Hallo Pius!

    Ja sollte so funktionieren!
    Hab das in meinem Beispiel nur mit nem real-wert am Ausgang realisiert, sodass ich dort direkt 23.48 stehen habe! Aber mit int und 4000 funktioniert ea natürlich genau so gut!

     
  • pius - 2011-02-24

    He jl,

    Dankefür deinen Tip , funzt auch ganz gut , habe die soeben versucht.

    Danke,Patrick .

    Mfg

     

Log in to post a comment.