Autor Thema: Auswerten 2 von 6 Eingängen geschaltet  (Gelesen 4279 mal)

Offline Fasi

  • Jr. Member
  • **
  • Beiträge: 45
Auswerten 2 von 6 Eingängen geschaltet
« am: Januar 09, 2020, 10:52:25 Vormittag »
Hallo zusammen

Vorweg mal allen ein gutes 2020!!

Irgendwie stehe ich noch auf dem Schlauch...ev. kann mir jemand einen Tipp geben.

Ich versuche mit einem Easy oder Easy E4 folgende Abfrage zu bauen:

Wir haben 6 Pager in Ladestationen welche je durch eine Lichtschranke auf Anwesenheit geprüft werden. Nun muss ich erkennen wenn von diesen 6 Pagern, 2 oder mehr entnommen wurden, um dann einen Ausgang zu schalten. Sprich damit zu erkennen dass genügend Personal einen Pager genommen hat um die Mindestanforderung zu erfüllen.

15 & Verknüpfungen führen zum Ziel, ist ja jetzt noch überschaubar....aber wenn die Eingänge sich verdoppeln und noch die Anforderung sich ändert ….. 1000 klicks später :-[   Da muss es doch eine einfachere Lösung geben???

Gruss Chrigu
« Letzte Änderung: Januar 09, 2020, 11:05:51 Vormittag von Fasi »

Offline Juergen

  • easy god
  • *****
  • Beiträge: 1943
  • Jürgen
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #1 am: Januar 09, 2020, 14:04:01 Nachmittag »
Hallo Chrigu  ;)
Ich gehe davon aus das bei Vorhanden 0 Signal und bei Ausgegeben 1 Signal am Eingang anliegt.

Erweiterbar mit weiteren Anwender Bausteinen zum Erhöhen der Stückzahl

Anzeige im Display der E4 welche Anzahl entnommen wurde.
Kannst einfach noch einen Vergleicher auf MB 511 > 1 zum Schalten der Meldung ergänzen
« Letzte Änderung: Januar 09, 2020, 14:07:52 Nachmittag von Juergen »
Mit freundlichem Gruß Juergen


Alle Programme sind nur Beispiele und Selber zu Testen.
Geprüft wurde nur in der Simulation der Software oder mit Simulator am Schreibtisch. Die Beispiele sind mit Sicherheitsschaltungen zu ergänzen.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #2 am: Januar 09, 2020, 14:33:54 Nachmittag »
Hallo allesamt, ich würde einen anderen Ansatz wählen  ;)
mit dem md101 kann man weiterarbeiten.
Gruß


mb100 := 0;
FOR MD01 := 1 TO 6 BY +1 DO
if i[MD01] then
  mb100 := mb100 +1;
end_if;
END_FOR;
mb101 := mb100;
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline Juergen

  • easy god
  • *****
  • Beiträge: 1943
  • Jürgen
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #3 am: Januar 09, 2020, 14:43:05 Nachmittag »
Hallo weiss_nix,

sieht sehr kurz aus, nur ich verstehe es nicht.

Ich bin eben an Fup gewohnt

Hier die Version mit 16 Eingängen und Meldung Q1  in FUP
Anzeige der entnommenen  Geräte im Display
« Letzte Änderung: Januar 09, 2020, 17:55:39 Nachmittag von Juergen »
Mit freundlichem Gruß Juergen


Alle Programme sind nur Beispiele und Selber zu Testen.
Geprüft wurde nur in der Simulation der Software oder mit Simulator am Schreibtisch. Die Beispiele sind mit Sicherheitsschaltungen zu ergänzen.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #4 am: Januar 09, 2020, 22:36:19 Nachmittag »
Hi Jürgen, hi Chrigu,
... aus Spass an der Sache habe ich mal eine modulare Lösung um bis zu 32 Bit zu zählen, lässt sich fast beliebig erweitern (solange die Easy mitspielt)
mit BitPacker lassen sich bis zu 8 Bool in ein Byte (z. B. Merkerbyte) packen, 4 x BitPacker passen auf ein MD (z.B. MB01+MB02+MB03+MB04 = MD01)
Der BitZaehler zählt die Bit eines Doppelwort (z.B. MD01) und der Code im BitZaehler ist optimiert und macht nur so viele Schleifen wie Bit's tatsächlich gesetzt sind.   
Die Bausteine sind offen, den Code im BitZaehler habe ich nur abgewandelt, und ist unter https://graphics.stanford.edu/~seander/bithacks.html nachzulesen.

