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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Analogwert ausgeben TwinCAT

  1. #1
    Registriert seit
    26.07.2005
    Beiträge
    454
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich möchte auf einfachster Weise über TwinCAT PLC einen Analogwert ausgeben, wie unten im Beispiel in Step7.
    Ich möchte also einfach durch setzten eines Bits einen x-beliebigen Wert auf einen Analogausgang schreiben.
    Gibt es für Analogverarbeitung /-ausgabe auch fertige Bausteine in TwinCAT (wie z.B. FC105)?

    Vielen Dank
    Oli
    Press "Play" on Tape
    -------------------------------
    TwinCAT
    Step7
    Barber-Colman MacoDS
    Schneider Momentum SPS
    Wonderware 8.0
    Concept 2.2 SR2
    Vipa
    Allen-Bradley
    Zitieren Zitieren Analogwert ausgeben TwinCAT  

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

    Standard

    Code:
    VAR
      trigger : R_TRIG;
    END_VAR
    
    trigger(CLK:=switch);
    
    IF trigger.Q = TRUE THEN
      analogausgang = analogwert;
    END_IF

  3. #3
    Registriert seit
    09.01.2008
    Beiträge
    85
    Danke
    5
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Hi,
    ich glaube was Du meinst ist ein Skalierungsbaustein. Kannst Dir ganz einfach selber einen schreiben.

    Code:
    FUNCTION_BLOCK Scale
    VAR_INPUT
        X            :INT;    (*Eingelesener Wert der Klemme*)
        X_min        :INT;    (*Startpunkt Offset*)
        X_max        :INT;    (*Endpunkt Offset*)
        Scale_min    :REAL;    (*zu skalierender Wert MIN*)
        Scale_max    :REAL;    (*zu skalierender Wert MAX*)
    END_VAR
    VAR_OUTPUT
        Q            :REAL;    (*skalierter Wert*)
    END_VAR
    VAR
        gain        :REAL;
        offset      :REAL;
    END_VAR
    _________________________________________
    
    gain := (Scale_max - Scale_min) / (X_max - X_min);
    offset := (Scale_max - gain * X_max);
    Q := gain * X + offset;
    Kannst damit sogar einen Offset integrieren.

    Gruß Scrat

  4. #4
    Registriert seit
    17.05.2006
    Beiträge
    32
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    prinizipipiell kann man das so machen, würde aber auf jeden Fall noch eine Division durch Null abfangen: z.B. IF (X_max - X_min) = 0 THEN RETURN
    Weiterhin kann man auch in dem Fall eine Funktion als Baustein verwenden, da alles im selben Zyklus berechnet wird, Q wäre dann der Rückgabewert.

    Gruß Torsten

  5. #5
    olitheis ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.07.2005
    Beiträge
    454
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard

    @Scrat

    Ich habe mal mit einem Beispiel versucht rechnen, komme aber nicht ganz klar.
    Beispiel Messung Zylinderhub 620mm
    Wegaufnehmer Länge 700mm

    X = 0-32767 (Einheiten) -> 0-700mm
    Scale_min = 0 (mm)
    Scale_max = 620 (mm)
    das ist soweit klar, oder?


    zum offset:
    ich gehe mal davon aus, dass der Wegaufnehmer genau in der Mitte montiert wurde. D.h. bei einem Hub von 620mm und einer Wegaufnehmerlänge von 700mm habe ich einen Offset von 40mm, richtig?
    Wäre dann X_min = 0 Einh. und X_max = 1873 Einh.?

    gain:
    ich bin mir nicht ganz sicher, was mit gain gemeint ist?
    wenn ich mit meinen Werten rechne sieht es so aus:

    gain := (Scale_max - Scale_min) / (X_max - X_min)
    620/1873= 0.3310198

    offset := (Scale_max - gain * X_max)
    620 - 0.3310198 * 1873= 1160640 (???)
    das kann ja irgendwie nicht sein.

    Wo habe ich denn hier meinen (Denk-)fehler?

    @ Torsten
    prinizipipiell kann man das so machen, würde aber auf jeden Fall noch eine Division durch Null abfangen: z.B. IF (X_max - X_min) = 0 THEN RETURN
    wozu sollte man das machen?
    Weiterhin kann man auch in dem Fall eine Funktion als Baustein verwenden, da alles im selben Zyklus berechnet wird, Q wäre dann der Rückgabewert.
    was Du hiermit meinst, weiß ich auch nicht genau.

    Vielen Dank
    Oli
    Press "Play" on Tape
    -------------------------------
    TwinCAT
    Step7
    Barber-Colman MacoDS
    Schneider Momentum SPS
    Wonderware 8.0
    Concept 2.2 SR2
    Vipa
    Allen-Bradley

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    [quote=olitheis;160887
    wozu sollte man das machen?

    was Du hiermit meinst, weiß ich auch nicht genau.

    Vielen Dank
    Oli[/quote]

    Damit deine SPS nicht in Stop geht, wenn jemand dortgleiche Werte einträgt (warum auch immer). Dann gibt es eine Division durch 0!

    Es gibt FB und FC, in diesem Falle würde ein FC reichen, der hat genau einen Output und keine statischen lokalen Variablen. und kann überall einfach ohne Instanz aufgerufen werden.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    @olitheis
    Ich denke du denkst zu kompliziert:
    Also Analogeingang 0-10V = 0-32767
    Wegaufnehmer = 0 - 700 mm = 0-10V

    Also schreibst du an Scrats Baustein:
    X_Min = 0
    X_Max = 32767
    Scale_Min = 0
    Scale_Max = 700

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  8. #8
    Registriert seit
    09.01.2008
    Beiträge
    85
    Danke
    5
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Hallo Oli,

    es ist genau so, wie Manuel das geschrieben hat.
    Also schreibst du an Scrats Baustein:
    X_Min = 0
    X_Max = 32767
    Scale_Min = 0
    Scale_Max = 700
    Somit hast du die Skalierung der 0 - 700mm von 0 - 32767.
    Offset und gain, sind sowieso interne Werte des Bausteins und müssen nicht beachtet werden. Für Dich wichtig sind dann eher die Var_Input und Var_Output.


    @Thorsten:
    Ja, das ist eine gute Idee, obwohl die Beckhoff SPS wegen so etwas nicht in Stop geht. Viel gemeiner ist es wenn es Bereichsüberschreitungen gibt.

    Als Funktion kann man das Ganze natürlich auch machen, Das kann jeder machen wie er mag. Mir persönlich gefällt es so etwas besser.

    Gruß Scrat

  9. #9
    olitheis ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.07.2005
    Beiträge
    454
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard

    das heißt also für meinen Fall:

    X_Min = 1872
    X_Max = 30895
    Scale_Min = 0
    Scale_Max = 620

    um den Wegaufnehmer auf die 620mm abzugleichen (?)
    Geändert von olitheis (15.10.2008 um 21:25 Uhr)
    Press "Play" on Tape
    -------------------------------
    TwinCAT
    Step7
    Barber-Colman MacoDS
    Schneider Momentum SPS
    Wonderware 8.0
    Concept 2.2 SR2
    Vipa
    Allen-Bradley

  10. #10
    Registriert seit
    09.01.2008
    Beiträge
    85
    Danke
    5
    Erhielt 13 Danke für 12 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nein, nicht wirklich.

    Du hast einen Analog Eingang, der Dir bei 0-10V eine Auflösung von 15 Bit also 32767 Digits ausgibt.
    Dein Wegaufnehmer hat bei 0-10V eine Auflösung von 0-700mm.

    Also ist deine Skalierung wie gehabt so:
    X_Min = 0
    X_Max = 32767
    Scale_Min = 0
    Scale_Max = 700

    Wenn Du den Wegaufnehmer jetzt nicht direkt am Anfang von dem Zylinder hast, sondern z.B. 40mm vom Anfangspunkt entfernt, kannst Du ja auch erst ab da auflösen, bzw. messen. Das bedeutet ganz einfach, Du rechnest Dir auf deinen Ausgang diesen Offset(nicht der aus dem Baustein) einfach drauf, z.B. so:

    Code:
    rMesswert := Scale.Q + 40;
    oder alternativ:

    Code:
    VAR
    rOffset :BOOL := 40.0;
    END_VAR
    
    ________________________________________
    
    rMesswert : = Scale.Q + rOffset;
    Dann Bist Du variable, und kannst den Wert jeder Zeit einfach ändern. Wenn Du es dann genau einstellen willst, schraube Alles fest (Wegaufnehmer usw.) Ermittel dann Deinen tatsächlichen Weg den Du nachher angezeigt haben willst, z.B. mit dem Messschieber, und ziehe von diesem Wert deinen rMesswert ab (rOffset = 0). Dann hast Du deinen Offset den Du da eintargen musst.
    Ich hoffe das ist so weit verständlich gewesen.

    Gruß Scrat

Ähnliche Themen

  1. Analogwert ausgeben mit Fc106
    Von adi5 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.11.2009, 17:59
  2. Antworten: 24
    Letzter Beitrag: 05.09.2008, 14:01
  3. Analogwert in Impulse ausgeben 4-20mA
    Von Gucky_av im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 01.09.2008, 23:44
  4. RLG_AA2 Analogwert ausgeben FC109
    Von nonguru im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.04.2008, 09:24
  5. Analogwert ausgeben
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 01.07.2004, 22:46

Lesezeichen

Berechtigungen

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