TIA Impuse von AI Wert, alle 100cm

Steve38

Level-1
Beiträge
486
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe an einem Analogen Eingang einen Messwertverstärker hängen, diese liefert mir ein Signal 0-100cm, ich möchte alle 10cm (über eine Variable einstellbar) einen Impulse für 500ms raus geben.
Habe versucht das ganze mit S/R Glieder zu machen und alle 10cm einn Baustein gesetzt, aber nur mit mäßigem Erfolg.

Könntet ihr mir bitte weiterhelfen?
 
Beispiel so:
Code:
TP_inz(IN := Messwert / 10 <> Messwert_alt / 10, 
       PT := t#500ms);


Pulsausgang := TP_inz.q;
Messwert_alt := Messwert;

edit zusammengefasst
 
Zuletzt bearbeitet:
IN etwas so. Müsste man nach FUP wandeln können. Sehr umständlich und igitt.
Verstehst du was hier gemacht wird?

Code:
      U(    
      U(    
      L     #akt_messw
      L     #alt_messw
      <>I   
      )     
      =     L      4.0
      BLD   103
      U(    
      U(    
      L     #messwert
      L     1
      /I    
      T     #akt_messw
      UN    OV
      SAVE  
      CLR   
      U     BIE
      )     
      SPBNB _001
      L     #messwert_alt
      L     10
      /I    
      T     #alt_messw
      UN    OV
      SAVE  
      CLR   
_001: U     BIE
      )     
      SPBNB _002
      CALL  #TP_inz
       IN:=L4.0
       PT:=T#500MS
       Q :=#pulsausgang
       ET:=
_002: U     BIE
      )     
      SPBNB _003
      L     #messwert
      T     #messwert_alt
_003: NOP   0

Da ist noch n fehler im Code. den findest du selber.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aufruf im FB7:

Aufruf.JPG

Aber ich bekomme keinen Takt heraus.

Möchte auch nur einen Takt haben, auch wenn der Wert um 10cm schwank, auch nur den Wert nach oben.. Also von 9 auf 10cm Takt, nicht von 10 auf 9 und wieder zurück.
 
Zuletzt bearbeitet:
Hallo Steve38,

die Variable alter_Messwert als Temp ist beim ersten Lesen undefinert. --> verschiebe die Messwert-Variablen in den Stat-Bereich
 
Morgen,

ich habe den Bereich geändert, allerdings ohne Änderung, ich bekomme nach wie vor keinen Impulse heraus.
Kann aber auch an den Ausgang vom FB keinen Zähler oder Ausgang anhängen, obwohl ich den als Bool deklariert habe.

Deklaration.JPG

FB_Takt.jpg

Code:
      U(
      U(
      L     #Akt_Messwert
      L     #Alter_Messwert
      <>I
      )
      =     %L4.0

      BLD   103
      U(
      U(
      L     #Messwert
      L     1
      /I
      T     #Akt_Messwert
      UN OV
      SAVE
      CLR
      U BIE
      )
      SPBNB _001
      L     #Alter_Messwert
      L     #Menge
      /I
      T     #Alter_Messwert
      UN OV
      SAVE
      CLR
_001: U BIE
      )

      SPBNB _002


      CALL  TP , "IEC_Timer_0_DB"
         time_type:=Time
         IN :=%L4.0
         PT :=#Impulsdauer
         Q  :=#Pulsausgang
         ET :=



_002: U BIE
      )

      SPBNB _003
      L     #Messwert
      T     #Alter_Messwert
_003: NOP 0
 
Zuletzt bearbeitet:
So komplette Quelle. Zum übersetzen.
Code:
FUNCTION_BLOCK FB 1TITLE =
VERSION : 0.1




VAR_INPUT
  Messwert : INT ;	
END_VAR
VAR_OUTPUT
  Pulsausgang : BOOL ;	
END_VAR
VAR
  Alter_Messwert : INT ;	
  TP_Puls : "TP";	
END_VAR
VAR_TEMP
  Unterschied : BOOL ;	
  Div_Messwert : INT ;	
  Div_Alter_Messwert : INT ;	
END_VAR
BEGIN
NETWORK
TITLE =


      L     #Messwert; 
      L     10; 
      /I    ; 
      T     #Div_Messwert; 
      NOP   0; 
NETWORK
TITLE =


      L     #Alter_Messwert; 
      L     10; 
      /I    ; 
      T     #Div_Alter_Messwert; 
      NOP   0; 
NETWORK
TITLE =


      L     #Div_Messwert; 
      L     #Div_Alter_Messwert; 
      <>I   ; 
      =     #Unterschied; 
NETWORK
TITLE =


      U     #Unterschied; 
      =     L      6.0; 
      BLD   103; 
      CALL #TP_Puls (
           IN                       := L      6.0,
           PT                       := T#1S,
           Q                        := #Pulsausgang);


      NOP   0; 
NETWORK
TITLE =


      L     #Messwert; 
      T     #Alter_Messwert; 
      NOP   0; 
END_FUNCTION_BLOCK

Edit. Move muss noch rein.

Hatte nicht gespeichert vor quelle generieren.

Danke Ronin!
 
Zuletzt bearbeitet:
Ich nochmal zu meinem Problem.
Es läuft eigentlich super, wenn es alleridngs um einen Wert schwankt, bekomme ich immer wieder einen Impulse.

Ich habe die Impulsezeit schon nach oben gesetzt, jedeoch reicht dies nicht aus. Weiter nach oben >5selk. kann ich nicht.



Code:
L #Messwert
L #Menge
/I
T #Div_Messwert
NOP 0


L #Alter_Messwert
L #Menge
/I
T #Div_Alter_Messwert
NOP 0


L #Div_Messwert
L #Div_Alter_Messwert
<>I
= #Unterschied

U #Unterschied
= %L6.0
BLD 103
CALL #TP_Puls
time_type:=Time
IN :=%L6.0
PT :=#Impulsdauer
Q :=#Pulsausgang
ET :=
NOP 0

L #Messwert
T #Alter_Messwert
NOP 0



[/CODE]
 
Zurück
Oben