Gruß

PS: Ist mein erstes EasySoft7 Projekt, bitte nicht gleich prügeln
@Admin: Falls der Doppelpost stört, bitte hier löschen.
« Letzte Änderung: Januar 10, 2020, 00:06:24 Vormittag von weiss_nix »
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline Juergen

  • easy god
  • *****
  • Beiträge: 1943
  • Jürgen
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #5 am: Januar 09, 2020, 23:03:30 Nachmittag »
Hallo  weiss_nix, :)

Danke für dein sehr kleines Beispiel.
Es Funktioniert Super.
Nur verstehe ich immer noch nicht wie.
ST ist für mich nur Chinesisch.
Braucht der Anwender auch nicht wissen, was im Baustein selber passiert.
Ist bei den Herstellerbausteinen auch nicht ersichtlich.


Mit freundlichem Gruß Juergen


Alle Programme sind nur Beispiele und Selber zu Testen.
Geprüft wurde nur in der Simulation der Software oder mit Simulator am Schreibtisch. Die Beispiele sind mit Sicherheitsschaltungen zu ergänzen.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #6 am: Januar 09, 2020, 23:17:37 Nachmittag »
Hi Jürgen, schön zu lesen dass es gefällt  :D

mb100 := 0;
FOR MD01 := 1 TO 6 BY +1 DO
if i[MD01] then
  mb100 := mb100 +1;
end_if;
END_FOR;
mb101 := mb100;

hier werden lediglich die Eingänge als Array in einer Schleife abgeklappert und die gesetzten gezählt.
Die UF BitZaehler ist nicht so einfach zu erklären - nachlesen und grübeln heisst hier die Lösung ....

Gruß
« Letzte Änderung: Januar 09, 2020, 23:20:29 Nachmittag von weiss_nix »
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline Fasi

  • Jr. Member
  • **
  • Beiträge: 45
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #7 am: Januar 10, 2020, 07:51:51 Vormittag »
Guten Morgen zusammen!

Danke für die super Ideen und Tipps....Habe es jetzt noch mit einem Vergleich erweitert nun geht es so wie ich mir das vorstelle (Ausser dass die Eingänge noch Invers sind:-) )....

Zitat
Hallo Chrigu  ;)
Ich gehe davon aus das bei Vorhanden 0 Signal und bei Ausgegeben 1 Signal am Eingang anliegt.

Nein, gerade umgekehrt....

Gruss Chrigu

Offline Juergen

  • easy god
  • *****
  • Beiträge: 1943
  • Jürgen
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #8 am: Januar 10, 2020, 09:43:44 Vormittag »
Hallo  Chrigu  :)

Zitat
(Ausser dass die Eingänge noch Invers sind:-)

bekommst du das selber hin?
« Letzte Änderung: Januar 10, 2020, 09:47:57 Vormittag von Juergen »
Mit freundlichem Gruß Juergen


Alle Programme sind nur Beispiele und Selber zu Testen.
Geprüft wurde nur in der Simulation der Software oder mit Simulator am Schreibtisch. Die Beispiele sind mit Sicherheitsschaltungen zu ergänzen.

Offline Fasi

  • Jr. Member
  • **
  • Beiträge: 45
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #9 am: Januar 10, 2020, 10:01:06 Vormittag »
Hallo Juergen

bekommst du das selber hin?

Ganz knapp geschafft  8) , bei mir ist halt noch das Problem dass ununterbrochen jemand was von mir will...da ist es mit der Konzentration der übrig gebliebenen Hirnzellen so eine Sache....

