Step 7 Schottischen Dudelsack mechanisieren

Geopolos

Level-2
Beiträge
52
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
nachdem ich hier die Motivation und das Vorhaben schon mal beschrieben habe,
hier also quasi die Fortsetzung.
Dass ein Schottischer Dudelsack eine Wissenschaft ist, dazu später vielleicht mehr.
Hier aber mal die Grifftabelle für die Spielpfeiffe:
Grifftabelle.png
Als Arbeitsbezeichnungen sollen die in blauer Schrift gelten.

Besonderheit ist, dass die Zugmagneten als mit dem hinten raus kommenden Stößel als Druckmagneten
die Löcher in Erregung schließen sollen. Einfach, weil sie dann die größte Kraft entwickeln und weniger klappern.

1. Frage:
Wie bringe ich eine S7 200 dazu, nach dem Einschalten oder nach Betätigung von z.B. E 0.0
A 0.1 bis A 0.7 zu schließen?
(A0.0 bleibt offen, da der Referenzton das A ist.)

2. Frage:
Beim Ton C z.B. muss A0.1 und A0.2 auf Low gehen, alles andere aber auf High.
Bei den anderen Noten Kodierung entsprechend.
Kann ich diese Tonhöhen-Kodes als eine Art Blöcke abspeichern, denn ich benötige
sie immer wieder?

Timer für Notenlängen:
Hatte in 30 Jahren vergessen, dass die S7-200 in den schnellen Timern begrenzt ist.
Hat sie doch bei den 10 ms nur deren 8 und bei 1 ms nur 2.
Wenn ich für jede neue Note auch einen neuen Timer einsetzen müsste, dann wäre damit eine -200 schon gestorben.

Aber volker hat mir dankenswerter Weise dazu folgendes geschrieben:
"Jein. Dein Programm wirst du vermutlich als Schrittkette schreiben. Der Timer benötigt ja immer einen Flankenwechsel. Annahme S1 eine 1/32 Note. S2 eine 1/16 Note. S3 eine 1/32 Note.
Das würde funktionieren da ja S2 den Timer nicht benötigt und du einen neuen Flankenwechsel hast.
S1 1/32, S2 1/32 würde nicht funktionieren. Das könntest du umgehen indem du für jede Note 2 Timer nimmst die du dann, falls nötig, im wechsel verwendest."
Und weiter:
"aber du darfst grundsätzlich die zykluszeit nicht vernachlässigen. timer laufen asynchron zum sps-zyklus.
wenn du z.b. 10ms hast triffst du die 1/32 nicht unbedingt immer passend
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.
im prinzip müsstest du das ganze programm im zeit-ob schreiben. die zykluszeit deines programms muss natürlich kleiner sein als der 'takt' des ob-aufrufs.
du musst auch die schaltzeiten auf den aktor bedenken. ka wie schnell deine Zug/Druck-Magneten schalten."


Mit einem Trick bezüglich geringfügiger Verlängerung der Zeiten bei den kurzen Noten, respektive der Schaltverzögerung von Relais und Zugmagneten,
käme ich sogar ohne zusätzliche Timer aus, wie diese Tabelle veranschalichen soll, die Alternative.

Noten-Timer-Zuordnung_X.png

Damit würde ich es zunächst mit einer S7-200 versuchen wollen.

Vielleicht habt Ihr Antworten auf meine eingangs gestellten 2 Fragen.
 
1. Frage:
Wie bringe ich eine S7 200 dazu, nach dem Einschalten oder nach Betätigung von z.B. E 0.0
A 0.1 bis A 0.7 zu schließen?
(A0.0 bleibt offen, da der Referenzton das A ist.)
Das wirst du in deinem Ablaufprogramm entsprechend schreiben müssen.
Beispielsweise sowas in der Art "wenn steigende Flanke E0.0, dann Zuweisung 16#01 auf %AB0".

Für welche Sprache / Programmierumgebung hast du dich dann am Ende entschieden?

2. Frage:
Beim Ton C z.B. muss A0.1 und A0.2 auf Low gehen, alles andere aber auf High.
Bei den anderen Noten Kodierung entsprechend.
Kann ich diese Tonhöhen-Kodes als eine Art Blöcke abspeichern, denn ich benötige
sie immer wieder?
Du musst ja nicht zwingend jeden Ausgang einzeln ansteuern.
Beispielweise könntest du das komplette Byte mit einem Zahlenwert beschreiben.
Machst dir eine Liste welcher Ton welcher Zahlenwert ist.
Das C wäre beispielsweise 2#1111_1100 bzw. 16#FC.
Wenn du beim Umrechnen Binär/Hex-Schreibweise nicht ganz fitt bist, kannst du auch den Programmierermodus des Windows-Taschenrechners nehmen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort.

Zuweisung 16#01 auf %AB0" was bedeutet das?

Sprache s7 micro/win.

