TIA TIA v15 cpu1500 frage

  • Ersteller Gelöschtes Mitglied 74258
  • Erstellt am
G

Gelöschtes Mitglied 74258

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
bitte um die Unterstützung. Habe ein Testgerät mit 90 Kippschaltern, die dafü benutzt werden, hauptsächlich pneumatische Zylinder zu fahren
d.h. vor =>Schalter nach oben und zurück=>Schalter nach unten, entspr. gerade bit nach oben und ungerade Bit nach unten.
Um Entlüftung zu gewährleisten, beim Einschalten z.B.
vor (nach oben), muss kurz ca0,2s zurück geschaltet werden ( ungerade Bit) und danach vor (gerade Bit).
Ich plane FC, dass diese Steuerung übernehmen könnte mit input, output Schnittstellen, bearbeitet wird DWord (z.B.16 obere Schalter),
Da entw. gerade oder ungerade Bits aktiv werden, plane ich Maskierung, und später Rotierung links, rechts zu benutzen.
Um Timer 200ms zu aktivieren hätte ich gedacht ganz normale Merker zu nehmen, wenn nur ein Schalter aus dem ganzen DW sein Signal ändert.
Einzigste was ich ausgedacht habe wäre vergleichen real (konvertiert von DW) mit null, beim Unleich wird Merker aktiv, jetzt wollte ich Merker zurücksetzen
und in der Sackgasse gelandet. Vielleicht kennt jemand eine Funktion damit ein Impuls bei jeder Änderung des Signalzustandes im DWord erzeugt wurde.
Wenn jemand daran Interresse Hhat mir zu helfen, beantworte ich gerne alle mögliche Fragen.
Um überflüssige Kommentare zu vermeiden ich akzeptiere, dass ich ziemlich besch..n alles beschreibe.

Vielen Dank im Voraus
 
Also, wenn nach oben geschaltet/getastet wird, willst Du Deiner VentilSteuerung vorgaukeln, dass 0,2 s lang nach zuerst nach unten geschaltet/getastet wurde und dann erst nach oben?
90 KippSchalter mit 3 SchaltStellungen (z.B. F-0-F oder T-0-T) --> es werden 90 Zylinder mit 180 Ventilen angesteuert?

Hmmm. Ich würde am liebsten nicht die Schalterstellungen "nach oben" und "nach unten" in denselben DatenWorten bzw. DatenDoppelWorten mischen, sondern eher 32 "nach-oben-Bits" in 1 DD packen und auf den entsprechenden BitPositionen eines anderen DD die "nach-unten-Bits".
Ich nehme mal an, dass die 200 ms nicht so wahnsinnig präzise eingehalten werden müssen, sondern eher eine gewisse MindestDauer nicht unterschritten werden soll.
Wie sieht es mit Deiner ZyklusZeit aus?

Sooo, jetzt ruft erstmal die Heia. Fortsetzung folgt ...
 
Hallo Zusammen,
vielen Dank für die Nachrichten.
DW und 200ms sind Anfangs (Probe) Einheiten um das Programm zu testen, normal sollte 20ms sein, aber die Zeit passe ich vor Ort an. Natürlich kann ich auch byteweise arbeiten. So viel Schalter werden benutzt je nachdem wie viel und wie groß die Vorrichtungen sind. Neutrale Stelle müssen so kurz wie möglich übergehen um Schläge zu vermeiden, darum möchte ich das ändern. Ein Testgerät mit OPanel in diesem Sinne hat Vorteil, dass ich in WinCC Buttons programmiert und Bediener kann direkt von "vor" nach "zurück" oder umgekehrt umschalten und damit gibt es weniger Probleme.
Vielen Dank an Blockmove / so änliches Programm habe ich schon ausprobiert, ich denke Funktionen mit Akkus und Statusworte helfen mir weiter, leider habe ganz kurz probiert ging nicht, und ich denke man muss schon tatsächlich ein Bisschen mit Zykluszeit sich beschäftigen, nicht das an dieser Stelle alles Durcheinander wäre.
Danke!
 
Fortsetzung folgt ...
Was mir vorschwebt, ist es, "SchiebeRegister" aus den DD (DatenDoppelWorten) zu basteln, die in einem ZeitRaster (z.B. 10 ms) weitergetaktet werden - nicht innerhalb der DD wird bitweise geschoben, sondern das vorletzte DD wird in das letzte kopiert, das drittletzte in das vorletzte u.s.w.. Für z.B. 200 ms also pro "EimerKette" ca. 20 DD. Diese DD, mit Ausnahme des letzten, müssten dann noch verodert werden. Die "nach-oben-Bits", die dann in der VerODERung True sind, aber in dem letzten DD False sind, die werden bei den "nach-unten-Bits" dazu geodert.
Nachteil dieses Verfahrens ist natürlich, dass es nicht so sehr variabel bezüglich der "ImuplsDauer" ist. Es sein denn, man arbeitet mit (ausreichend dimensionierten) Arrays und ProgrammSchleifen und/oder mit einem variablen ZeitTakt.