Gruss Chrigu

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 709
  • Think easy!
    • mollgruppe
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #10 am: Januar 10, 2020, 16:59:38 Nachmittag »
Hallo,
ich kann nur immer wieder an die Programmierer appelieren, ihren Code zu kommentieren. Dazu hatte ich mich schon mehrfach geäußert.
Da meiner Meinung nach ST die mächtigste Sprache der IEC61131 ist, sollten Anfänger und Interessierte nicht auch noch durch unkommentierten Code abgeschreckt werden.
Es steigert doch das Verständnis, wenn man direkt sieht was die Codezeile bewirkt.
Ich möchte daher mal den Code von weiss_nix erklären:
Ich gehe davon aus, das vorher I01-I06 auf die Merker M01-M06 kopiert wurden
mb100 := 0;      //Zählbyte auf 0 setzen
// eine FOR-Schleife mit der Laufvariable i von 1-6 in einerschrittweite durchlaufen
FOR MD01 := 1 TO 6 BY +1 DO
if i[MD01] then      // nur wenn BitNr i  in MD01 = 1 ist, dann
  mb100 := mb100 +1;      //Merkerbyte100 +1 Zählen
                                                 //sonst nichts machen
end_if;
END_FOR;   //ende FOR-Schleife
mb101 := mb100;     //Zählwert in das MB101 kopieren


Ich hoffe das ist zu verstehen

Gruß Thomas
Weil Einfach einfach Einfach ist!

Offline Juergen

  • easy god
  • *****
  • Beiträge: 1943
  • Jürgen
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #11 am: Januar 10, 2020, 18:04:40 Nachmittag »
Danke Thomas ;) für die Erklärung.
Mit FUP verstehe ich das jedoch immer noch besser.
Das Beispiel in ST ist natürlich viel Kleiner.
Mit freundlichem Gruß Juergen


Alle Programme sind nur Beispiele und Selber zu Testen.
Geprüft wurde nur in der Simulation der Software oder mit Simulator am Schreibtisch. Die Beispiele sind mit Sicherheitsschaltungen zu ergänzen.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #12 am: Januar 10, 2020, 18:44:53 Nachmittag »
... wenn dem so sein soll gerne, aber wenn dann bitte richtig erklären ...
die Laufvariable ist nicht "I" sondern "MD01"
es werden die Eingänge "I" als Array angesprochen und nicht die "Bit's in MD01"
also wird MB100 um 1 erhöht wenn das angesprochene Arrayelement (E01 bis E06) TRUE ist

mb100 := 0;      //Zählbyte auf 0 setzen
// eine FOR-Schleife mit der Laufvariable i von 1-6 in einerschrittweite durchlaufen
FOR MD01 := 1 TO 6 BY +1 DO
if i[MD01] then      // nur wenn BitNr i  in MD01 = 1 ist, dann
  mb100 := mb100 +1;      //Merkerbyte100 +1 Zählen
                                                 //sonst nichts machen
end_if;
END_FOR;   //ende FOR-Schleife
mb101 := mb100;     //Zählwert in das MB101 kopieren


zumal der angegebene Code lediglich als Denkanstoss (und nicht als Lehrbuch) dienen sollte ;)

Gruß
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline Juergen

  • easy god
  • *****
  • Beiträge: 1943
  • Jürgen
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #13 am: Januar 10, 2020, 18:52:07 Nachmittag »
Hallo,
ich dachte ich hätte es halbwegs verstanden. dann kommt das
Zitat
die Laufvariable ist nicht "I" sondern "MD01"
es werden die Eingänge "I" als Array angesprochen und nicht die "Bit's in MD01"

Geht das auch für eine Handwerker ohne IT Ausbildung. ???

Ich dachte es werden die zuvor mit den Eingängen zugewiesenen Bit im DW Abgefragt.
Mit freundlichem Gruß Juergen


Alle Programme sind nur Beispiele und Selber zu Testen.
Geprüft wurde nur in der Simulation der Software oder mit Simulator am Schreibtisch. Die Beispiele sind mit Sicherheitsschaltungen zu ergänzen.

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 709
  • Think easy!
    • mollgruppe
Antw:Auswerten 2 von 6 Eingängen geschaltet
« Antwort #14 am: Januar 10, 2020, 19:13:25 Nachmittag »
Sorry weiss_nix,
da habe ich mich wohl leicht vertan mit der Laufvariable, wenn man zu schnell drüber liest (unter Codesys ist gewöhnlich "i" die Laufvariable).
also muss es korrekt heißen:
      if I[MD01] then      // wenn Eingang I [MD01] = 1 ist, dann
Weil Einfach einfach Einfach ist!