DI's entprellen

Küffel

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

ich suche nach einer Möglichkeit Eingänge für ca. 20-50 ms zu entprellen, am besten ohne Timer.

Da es sich um ca. 40 Eingänge handelt möchte ich ungern 40 Timer verwenden, wenn ich die überhaupt noch frei habe.

CPU ist eine 315....

Vielen Dank für jeden Tip!

Gruß
Küffel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier habe ich es mal mit IEC Timer gemacht für ein Byte. (Wie Zotos Vorschlag)
Code:
FUNCTION_BLOCK FB 1
TITLE =Entprellung von Eingängen
VERSION : 0.1

VAR
  Entprellung_DI_0_0 : SFB 5; 
  Entprellung_DI_0_1 : SFB 5; 
  Entprellung_DI_0_2 : SFB 5; 
  Entprellung_DI_0_3 : SFB 5; 
  Entprellung_DI_0_4 : SFB 5; 
  Entprellung_DI_0_5 : SFB 5; 
  Entprellung_DI_0_6 : SFB 5; 
  Entprellung_DI_0_7 : SFB 5; 
END_VAR
BEGIN
NETWORK
TITLE =Entprellung Eingang 0.0
      CALL #Entprellung_DI_0_0 (
           IN                       := E      0.0,
           PT                       := T#50MS,
           Q                        := E      0.0);//Wenn du den Baustein an erster stelle im OB1 aufrufst dann kannst du den Eingang gleich direkt wieder überschreiben ausser du benötigst den nicht Entprellten Eingang dann solltest du ein DB Bit oder Merker verwenden!

NETWORK
TITLE =Entprellung Eingang 0.1
      CALL #Entprellung_DI_0_1 (
           IN                       := E      0.1,
           PT                       := T#50MS,
           Q                        := E      0.1);

NETWORK
TITLE =Entprellung Eingang 0.2
      CALL #Entprellung_DI_0_2 (
           IN                       := E      0.2,
           PT                       := T#50MS,
           Q                        := E      0.2);

NETWORK
TITLE =Entprellung Eingang 0.3
      CALL #Entprellung_DI_0_3 (
           IN                       := E      0.3,
           PT                       := T#50MS,
           Q                        := E      0.3);

NETWORK
TITLE =Entprellung Eingang 0.4
      CALL #Entprellung_DI_0_4 (
           IN                       := E      0.4,
           PT                       := T#50MS,
           Q                        := E      0.4);

NETWORK
TITLE =Entprellung Eingang 0.5
      CALL #Entprellung_DI_0_5 (
           IN                       := E      0.5,
           PT                       := T#50MS,
           Q                        := E      0.5);

NETWORK
TITLE =Entprellung Eingang 0.6
      CALL #Entprellung_DI_0_6 (
           IN                       := E      0.6,
           PT                       := T#50MS,
           Q                        := E      0.6);

NETWORK
TITLE =Entprellung Eingang 0.7
      CALL #Entprellung_DI_0_7 (
           IN                       := E      0.7,
           PT                       := T#50MS,
           Q                        := E      0.7);

END_FUNCTION_BLOCK

Wenn deine ganzen Eingänge Byteweiße vorhanden sind kannst du das ja so umprogrammieren das du das ganze Eingangsbyte den FB übergibst und das Entprellte Byte zurückgibst. Dann brauchst du das ganze nicht so oft programmieren.

godi
 
Bei der ET200s kannst du so etwas in der HW-Config machen!!!

Ja das kannst du auch bei CPU'n mit integrierten Eingängen machen aber er hat nur geschrieben das er eine 315... hat und somit bin ich davon ausgegangen das er von normalen Eingangskarten spricht.
Naja den Rest von der Hardware nach den Punkten kann man sich dazudenken... :???:

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, sorry das ich nicht mehr geschrieben habe worum es genau geht. Aber die Vermutung von godi war richtig. Es handelt sich größtenteils um normale Digitale Eingabebaugruppen.

Vielen Dank für die Antworten. Werde es mit TONs probieren, auch wenn ich erst mal genau nachlesen muss worum es sich genau handelt :confused: .

Gruß
Küffel
 
Hier habe ich es mal mit IEC Timer gemacht für ein Byte. (Wie Zotos Vorschlag)
Code:
FUNCTION_BLOCK FB 1
TITLE =Entprellung von Eingängen
VERSION : 0.1

VAR
  Entprellung_DI_0_0 : SFB 5; 
  Entprellung_DI_0_1 : SFB 5; 
  Entprellung_DI_0_2 : SFB 5; 
  Entprellung_DI_0_3 : SFB 5; 
  Entprellung_DI_0_4 : SFB 5; 
  Entprellung_DI_0_5 : SFB 5; 
  Entprellung_DI_0_6 : SFB 5; 
  Entprellung_DI_0_7 : SFB 5; 
