Step 7 Schottischen Dudelsack mechanisieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Was aber nicht geht ist die Idee von volker, bei gleichen Notenlängen mit nur 2 Timern in Abwechslung aus zu kommen.
Hier also T33 dann T34 und wieder T33 und T34. Hätte mich ehrlich gesagt auch gewundert, wegen dem VKE am Ende.
Das geht schon, du weißt anscheinend nur nicht wie. Du darfst einen Timer nur einmal aufrufen, du kannst aber Variablen beliebig oft steuern (setzen/rücksetzen), die am Eingang angeschaltet sind. Und den Timer selber öfters rücksetzen z.B.

Damit ist meine Idee, das als Timerkette zu programmieren, schon vorbei. Es sei denn, es hat noch einer eine zündende Idee.
Habe ich doch bei der 214 für die mit 1ms nur 2 und von denen mit 10ms nur 8.
Im Grunde brauchst du nur einen einzigen Timer für einen Grundtakt. Habe ich bereits in #94 geschrieben.

Mir persönlich hatte volker noch geschrieben:
"man kann sich aber timer selber bauen. z.b. über einen zeit-ob(ob35) die aufrufzeit ist einstellbar.
siehe hier timer.zip http://lischis-home.selfhost.eu/files/SPS/S7/dirindex.php
ob das bei der 200er auch geht weiß ich nicht."
Was volker mit OB35 meint, heißt bei der S7-200 "zeitgesteuerter Interrupt 0 und Interrupt 1". Habe ich ebenfalls in #94 genannt.

Habe mich mit dem von Lischi beschäftigt. Weiß aber nicht, was man da von mir will.
Das ist ja auch für eine S7-300. Die S7-200 unterscheidet sich in der Programmierung schon sehr, besonders die erste Generation S7-214.

Kommt wieder ins Spiel, eine Datenmatrix ab arbeiten zu lassen.
Richtig. Auf die Art kann man dann, wie bei einem Plattenspieler, auch mal die "Platte" wechseln, ohne das Programm neu zu programmieren.
Neue Daten für eine andere Melodie könnte man z.B. mit Excel + Libnodave in die 214 laden (habe ich noch nicht gemacht, müsste aber gehen. Notfalls geht das auch mit einer HMI-Simulation mit WinCC flexible/Comfort/Advanced)

Davon habe ich aber rein garkeine Ahnung.
Ob es leistbar ist, mir das bei zu bringen?
Vielleicht hat jemand Zeit und Lust, ein Grundgerüst zu programmieren. Ein S7-200-Simulator wäre da wohl hilfreich.
Allerdings ist das Verwenden einer S7-214 Dein zeitaufwändiges Hobby.
 
"Das geht schon, du weißt anscheinend nur nicht wie." Letzteres wird bei mir öfter vor kommen. ;-)
Und gehe bitte nicht davon aus, dass ich bezüglich #94 bei allem sagen kann: Aha.

"Und den Timer selber öfters rücksetzen z.B." Mit Eingang auf Null, oder wie?

Habe in die "Lauflichtsteuerung" durch Hinzufügen eines Merkers auch den MUV-Befehl unter gebracht.
Am Timereingang jeweils Inhalte des Datenbausteins, so dass hier eine Tonleiter mit 3 Tönen entstanden ist,
der mittelste Ton dabei halb so lang. PDF im Anhang.

Wenn Du mir aufzeigen könntest, wie ich da mit nur 1 (bis evtl. 2) Timern auskomme,
notfalls auch bis 2 für jede Notenlänge,
dann würde ich damit beginnen, ein ganzes Lied zu programmieren.

Auch wenn pro Note schon jetzt 4 Netzwerke nötig sind.
Aber Zeit ist für Rentner ja nicht das Problem.
 

