Variable in KT-Zeitwert einbauen?

E

Eastpak1984

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich mache zur Zeit eine Ausbildung zum Industriemechaniker
(Fachrichtung Produktionstechnik), und nehme gerade an einem Lehrgang
für SPS teil.

Nun würde ich meine Kenntnisse gern etwas vertiefen, aber da unser
Ausbilder genug mit der "Gruppe" zutun hat, muss ich mich eben so
weiterbilden.

Das Problem ist Folgendes:


Wir üben auf einer S5-Anlage, die mit den Ausgängen (wir nutzen nur
8 ) auf 8 Pneumatikbauteile geht. Dabei handelt es sich immer um
impulsgesteruerte 3/2-Wegeventile mit Federrückstellung, d.h. mit der
SPS kann man regeln, wann an welchem Schlauch Luft kommt und wann
nicht.

Wozu das dient? Tja, wir haben die Schläuche mit 8 Blockflöten
verbunden, und können nun mithilfe der SPS einfache Lieder abspielen.
Klingt komisch, ist aber so, und funktioniert bis jetzt auch ganz ausgezeichnet.

Nun mein Problem:

Ich habe das "Musikprogramm" größtenteils als Schrittkette aufgebaut,
wobei für jede Note 2 Timer (SA-Timer) zum Einsatz kommen. Der eine
für die Dauer der Note, der andere für die Dauer der folgenden Lücke
(also Lücke bis zum nächsten Ton).

Nun möchte ich nicht immer den Zeitwert KT in Sekunden angeben,
sondern in einem Verhältniswert (nicht 0,25 Sekunden, sondern 1/4 des
Wertes X ...) 1/4-Noten würde ich mit 1/4x darstellen, halbe Noten
mit 1/2x, Achtelnoten mit 1/8x, usw. ... die Lücken ebenfalls mit einem
bestimmten Faktor vor dem x...

Wozu ich das mache?

Ich möchte, dass die Anlage sich am Anfang einmal einen Eingangswert
holt, (Tempo des Liedes), und den dann auf ale Zeitwerte automatisch
anwendet. Das heisst man ändert einen Eingangswert, und das ganze
Lied bleibt stimmig, und klingt genau so gut, es wird nur mal
schneller, mal langsamer abgespielt, je nachdem, Wie man es gern mag.

Ich hoffe, sie haben das Problem, was mich quält, verstanden, denn
ich bin noch nicht lange mit der SPS vertraut (um genau zu sagen
heute den 4. Tag)

Meinen Sie, es gibt eine Möglichkeit, mein Problem zu lösen?

Würde mich freuen, wenn Sie mir ihre Ideen zukommen lassen könnten.

Mit freundlichen Grüßen

Martin / Azubi (2.LJ)
 
hi martin,
zunächst mal ist es wichtig zu wissen, das timer bcd codierte werte brauchen, du kannst timer auch mit weinem wort versorgen z.b.
mw 0
hier steht der zeitwert in den 3 rechten byte und die zeitbasis in dem linken: 0000 0001 0000 0000
----------------------------
0,01s x 1 0 0 = 1 sek
die zeitbasis verändrt sich mit dem bitmuster 0000=0,01s
0001=0,1s
0010=1s
0011=10s
wenn du das bitmuster der zeitbasis maskierst erhälst du eine konstante zeitbasis, und durch verschieben des wortes um 1 stelle nach rechts halbierst du deinen wert.
also mußt du mit deiner eingabe entsprechend arbeiten
zuerst rechts schieben bei 1/2 1stelle bei 1/4 2stellen, danach lädst du diesen wert codiert , maskierst deine zeitbasis und versorgst deinen timer mit diesem wert.

hoffe ich konnte helfen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ööööhm... nicht ganz ...

Bis jetzt haben wir alle Zeitwerte gleich gelassen, immer auf KT 3.1 (3x 0,1s = 0,3sek).

Ich möchte jetzt alle Timer des ganzen Liedes auf einer basis laufen lassen ... und jeder Timer an sich, mit "Notenwert" x Basis berechnen lassen.

Das würde dann so aussehen:

Halbe Note = 1/2 x Basis "B"
Viertel Note = 1/4 x Basis "B"
Achtel Note = 1/8 x Basis "B"
(Auch die Lücken zwischen den einzelnen gespielten Noten wollte ich so machen)