END_VAR
BEGIN
NETWORK
TITLE =Entprellung Eingang 0.0
      CALL #Entprellung_DI_0_0 (
           IN                       := E      0.0,
           PT                       := T#50MS,
           Q                        := E      0.0);//Wenn du den Baustein an erster stelle im OB1 aufrufst dann kannst du den Eingang gleich direkt wieder überschreiben ausser du benötigst den nicht Entprellten Eingang dann solltest du ein DB Bit oder Merker verwenden!


END_FUNCTION_BLOCK

Wenn deine ganzen Eingänge Byteweiße vorhanden sind kannst du das ja so umprogrammieren das du das ganze Eingangsbyte den FB übergibst und das Entprellte Byte zurückgibst. Dann brauchst du das ganze nicht so oft programmieren.

godi

Hallo godi,

leider habe ich noch nichts viel (eigentlich nicht mit SCL) gemacht. Aber ich denke ich werde mich einlesen, dein Beispiel sieht schön strukturiert aus. Ich habe es auch mal versucht in eine SCL Quelle einzufügen. Leider ohne Erfolg. Erstmal gehe ich davon aus, du meintest SFB4 nicht 5, richtig?

Die Variablen Deklaration verstehe ich noch nicht so richtig: du legst eine Variable "Entprellung_DI_0_0" an, die vom TYP SFB4 ist, richtig?

Diese werden dann in den Lokaldaten von FB1 gespeichert, richtig? Damit braucht man dann nicht mehr für jeden SFB4 aufruf einen eigenen Instanzdatenbaustein, oder?

Meine SCL Version meckert schon über den Titelbezeichner vom Netzwerk. Verison 5.3.1, mit welcher version hast du programmiert?


Was ich danach nicht verstehe ist der CALL. Du rufst eine Funktion, wo ich dachte es sei eine Variable, hmmm, hier gebe ich erst mal auf und warte auf weitere Tipps... :)

Danke schon mal vorab!

Gruß
Küffel
 
Anfängerfrage - was versteht man unter "entprellen" ?

Wenn du einen Taster drückst, dan schließt der Kontakt nicht sofort dauerhaft....

....sondern er hüpft (prellt - vgl. Prellbock oder Prellball) manchmal kurzzeitig minimal auf und ab.
Wenn du an den Taster einen Zählereingang schalten würdest, dann würde also der Zählerstand
nach einem Tastendruck nicht "1" sondern evtl. "3" oder "4" betragen.


Deshalb entpellen - MINDESEINSCHALTZEIT erst dann AKTION

Gruß
 
Zuletzt bearbeitet:
Du kannst ja nicht mal AWL von SCL unterseiden ;o(

Das von godi ist eine AWL Quelle!

Jetzt wirds peinlich, dachte es sei scl. dann wurdert mich das mit den netzwerken auch nicht:ROFLMAO:
Wusste gar nicht, dass man auch awl-quellen einbinden kann. Mach das ganze nur hobby mäßig! Man lernt halt nie aus!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt wirds peinlich, dachte es sei scl. dann wurdert mich das mit den netzwerken auch nicht:ROFLMAO:
Wusste gar nicht, dass man auch awl-quellen einbinden kann. Mach das ganze nur hobby mäßig! Man lernt halt nie aus!

Nicht schlimm hier sind einige "Profis" die damit ihr Geld verdienen die den Unterschied auch nicht erkannt hätten ;o)
 
Nicht schlimm hier sind einige "Profis" die damit ihr Geld verdienen die den Unterschied auch nicht erkannt hätten ;o)

Sehr gut, die Antwort ermuntert mich doch sofort eine neue Frage zu stellen:

Kann man in der AWL quelle eine Konstante definieren? Falls ich die 50ms ändern muss will ich dies nur einmal machen. Oder muss ich ne statische Variable in meinem DB verbraten?
 
...wenn du gaaaanz oben im FC eine TEMP mit dem gewünschten Wert lädst, dann hast du deine LOKAL wirkende KONSTANTE.


Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das geht auch in der Quelle.

Code:
VAR
Entprellung_DI_0_0 : SFB 5; 
myTime : TIME := T#50ms;

END_VAR

CALL #Entprellung_DI_0_0 (
   IN                       := E      0.0,
   PT                       := #myTime,
   Q                        := E      0.0);

Ungetestet !
 
VAR
myTime : TIME := T#50MS;
END_VAR

geht natürlich im FB, weils im STAT-Bereich liegt.
Diese Deklaration schreibt aber NUR der Anfangswert.
und ist in der VAT immer ONLINE änderbar.
Das natürlich für jeden FB-Aufruf getrennt.

Deshalb bei späteren Änderungen lieber im Codebereich
nochmal zusätzlich laden:

myTime := T#50MS;


Gruß
 
...auch wenns jetzt langsam OT wird, aber ich bin SCL und CFC (ohne PCS7) - Fan.

Einigen Firmen kann ich sogar meine SCL-Bausteine unterjubeln ohne dasse maulen, waaaas kein KOP/FUP/AWL!

Gruß
 
Zurück
Oben