Anhänge

  • Tonleiter-3_mit MOV.pdf
    49,5 KB · Aufrufe: 6
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber Zeit ist für Rentner ja nicht das Problem.
So etwas behaupten aber nur Leute, die selbst noch nicht Rentner sind. Bei Rentnern läuft die Zeit einfach von Tag zu Tag schneller und alles dauert deshalb entsprechend länger und die Zeit will vorne und hinten nicht reichen.

Die von mir in #90 angeregten Pausen benötigt man beim Dudelsack aus technischen Gründen also gar nicht.
Na und? Dann kann man sich ja überlegen, ob man die PausenMöglichkeit weglässt oder nicht benutzt und vorsichtshalber dennoch mit einplant. Wenn das Programm etwas kann, was nicht verwendet wird, stört das normalerweise nicht. Wenn es etwas nicht kann, was man gerne verwenden möchte, ist das schlimmer - insbesondere, wenn man das ganze Konzept umwerfen müsste, um es nachzustricken.
Die Achtel, die ich in #90 genannt hatte, muss man nicht so wörtlich nehmen ... dürfen gern auch 32stel sein. Das ändert nichts am Prinzip.
Und nein, für jeden Ton ein oder zwei eigene Timer spendieren, würde ich nicht. Viiiel zu kompliziert.
 
So etwas behaupten aber nur Leute, die selbst noch nicht Rentner sind. Bei Rentnern läuft die Zeit einfach von Tag zu Tag schneller und alles dauert deshalb entsprechend länger und die Zeit will vorne und hinten nicht reichen.
Bisher habe ich mich auf das Rentenalter gefreut. Irgendwie bin ich jetzt verunsichert:ROFLMAO:
Das Problem, was ich bei der Programmierung sehe, ist die Spielweise beim Dudelsack. Der Spieler nimmt die Finger nicht komplett von den Grifflöchern, wenn er einen anderen Ton erzeugen möchte. Vielmehr nimmt er nur, die dann unnötigen, Finger weg oder legt die nötigen dazu. Die Tonänderung wirkt dann nicht abgehackt. Manchmal geht die Tonänderung über den Grundton oder er fügt einen Triller ein. Also müsste die Programmierung ganz anders ablaufen. Falls man die Luftversorgung unterbricht, verstummen auch die Begleitpfeifen. Deshalb finde ich die Idee, einen Dudelsack zu mechanisieren, recht schwierig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Dekuika:
Bitte mit Griffweise auseinander setzen, siehe mein Beitrag #1.
Selbst bei der deutschen Griffweise der Blockflöte werden beim obersten Ton nicht alle Finger vom Instrument genommen.
Einer bleibt dran, dazu der unterstützende Daumen der anderen Hand.
Wohl einfach, damit die Flöte einem nicht aus der Hand fällt.

@ Heinilein:
Bin ich nun Rentner oder Du?

Es bringt hier nichts über Pausen oder nicht zu diskutieren.
Auch kluges Rumdozieren bringt mir nichts.
"Und nein, für jeden Ton ein oder zwei eigene Timer spendieren, würde ich nicht. Viiiel zu kompliziert."
Dann mach es besser! Nehme ich gerne entgegen.

Im Anhang nochmal eine Timerkette als Lauflicht. Ganz ohne MUV-Befehle, Symboltabelle, Datenbaustein.
Das sind 3 Timer mit 1s Länge, stellvertretend für 3 ganze Noten.
Wer mir das so umstrickt, dass ich mit nur einem Timer auskomme, hochstens zweien alternierend im Wechsel,
bekommt einen virtuellen Orden.
Gerne auch nur mit der Hand skizziert, aber in KOP.


Wer die Step7 micro WIN noch hat, kann auch das Programm bekommen und verändern.
Test dann nach Rücksendung bei mir.
 

Anhänge

  • Lauflicht-3.pdf
    42,5 KB · Aufrufe: 3