Die Basis B wollte ich über das EW6 eintragen lassen... (das ist bei uns eine kleiner 4stellige Anzeige, mit der ich Werte in die Anlage einspielen kann. Ich denke, ihr wisst, was ich damit meine...
 
PS: Der Eintrag eben stammte natürlich von mir (Eastpak1984).

Hatte vergessen mich einzuloggen, und kann den Eintrag nichtmal mehr löschen oder editieren.

PS: Dieses MW 0 interessiert mich... das ist also kein "Wert", sondern irgendwas anderes? Damit könnte ich das hinbekommen?
Kann ich das direkt am Timer eintragen (programmiere in FUP), und wenn ja, was muss ich da z.B. für eine 1/4 Note eingeben?
 
ja kannst du direkt dort eintragen.

vorher musst du natürlich einen transfer des zeitwertes in das mw oder dw vornehmen.

z.b.
l KH 1003
t mw 10

um jetzt die zeiten abhängig von einer grundzeit zu machen musst du dir die berechnen.
solltest du eine 135u haben, kannst du dort direkt multiplizieren bzw dividieren.
in einer 100u oder 115u musst du dafür die fb's 242 und 243 benutzen.

KT 3.1 = KH 1003 //0,3 sek
KT 30.0 = KH 0030 //0,3 sek
KT 10.2 = KH 2010
falls du das nicht wusstest.

z.b. für eine 135u

l kh 1 // 0.1 sek. grundtakt
t mw 10
l kh 1
*F
l kh 1000 //zeitbasis
ow //hinzufügen
t mw 12 // 1/8tel note

l mw 10
l kh 2
*F
l kh 1000
ow
t mw 14 // 1/4tel note

l mw 10
l kh 4
*F
l kh 1000
ow
t mw 16 // 1/2 note

l mw 10
l kh 8
*F
l kh 1000
ow
t mw 18 // 1ganze note

wenn du mit der zeitbasis kh 0000 arbeitest, kannst du die zeilen
lkh 1000
ow
weglassen. dann nimmst du der grundtakt * 10

l mw 10 // kh 10
l kh 8
*F
t mw 18 // 1ganze note also kh 0080 für 0,8 sek


ach so. wie oben erwähnt geht das natürlich auch mit schieben.
in allen cpu's

l kh 10 // 0.01 sek. grundtakt
t mw 10

l mw 10
t mw 12 // 1/8tel note

l mw 10
slw 1
t mw 14 // 1/4tel note

l mw 10
slw 2
t mw 16 // 1/2tel note

l mw 10
slw 3
t mw 18 // 1tel note
 
Zuviel Werbung?
-> Hier kostenlos registrieren
volker schrieb:
vorher musst du natürlich einen transfer des zeitwertes in das mw oder dw vornehmen.

Aha... aber was ist MW oder DW?

volker schrieb:
solltest du eine 135u haben, kannst du dort direkt multiplizieren bzw dividieren.
in einer 100u oder 115u musst du dafür die fb's 242 und 243 benutzen.
Puh, am Donnerstag hab ichs noch gesehn, was wir nutzen. Nu weiss ich es net mehr. Aber ich erkundige mich mal schnell, denk in ein paar Minuten weiss ich das.

volker schrieb:
KT 3.1 = KH 1003 //0,3 sek
KT 30.0 = KH 0030 //0,3 sek
KT 10.2 = KH 2010
falls du das nicht wusstest.
Das man den gleichen Zeitwerk verschieden darstellen kann (je nach Basis), das musste ich, aber was ein KH ist, weiss ich nicht. Bis jetzt habe ich nur mit KT oder mit einem Eingangswort EW6 gearbeitet, um eine Zeit einzustellen.

volker schrieb:
z.b. für eine 135u

l kh 1 // 0.1 sek. grundtakt
t mw 10
l kh 1
*F
l kh 1000 //zeitbasis
ow //hinzufügen
t mw 12 // 1/8tel note
Ist das jetzt AWL? Bis jetzt haben wir nur FUP programmiert, und ein paar Sachen in AWL angeguckt...

volker schrieb:
ach so. wie oben erwähnt geht das natürlich auch mit schieben.
in allen cpu's
"Schieben" sagt mir noch garnichts...
 
PS: Hab mich informiert ... wir nutzen die 115U
PPS. Am Dienstag könnte ich das Programm mal mitbrignen, und dir rübermailen. Hast du ein Programm, womit du es ansehen kannst?
 
hi martin,
also mw steht für merkerwort mit einer länge von 16bit,
dw steht für datenwort mit länge 16 bit d.h. 1 wort besteht immer aus 16 bit, 1 byte aus 8bit, und ein doppelwort aus 32 bit.
merker werden unter anderem für die bildung von zwischenergebnissen verwendet.datenwörter gehören zu einem datenbaustein welche du auch zu speicherung nutzen kannst. mit schieben kannst du wörter in eine richtung bewegen z.b.:0101 0100 1111 0101 mit schiebe links um eins 1010 1001 1110 1010 frei werdende stellen werden mit 0 aufgefüllt. rechts schieben das gleiche spiel nur anders rum. 0000 0100 entspricht dezimal 4 um eins nach rechts entspricht es 2 , so wird immer durch 2 dividiert.
so zur grundinfo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay, danke, das hab ich begriffen (denke ich). Am Dienstag nachmittag kann ich das "Lied" mitbringen... Kann mir dann jemand helfen, die Variable Zeit einzubauen? Leider kann ich es hier nciht simulieren, da ich (noch) keine eigene S5 für den privaten Gebrauch besitze.

PS: Es ist sehr simpel aufgebaut, ich denke jeder von Euch wird sich eher darüber kaputtlachen, aber ich bin nunmal erst 4 Tage mit der SPS vertraut.

PPS: Wie gesagt, das "Lied" ist im großen und ganzen eine Schrittkette, die pro Note aus 6 Netzwerken besteht:

- Bedingung der Ausführung der Note
- Timer der Notenlänge
- Speicher
- Bedingung der Ausführung der Lücke
- Timer der Lückenlänge
- Speicher

Als Lücke bezeichne ich die kleine Pause zwischen den einzelnen Noten.
PS: Die Speicher gehen nicht direkt an die Ausgänge, sondern ich habe das ganze wie beschreiben 40 mal getippt (also knapp 240 Netzwerke bei 40 Noten), und dann einfach hinten über eine große "Oder"-Funktion zugewiesen, welche Timer (z.B. T1, T13 + T19) auf welchen "Notenausgang" gehen sollen.

(Nur ungerade Timer sind Noten, da die geraden immer den Lücken entsprechen.)

Die Lücken zwischen den Noten haben ganz einfach keinen Ausgang bekommen.

PS. Bitte nicht lachen ... ja, ich habe alle 240 Netzwerke einzeln getippt, obwohl sie alle zu 99% gleich aussahen ... jeder basierte eben auf dem vorherigen.

Dazu gibts sicherlich Tools zum vereinfachen, aber so fit bin ich mit der Materie noch nicht.
 
So, das Ding läuft. Falls jemand der Aufbau interessiert, hier ein Download (hab jetzt wieder nur mit KT gearbeitet)
 
Zurück
Oben