Bytebeschreiben und damit arbeiten, so tief will ich nach Möglichkeit nicht einsteigen, auch wenn es wohl sehr elegant ist.
Eigentlich will ich mit KOP auskommen.
 
Die hex codierte Zahl 01 wird auf das Ausgangsbyte 0 geschrieben. Aus der Zahl ergibt sich dann das Bitmuster und darüber werden die einzelnen Bits in dem Byte entweder auf true oder false gesetzt
Genau.
Das "16#" bedeutet einfach nur, dass die folgende Zahl hexadezimal angegeben wird.
Entsprechend "2#" in dualer Schreibweise.
Ob S7 Mikro duale Schreibweise akzeptiert weiß ich allerdings nicht, Hexadezimal geht aber auf jeden Fall.
Umrechnung, wie bereits erwähnt, für Ungeübte am besten über den Windows Taschenrechner.
Duale Leserichtung eines Bytes ist von rechts nach links.
Folgend A0.0 und A0.1 = FALSE, rest TRUE.
1715608901025.png

Bytebeschreiben und damit arbeiten, so tief will ich nach Möglichkeit nicht einsteigen, auch wenn es wohl sehr elegant ist.
Eigentlich will ich mit KOP auskommen.

Du kannst auch beispielsweise deine Tonfolge als Schrittkette programmieren & für alle Ausgänge jeweils so etwas bauen:
1715608996170.png

oder
1715609484619.png

Aber sowas wird halt sehr schnell sehr unübersichtlich und damit fehleranfällig.
Bytebeschreiben und damit arbeiten, so tief will ich nach Möglichkeit nicht einsteigen, auch wenn es wohl sehr elegant ist.

Kann ich diese Tonhöhen-Kodes als eine Art Blöcke abspeichern, denn ich benötige
sie immer wieder?
Die Zahlen wären dann quasi deine "Blöcke".
Deine Melodie müsstest du ja sowieso als Schrittkette umsetzen.
In diesem Fall kannst du ganz simpel in jedem Schritt die Zahl, die dem gewünschten Ton entspricht, dem Ausgangsbyte 0 (also A0.0 bis A0.7) zuweisen.
In Kop notfalls einfach über einen Move-Block.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für Eure Geduld.
Inzwischen bin auch ich in diesem Fall von der Byteadressierung überzeugt.
Auch sagt mir die Hilfe, dass das Programm in Form 2# das verarbeiten kann.
Käme mir entgegen, da ich mich unmittelbar auf die Grifftabelle beziehen kann.

Aber wo bringt man das unter und wie verwendet man es im Programm?
Z.B. Anfangszustand AB0=2#1111_1110
Oder Ton
C=2#1111_1001.
Andere Töne entsprechend.
(A und E geht wohl nicht, da sie für andere Zwecke reserviert sind?)

Ist SCHRITT ein wirklicher Operand oder nur ein Symbol für Etwas?

Habe im Anhang einen Screenshot von der Benutzungsoberfläche der Software unter gebracht.
Da ist zu Anfang das Blatt ja quasi leer.
 

Anhänge

  • S7 micro WIN.png
    S7 micro WIN.png
    119,4 KB · Aufrufe: 44
Ist SCHRITT ein wirklicher Operand oder nur ein Symbol für Etwas?
Im Prinzip nur ein Symbol.
Ich hatte das so verstanden, dass du über die SPS eine Melodie ablaufen lassen willst & dafür müsstest du ja zwangsweise irgendeine Art von Sequenz (bzw. Schrittkette) erstellen.
Die beiden Beispiel-Screenshots waren darauf bezogen einzelne Ausgangsbits entsprechend dem aktuellen Schritt einzeln zu setzen.
Inzwischen bin auch ich in diesem Fall von der Byteadressierung überzeugt.
Und damit wäre dieser Gedankengang sowieso obsolet.
du benötigst dann den MOVE Befehl
1715674698511.png
Und dran denken ein 16#00 bzw 2#0000_0000 auf das Ausgangsbyte 0 zu schreiben, sobald der Ton wieder enden soll.
Nicht von der internationalen Schreibweise verwirren lassen. In deutscher Memonik entspricht "i" dem "E" & "Q" dem "A".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und dran denken ein 16#00 bzw 2#0000_0000 auf das Ausgangsbyte 0 zu schreiben, sobald der Ton wieder enden soll.
Oder eben das Bitmuster für den nächsten Ton.
Dazwischen einen Timer, der die Art der Note, Notenlänge, bestimmt.

Kann man, um den an zu stoßen, den ENO-Ausgang nehmen? Invertiert, da ein Timer ja mit fallender Flanke angestoßen wird?
Habe im Anhang mal ein Beispiel erstellt, auch unter Nutzung symbolischer Adressierung.
Geht das so?
Wozu dient die Symboltabelle im KOP oben (2 ?)?


Habe ein Programm von mir vorliegen von ca. 1995, leider nur auf Papier.
Ich vermute, dass das Folgende in einem Datenbaustein abgelegt war. Richtig?