Zuletzt bearbeitet:
@ Heinilein:
Bin ich nun Rentner oder Du?
Ich bin seit September 2015 Rentner. Aber welche Rolle spielt das?
Es bringt hier nichts über Pausen oder nicht zu diskutieren.
Genau das habe ich auch gemeint.
Auch kluges Rumdozieren bringt mir nichts.
Stimmt. Aber hier ein wenig die DudelSackEigenheiten kennenzulernen, kann (uns) dabei helfen, dass wir die Anforderungen Deiner Aufgabenstellung beginnen zu verstehen.
Dann mach es besser! Nehme ich gerne entgegen.
Würde ich gerne tun, aber von der Step7 micro WIN habe ich zu wenig Ahnung und mit ihr Null Erfahrung.
Gerne auch nur mit der Hand skizziert, aber in KOP.
Der von mir angedachte Lösungsweg beruht auf der Verwendung eines TaktSignals, einer Liste von ZahlenPaaren (also eines oder zweier Arrays),
eines Zählers und einer "ProgrammSchleife". Dafür ist KOP m.E. nicht die ideale Sprache.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Erfahrungen im Alter sind eben unterschiedlich.
Allerdings, wäre ich nicht Rentner, hätte ich so viel Zeit nicht in das Thema investieren können.
Aber ich hoffe, wir haben uns alle wieder lieb.
KOP ist eigentlich nur eine Darstellungsform, denke ich. Aber so meintest Du das wohl auch.
Und ich meinte, dieses Auskommen mit nur 1 bis 2 Timern, von 2 Teilnehmern hier erwähnt dass es ginge, durch Rücksetzen oder wie auch immer, das bitte in KOP. Dafür genügt es.
Eine gute Woche!
 
Die welche meinten, für jede Notenlänge nur mit 2 oder gar nur 1 Timer aus zu kommen, hatten wahrscheinlich das Wissen über die S7 ab der
V 300 im Blick. Da gibt es bezüglich Timerbeeinflussung mehr Möglichkeiten.
Ich fürchte, dass bezüglich meiner CPU 214 nichts mehr kommt. Nehme aber gerne auch Lösungen für CPUs darüber an, auch wesentlich darüber!

Dennoch habe ich mich schon mal bezüglich Arduino umgetan.
Auch wenn ich eine Abneigung gegen das Programmieren in Hochsprachen habe, so könnte es vielleicht ertwas geben, was ohne viel Kenntnisse adaptier- und anpassbar ist.
Bin fündig geworden. War regelrecht beglückend.
Mehr dazu im Anhang, mit einem Klangbeispiel extra für Dekuika.

Wenn das Thema Arduino in Zukunft hier nicht mehr richtig hin passt, so lasse ich mir gerne ein gutes Ersatzforum empfehlen.
 

Anhänge

  • Mechanisierung schottischer Dudelsäcke.pdf
    651,9 KB · Aufrufe: 17
Zuletzt bearbeitet:
Da ab der 16-tel Note 2 Stellen gebraucht werden, könnte es sein, dass die Halbtonnote z.B. als 20 dargestellt werden muss.
Um 16 oder 32 zu schreiben, braucht man im DezimalSystem zwar 2 Zeichen. Aber es sind nur 2 weitere Codierungen zusätzlich zu z.B. 1, 2, 4 und 8 (für Ganze ... Achtel). Ich sehe deshalb sehr gute Chancen, die 6 TonLängen und die 9 TonHöhen in je 1 Zeichen zu codieren, ohne den Code allzu unlesbar werden zu lassen.
Die Idee, die Melodie in einer StringVariablen zu hinterlegen, finde ich gar nicht übel. Ginge es darum das Programm in BASIC (z.B. VBA) zu schreiben, wäre ich wahrscheinlich selbst auf diese Idee gekommen. Die Befehle in SPS-Sprachen für die TextVerarbeitung sind für meinen Geschmack ein wenig dürftig und natürlich gilt das auch für eine OberGrenze von ca. 255 Zeichen pro String - daher war ich zunächst auf Arrays fixiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"Das Mc Blaire Projekt klingt da hingegen schon fast perfekt. Auch, weil es die Bordunpfeiffen mit erklingen lässt. Was sagt Dekuika?"