... Neutrale Stelle müssen so kurz wie möglich übergehen um Schläge zu vermeiden, ...
Das habe ich leider nicht verstanden und auch nicht, was Du uns mit der HMI-Variante sagen willst.
Geht es evtl. darum, dass die Bedienung der 90 Schalter eine Herausforderung wird, insbesondere, wenn z.B. viele davon (fast) "gleichzeitig" betätigt werden müssten?

Edit: Ich hab's jetzt endlich verstanden. Wenn z.B. "nach-oben" angsteuert wird UND NICHT unmittelbar vorher "nach-unten" angesteuert war, dann fehlt sozusagen der GegenDruck, der "normalerweise" die Geschwindigkeit der KolbenBewegung wesentlich beeinflusst.

Beitrag im Thema 'Flakenauswertung auf einzelne Bits im DWord'
Ist für dieses Vorhaben eine FlankenAuswertung der vielen Bits überhaupt relevant? Das sehe ich noch(!) nicht - mag aber sein.
Sorry, danach wird ja in #1 ausdrücklich gefragt. Anscheinend habe ich die Aufgabenstellung mal wieder falsch/nicht verstanden. :oops:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
... Neutrale Stelle müssen so kurz wie möglich übergehen um Schläge zu vermeiden, ..

Beim Umschalten mit dem mechanischen Schalter kann man physikalisch neutrale Stelle nicht umgehen oder ganz kurz, neutralle Stelle heißt 0 vor und 0 zurück und wenn man z.B. Vor einschaltet schießt der Zylinder ungedrosselt und mit voller Kraft vorwärts, mit OP und WinCC kann man diese neutrale Stelle umgehen.

ein Beispiel von Blockmove bringt mich auch nicht weiter da A1 geht auf 1 nur einmal und der Merker wird nur einmal gesetzt und Wertzuweisung am Ende ändert temporäre Variable nicht, mind PLCSIM schafft es nicht darzustellen (ich teste zZ mit PLCSIMv15)

Es klingt einfach: ich möchte bei jeder Änderung des Signalzustandes des Bits im DW oder DD eine Flanke haben.
Umsetzen klappt leider immer noch nicht.

Danke für die Nachricht
 
Beim Umschalten mit dem mechanischen Schalter kann man physikalisch neutrale Stelle nicht umgehen oder ganz kurz, neutralle Stelle heißt 0 vor und 0 zurück und wenn man z.B. Vor einschaltet schießt der Zylinder ungedrosselt und mit voller Kraft vorwärts, mit OP und WinCC kann man diese neutrale Stelle umgehen.

In das Steuerungsprogramm soll es kein Mittelstellung geben, nur die 2 Zustände sind erlaubt.
Vorwärts fahren bzw. in vorne Stellung bleiben.
Rückwärts fahren bzw. in zurüchgefahrene Stellung bleiben.

Wenn nach Netz-Ein oder auf eine andere Grund die Zustand unbekannt ist, dann kannst du über die Initiatoren entscheiden ob die Zustand als "Vorwärts fahren bzw. in vorne Stellung bleiben" oder "Rückwärts fahren bzw. in zurüchgefahrene Stellung bleiben".

Wegen das beschriebene Problem mit die unkontrollierte Bewegung muss man ein gewisse Zeit erlauben um das Druck aufbauen zu lassen bevor man die andere Zustand/Bewegung aktivieren kann. Also ein Umschaltverzögung.

Dass die Taste in die 0-Stellung vorbei muss oder sogar stehen bleibt ist egal. Das Programm muss erst die andere Zustand aktivieren wenn die Taste dafür aktiviert ist und die Umschaltverzögung ausgelaufen ist.
 
Wegen das beschriebene Problem mit die unkontrollierte Bewegung muss man ein gewisse Zeit erlauben um das Druck aufbauen zu lassen bevor man die andere Zustand/Bewegung aktivieren kann. Also ein Umschaltverzögung.
Das will mir sofort einleuchten, Jesper.
Darum hat es mich umso mehr gewundert, dass anscheinend ausgerechnet eine UmschaltVerzögerung zu den unerwünschten "Schlägen" führen soll...

Ausserdem: 1 Schalter pro Zylinder - nicht pro Ventil - wobei z.B. Schalter EIN bedeutet Zylinder nach oben und AUS bedeutet Zylinder nach unten, wäre "programmtechnisch" klarer und eindeutiger. Ob damit allerdings dann all die Zustände anwählbar sind, die auch benötigt/gestestet werden sollen, das entzieht sich meiner Kenntnis ...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Neutrale Stelle braucht man bei Kollisionen, dass man per Hand das beheben könnte oder ganz langsam mit der Hand vorschiebt um zu gucken woran es liegen könnte oder so etwas. Alle Schalter auf neutral geht manchmal nicht, da fallen zB Spanner oder Schlitten nach unten, die manchmal sehr groß sind. Und dann wiederrum wenn ich von der neutrallen Stelle vorwärts schalte dann wiederholt sich die Geschichte von vorne an.
Da ich kein Programmierer sondern Anwender bin, stelle ich die Frage ob mit FUP oder AWL oben beschriebene Funktion möglich wäre, wenn nicht dann die Sache für mich schon erledigt.
Danke
 