IMG_0001.jpg

Hat es einen triftigen Grund, dass ich bei VW100 begonnen habe?
Kann ich so ein Datenwort, z.B. VW100 bei mehreren Timern anwenden?
 

Anhänge

  • Beispiel.png
    Beispiel.png
    53,3 KB · Aufrufe: 23
Oder eben das Bitmuster für den nächsten Ton.
Jup
Kann man, um den an zu stoßen, den ENO-Ausgang nehmen?
Wie in Netzwerk 2 deines Screenshots?
Jup
Invertiert, da ein Timer ja mit fallender Flanke angestoßen wird?
Kommt drauf an ob du eine Einschaltvezögerung (TON) oder Ausschaltverzögerung (TOF) nimmst.
Wozu dient die Symboltabelle im KOP oben (2 ?)?
Da kannst du temporäre Variablen anlegen.
Damit kannst du beispielsweise Zwischenergebnisse speichern, die nur für den aktuellen Zyklus des Bausteins relevant sind.
Aber NUR für den aktuellen Zyklus. Bis zum nächsten Aufruf steht da wieder irgendwas anderes drin, da der Speicher nur temporär der Variable zugewiesen wird.
Habe ein Programm von mir vorliegen von ca. 1995, leider nur auf Papier.
Ich vermute, dass das Folgende in einem Datenbaustein abgelegt war. Richtig?
Die Syntax sagt mir leider gar nichts.
Für welche Software/Steuerung/Sprache soll das gewesen sein? Weißt du das zufällig?
Kann ich so ein Datenwort, z.B. VW100 bei mehreren Timern anwenden?
lesend auf jeden fall, um beispielsweise einen Zeitwert mehrfach zu verwenden.
In deinem Fall würde es definitiv Sinn machen deine Melodie (also Ton + Zeitdauer) in einer Datenstruktur zu speichern & dann quasi mit einer Art Schleife für jeden Ton die Zahl und den Zeitwert für deinen Code zu laden.

Du startest mit Index = 0
Kopierst Ton und Zeitdauer des 0ten Index aus der Datenstruktur in Arbeitsvariablen.
Schreibst den Ton auf das Ausgangsbyte & startest mit der geladenen Zeit einen Timer.
Nach Ablauf des Timers inkrementierst du deinen Index (also +1) und lädst das nächste Wertepaar.

Wie du die Daten am besten ablegst und wie du diese dann indirekt adressierst musst du aber mal schauen.
Ich kenn die S7-200 leider nicht
 
Habe mir eine S7-200 kommen lassen, mit einer Cp 214. Dazu noch ein Programmierkabel.
Letzteres wird von beiden Computern erkannt, einmal von win 7 zum Anderen von win 11.
Die Kommunikation zur SPS klappt aber von micro/win nicht. Kommt das siehe Anhang.

<Zielsystem lesen> geht auch nicht. Kommt: "Schnittstelle konnte nicht geöffnet werden oder sie wird von einer anderen Anwendung verwendet"
Mache ich was falsch oder geht das hier eben nicht?
 

Anhänge

  • Kommunikation.png
    Kommunikation.png
    206,7 KB · Aufrufe: 32
Habe mir eine S7-200 kommen lassen, mit einer Cp 214. Dazu noch ein Programmierkabel.
Letzteres wird von beiden Computern erkannt, einmal von win 7 zum Anderen von win 11.
Für S7-200 muss die Einstellung "PPI" sein, meist 9.6 kBit/s oder in allen Baudraten suchen.

Unter Windows 7 funktioniert MicroWIN V4.0 SP9. Unter Windows 10 muss zusätzlich Step7 V5.6 oder höher installiert werden, damit die für Windows 10 tauglichen Treiber installiert werden. Eventuell hilft das auch für Windows 11?

Kommt: "Schnittstelle konnte nicht geöffnet werden oder sie wird von einer anderen Anwendung verwendet"
Hast du mal dein Windows neu gestartet?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antworten, aber da funzt nichts. Nur mal in win 7 probiert. Neu gestartet.
Mein Programmierkabel ist als MPI-Kabel ausgewiesen. Auf der Rückseite steht aber "USB to MPI/DP/PPI"
PPI lässt sich auch in der Kommunikation von der micro/win auswählen.

Wird es etwas bringen, wenn ich mir ein spezielles PPI-Kabel besorge?
Kann natürlich auch sein, dass die S7-200 nicht mehr kommuniziert, nach all den Jahren.

Wohnt einer in entfernter Nähe von Wurzen, wo ich den Kladderadatsch einfach mal vorbei bringen kann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei dem Aufwand den du treibst wäre es vielleicht einfacher, dass Spielen zu erlernen. Wie willst du das Vibrato hinbekommen das der Dudelsackspieler mit dem rechten Arm erzeugt. Nur ein Beispiel.
 
Zurück
Oben