Der hat sich aus diesem Thread längst ausgeklinkt. Ich habe weder Ahnung von Step 7 Microwin noch von 200er CPU's. Ich habe auch absolut keine Lust, mich mit antiquierter Technik zu beschäftigen, die mir in meinem beruflichen und privatem Umfeld nie mehr begegnen wird. Wenn du dir eine 300er CPU, z.B. S7-314c besorgst und auf Step 7 Classic wechselst, wäre das anders. Alles in allem wünsche ich dir für dein Projekt ein gutes gelingen.
 
@ Heini-
Ja klar, lediglich die 16-tel Note mit 9 eintragen und die 32-tel mit 0, die beiden Besonderheiten kann man sich merken.
Dann dachte ich noch, dass die Zeit zumindest für die beiden noch um die Reaktionszeit der Zugmagneten verlängert werden müste.
Allerdings wird der Abfall am Ende auch verzögert. Das könnte sich ausgleichen.

@ All
Sollte das hier langsam zuende gehen, so kann ich auch mal was zurück geben. So bin ich bei Fragen um Kleinwindkraftanlagen der Schlechteste nicht. Bin in einem entsprechenden Forum als Che unterwegs, z.B. https://www.kleinwindanlagen.de/Forum/cf3/topic.php?t=6459
Und wer zu geopolos googelt, wird über ein zwei Links auch zu solchen Themen fündig werden, mit wissenschaftlichem Anspruch.

Aber schon mal kurz gesagt:
Meistens wird der eigene Standort überschätzt.
Die Angebotslage ist dünn, und was noch was taugt, teuer.
Von China kommt massenhaft was rein, was ich die alltägliche Internetkriminalität nenne. ;-)
 
Ich hatte heute mal ein Stündchen Zeit und Ruhe und habe ein Grundgerüst für die Melodie-Ausgabe geschrieben. Wenn man sich mit S7-200 auskennt, ist sowas ja kein großes Ding. Und das beste zuerst: das Programm verwendet keinen einzigen Timer. :cool:

Die Melodieausgabe / Ansteuerung läuft in einem zeitgesteuerten Interrupt, der alle 31ms aufgerufen wird - der Grundtakt für 32stel Noten und Vielfache davon (eine ganze Note sind dann 992ms). Wie ich bereits in #94 und #101 empfohlen hatte. Da wird mit einem Pointer eine einfache Abspielliste ausgegeben, die im Variablenspeicher liegt und für jede Note mit 2 Byte die Tonlänge und Ton"höhe" codiert enthält. Da ist bei deiner CPU 214 für ca. 2000 Noten Platz. Über eine evtl. effizientere Codierung und Sondercodes (für z.B. Abschnittswiederholungen) kannst du bei Bedarf nachdenken. (Notfalls kann man auch noch den Programmspeicher nutzen, um vielleicht weitere 1000 Noten aus dem Programm- in denDatenspeicher zu kopieren.) Ich habe als kurzes Demo-Beispiel den Morsecode von "SOS" hinterlegt. Da kann man schon mal gut das "Lauflicht" an den Ausgängen A0.0 - A0.7 sehen.

Die Melodieausgabe wird durch kurzes aktivieren (z.B. Taster) des E0.0 gestartet. Da wird der Abspielpointer auf den Anfang der Liste gesetzt, und das Interruptprogramm gibt dann die Noten nacheinander aus, bis es die Codierung des Listen-Endes findet (zwei 0-Bytes).
Die Abspielgeschwindigkeit kann über den Wert des Aufrufintervalls des zeitgesteuerten (zyklischen) Interrupt in SMB34 gesteuert werden. Normal: 31 (ms) Tipp: du könntest z.B. das Analogpotie 0 der CPU verwenden, um den Wert bequem zur Laufzeit zu variieren. (SMB28 Analogpotie 0: 0..255)