Ausserdem: 1 Schalter pro Zylinder - nicht pro Ventil - wobei z.B. Schalter EIN bedeutet Zylinder nach oben und AUS bedeutet Zylinder nach unten, wäre "programmtechnisch" klarer und eindeutiger. Ob damit allerdings dann all die Zustände anwählbar sind, die auch benötigt/gestestet werden sollen, das entzieht sich meiner Kenntnis ...
Einig

Neutrale Stelle braucht man bei Kollisionen, dass man per Hand das beheben könnte oder ganz langsam mit der Hand vorschiebt um zu gucken woran es liegen könnte oder so etwas.
In diesen Fall soll der Bediener wenn er mit die Fehlersuche fertig ist, die Zylinder per Hand in einer von die Endlagen fahren.
Dafür kann man eventuell ein Hinweis programmieren auf die HMI.
 
N.B. Bei die Umschaltverzögung meine ich dass erst x Zeit nach die Aktivierung von einen Zustand darf man den anderen Zustand aktivieren.
Also, nicht dass es ein Zeit ohne aktivierte Zustand gibts. Und wenn man wechselt passiert es Momentan.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für diejenigen, die noch daran Interesse haben.
Nach zwei Tage Recherche habe ich endlich gefunden was ich gesucht habe.
1657781134277.png
 
Es klingt einfach: ich möchte bei jeder Änderung des Signalzustandes des Bits im DW oder DD eine Flanke haben.
Umsetzen klappt leider immer noch nicht.
Code:
//                                 signale    input  DWORD
flanke       := signale XOR signaleZuvor ; // temp   DWORD
posFlanke    := flanke  AND signale ;      // output DWORD (Ergebnis a)
negFlanke    := flanke  AND signaleZuvor ; // output DWORD (Ergebnis b)
signaleZuvor := signale ;                  // static DWORD ("FlankenMerker")
Alternativ, wenn man auch jede Flanke - egal ob positiv oder negativ - benötigt:
Code:
//                                    signale    input  DWORD
anyFlanke    := signale   XOR signaleZuvor ;  // output DWORD (Ergebnis a)
posFlanke    := anyFlanke AND signale ;       // output DWORD (Ergebnis p)
negFlanke    := anyFlanke AND signaleZuvor ;  // output DWORD (Ergebnis n)
signaleZuvor := signale ;                     // static DWORD ("FlankenMerker")
 
Zuletzt bearbeitet:
Für diejenigen, die noch daran Interesse haben.
Nach zwei Tage Recherche habe ich endlich gefunden was ich gesucht habe.
Es scheint also tatsächlich Leute zu geben, diesen Siemens Baustein LGF_GetBitStates brauchen und nicht in 10 Minuten selber schreiben... :cool:

Jetzt frage ich mich nur, was der Baustein mit den 90 Ventilen zu tun hat???

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank,
wenn ich richtig sehe das ist Bit-Verundung und trotzdem DWORD am Ausgang, ich kenne mich nicht so gut mit python aus, wenn DW am Ausgang, dass wäre es gar kein Problem gewesen. Ich bräuchte aber Bit-Impuls am Ausgang bei beliebiger Zustandsänderung des beliebigen Bits im DW. Im FB oben das ist Bool Ausgang "hasChanged".
 
Ehrlich gesagt ich bin dummer Mechatroniker, der nicht gerne Zeilenweise tippt, aber versucht so zu programmieren, dass man in Zukunft jeder Menge Zeit spart, da TIA ist nicht meine Hauptbeschäftigung, das mache ich nebenbei und zwar gelegentlich nur wenn neue Vorrichtung fertig ist. Ich habe leider nur ein Tag dafür gekriegt und irgendwann später mache ich weiter. Dafür FB von Siemens ist für mich eine gute Lösung.
 
Ich habe leider nur ein Tag dafür gekriegt und irgendwann später mache ich weiter. Dafür FB von Siemens ist für mich eine gute Lösung.
Nach zwei Tage Recherche habe ich endlich gefunden was ich gesucht habe.
Hast Du in Deiner Freizeit gesucht? SPS programmieren ist ein tolles Hobby ;) Ich habe mein Hobby zum Beruf gemacht und brauche seitdem fast nicht mehr arbeiten ;) und werde auch noch dafür bezahlt :D

Harald
 
Zurück
Oben