Ich hoffe, das Programm läuft auf deiner CPU 214 mit deren eingeschränktem Befehlsumfang (ich habe keine 214 zum Testen zur Verfügung).
Die Zykluszeit sollte bei ca 1 ms liegen (siehe Zielsystem > Informationen). Dann ist es nicht erforderlich, dass das Interruptprogramm die Ausgänge über Peripheriezugriffe ansteuert. Das Interruptprogramm steuert die Ausgänge im Prozessabbild der Ausgänge und nach Ende des OB1 werden die Ausgänge geschaltet.

Falls die Ansteuerung des Dudelsack aus irgendwelchen Gründen doch nicht funktioniert, dann kann man das Programm auch als Lauflicht-Generator verwenden. ;)

Im Anhang das Programm als MicroWIN-Projekt und als lesbare Quellen.
 

Anhänge

  • Dudelsack1.zip
    10,3 KB · Aufrufe: 5
  • Dudelsack1.awl.txt
    3,3 KB · Aufrufe: 11
  • Dudelsack1_DB.txt
    2,4 KB · Aufrufe: 12
Gerade noch eine Erkenntnis: da du nur 6 Tonlängen und 9 oder 10 Tonhöhen brauchst, kannst du auch eine Note in nur einem Byte codieren (wie BCD Ziffern) und hast dann Platz für ca 4000 Noten. 3 Bits für Tonlänge und 4 Bits für Tonhöhe und ein Bit (oder ungenutzte Werte der Tonlänge oder Tonhöhe) für Sondercodes. Sondercodes könnte man durch folgende Byte(s) genauer parametrieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mal die Codierung der Noten auf nur ein Byte geändert, nun passen ca. 4000 Noten in die Abspielliste im Datenspeicher. Und ich habe eingebaut, dass die Abspielgeschwindigkeit mit dem Potie0 der CPU gesteuert werden kann. Leider funktioniert die Änderung des Aufrufintervalls des zeitgesteuerten Interrupt0 nicht im RUN (obwohl das gehen sollte) 🤷‍♂️ Deshalb habe ich das Programm geändert, dass es nun genau einen Timer verwendet für den Grundtakt von 31ms, in dem nun ein normales Unterprogramm im OB1 aufgerufen wird.

E0.0 Schalter "Play": 1 = Liste abspielen / 0 = Stop (und zurück auf Anfang der Liste)
E0.7 Freigabe Verstellung Abspiel-Geschwindigkeit mit Potie0: 1 = 200..40% Speed (16..79ms) / 0 = 100% (31ms) Normalspeed
A1.1 Blinken im Takt der Abspielgeschwindigkeit

Nun viel Spaß beim Basteln! Und heute Abend mal genau hinschauen, wie solche schottischen Dudelsäcke gespielt werden ;)
 

Anhänge

  • Dudelsack2.zip
    11,9 KB · Aufrufe: 3
  • Dudelsack2.awl.txt
    4,9 KB · Aufrufe: 3
  • Dudelsack2_DB.txt
    2,6 KB · Aufrufe: 3
Das ist aber sehr freundlich dass mir 2 Experten noch pünktlich vor dem Sommermärchen (hoffentlich) doch noch was haben zukommen lassen!
Werden doch heute Abend auch paar Dudelsack-Klänge zu hören sein.
Volker als PN für eine S7-300. Kann ich derzeit leider (noch?) nicht ausprobieren.
Und PN/DP hier für die CPU 214.

Zu letzterem: Projektdatei in meine SPS eingespielt, auf RUN gestellt, E0.0 betätigt, geht!
Macht genau das was im DB programmiert ist!

Wenn Du jetzt sagst, her mit dem Orden! Natürlich. Habe ich extra von einer KI erstellen lassen.
Habe "Orden mit Bommel, am Bande" eingegeben.
Hier eines der 3 Ergebnisse:
Orden_1.jpg
Volker bekommt auch noch einen, aber nicht den Selben.
Wie das entstanden ist kann man hier lesen. https://www.kleinwindanlagen.de/Forum/cf3/topic.php?p=74345#real74345
-------------------------------------------------------
Die neue Variante konnte ich noch nicht studieren.

Bei der zuvor hätte ich das gerne so wie im abgebildeten DB. Aber zuvor mal noch ne deutsche Grifftabelle für Blockflöte.
Wäre übrigens bei einem kleineren Dudelsack gleich, dem Hümmelchen.
deutsche Griffweise.png

Um den folgenden DB zu verstehen: Ich beabsichtige die Grifflöcher aktiv durch Stoßmagnet zu schließen, und lasse sie durch deren Rückholfeder öffnen. Damit erhoffe ich mir am wenigsten Geklapper. Muss aber noch getestet werden.

Hier das was ich gerne hätte, für flüssige und fehlerfreie Programmierung:
Beim VB 50 gerne so dass es an die Notenlänge erinnert. am Besten bei 1/32 sogar 32, bei 1/16 16.
Wenn das nicht geht, dann 9 und 0. Die Besonderheiten kann man sich merken.

Bei der Zuordnung der Ausgänge die Namen der Noten als Buchstaben.
Scheint derzeit aber ab VB 102 nicht akzeptiert zu werden.
Kann man da in der Symboltabelle was machen.

Dann brauchte ich noch eine Möglichkeit, ab der ersten Note des vorletzten Musiktaktes den A1.0 auf 1 zu setzen,
damit für mich ne stärkere rote Lampe an geht. Welche mir signalisiert, dass ich gleich mit dem Ellenbogen den Druck aus dem Luftsack nehen muss. Erst dann nämlich ist Ruhe.

Umarbeitung Blockflöte.png
 
Wenn Du jetzt sagst, her mit dem Orden! Natürlich. Habe ich extra von einer KI erstellen lassen.
Habe "Orden mit Bommel, am Bande" eingegeben.
Hier im Forum können wir für hilfreiche oder anderweitig gute Beiträge ein öffentliches "Danke" geben. Klick rechts unter dem Beitrag, wenn man angemeldet ist.
Danke.png


??? :unsure:


Hier das was ich gerne hätte, für flüssige und fehlerfreie Programmierung:
Beim VB 50 gerne so dass es an die Notenlänge erinnert. am Besten bei 1/32 sogar 32, bei 1/16 16.
Wenn das nicht geht, dann 9 und 0. Die Besonderheiten kann man sich merken.

Bei der Zuordnung der Ausgänge die Namen der Noten als Buchstaben.
Scheint derzeit aber ab VB 102 nicht akzeptiert zu werden.
Kann man da in der Symboltabelle was machen.

Dann brauchte ich noch eine Möglichkeit, ab der ersten Note des vorletzten Musiktaktes den A1.0 auf 1 zu setzen,
damit für mich ne stärkere rote Lampe an geht. Welche mir signalisiert, dass ich gleich mit dem Ellenbogen den Druck aus dem Luftsack nehen muss. Erst dann nämlich ist Ruhe.
Die Codewerte sind ganz simpel der Index in die jeweilige Umcodiertabelle. Deshalb niedrige aufeinanderfolgende Werte 1 ... x.
Du kannst auch gerne was besser lesbareres programmieren, wo die SPS den Wert aus einer Doppel-Tabelle erst suchen muss ...
Weil deine 214 nur so einen kleinen Datenspeicher hat (4 kB), schien es mir vernünftiger, die Abspielwerte möglich effizient platzsparend zu codieren, um ein längeres Musikstück speichern zu können. Das Einschalten des A1.0 kannst du über einen Sondercode realisieren, oder in der zweiten Programmvariante Dudelsack2 das unbenutzte Bit 7 verwenden.

Wenn ich eine bequeme leicht lesbare Eingabe brauche, dann würde ich das in Excel machen, und da die Excel-Werte in die codierte Form in eine Textdatei konvertieren. Den Text kann man in MicroWIN kopieren oder auch die Textdatei importieren.
 
Zurück
Oben