Jump to content

Bewegen


Empfohlene Beiträge

Hallo,

... ich habe mir mal noch überlegt, wie man im MBS etwas über die Schnittstelle bewegen kann, und dabei gewisse Freiheitsgrade in der Parametierung hat.

Als Lösungsansatz ist (mal wieder) eine Kombination aus Ereignisverwaltung und VB-Skript herausgekommen.

In der Ereignisverwaltung kann über Variablen folgendes eingegeben werden:

sx, sy, sz -> Fahrweg des zu bewegenden Objektes in die 3 Richtungen

FObjekt -> Name des Objektes das bewegt werden soll

schritt -> Schrittweite der Einzelbewegung für den längsten Weg. (Die Schrittweite für die anderen Richtungen wird so angepasst, daß es eine "harmonische" Bewegung ergibt)

Wenn die Variable "Start" in der Ereignisverwaltung der Wert 1 zugewiesen wird, startet VB die Bewegung und setzt am Ende der Bewegung die Variable auf 0 (kann dann in der Ereignisverwaltung weiter ausgewertet werden). Da dies die wesentlichen Parameter sind, wird im VB-Projekt keine Eingabemaske benötigt, und man hat die Freiheitsgrade (Weg und Objektname) über die Ereignisverwaltung. (Im VB-Projekt gibt es [immer noch vorsichtshalber] "Connect" und "Disconnekt" für den Auf- bzw. Abbau der Verbindung zur Schnittstelle... also zuerst "Connect" und dann einen Schalter betätigen.

MBS-Projekt:

Wird der linke Kippschalter (Ereignis) auf "ein" geschaltet, schaltet das Signal dahinter auf "offen", die Variablen werden gesetzt und die Bewegung des Quaders gestartet (VB)

Ist die Bewegung zu Ende, wird dies in der Ereignisverwaltung erkannt (Start=0) und das Signal zurückgeschaltet.

Wird der linke Kippschalter (Ereignis) auf "aus" geschaltet, passiert im Prinzip das Gleiche nur, daß die Variablen sx,sy,sz mit -1 multipliziert werden und so der Quader wieder seine ursprungliche Position erreicht.

Der rechte Kippschalter hat die gleiche Funktionsweise... nur eben für die Pyramide.

Das Projekt befindet sich noch in den Anfängen (später wollte ich dann noch die Rotation mit einbauen) und ist deshalb noch nicht gegen Ungeduld abgesichert... also das Ende der Bewegung abwarten... dann erst wieder einen Schalter schalten.

Ich hoffe mal, dies ist ein brauchbarer Ansatz... Rückmeldungen wären schön...

in der . zip ist das MBS-Projekt, die Ereignisverwaltung als .html und das VB-Projekt (allerdings nur die .exe, da das Script noch etwas chaotisch aussieht)

Gruß

EASY

Fahrtest-01-bild.jpg

 

Fahrtest-01.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Easy,

Du bist ja hier der Auskenner in VB:);), ich krieg das einfach nicht auf die Reihe...

Mir geht es darum, über VB zwei Objekte zu verknüpfen/ verknüpfung wieder aufzuheben (universell).

Zb. so: mittels 3er Variablen -> "Aktion"    = 0 oder 1 (2)   // 0==verknüpfung lösen  1==verknüpfen 2==keine Aktion ( wird von VB gesetzt )
                                                       "ObjektA" = String;          // Name des Objektes was verknüpft/gelöst werden soll
                                                       "ObjektB" = String;          // Name des Objektes mit dem verknüpft wird

zb. könnte man dann Container an die Traverse vom Kran andocken, über die EVW verfahren und dann wieder abdocken / an LKW oderTragwagen andocken....
oder Wagen am Ablaufberg an eine Dummylok "anhängen" oder...

mit setzen der Variable Aktion (0 oder 1) soll VB das entsprechende ausführen.

Könntest Du sowas schreiben und hier einstellen ? :).

Danke schonmal, Lutz
 

Tante Edith sagt, das wäre ja ein Modul, was die EVW erweitert :):).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Lutz,

... kann ich Dir schon machen (ist in meiner Vorstellung auch universell anwendbar)...

... nur (bevor ich mir ein Beispiel im MBS zum Testen ausdenken muß) wäre es mir lieber, wenn Du im MBS ein kleines Beispiel aufbauen könntest (mit Ereignisverwaltung) in dem die Variablen schon vorkommen... Das Ver-/Ent-Knüpfen kannst Du ja "von Hand" simulieren.

Variable "Aktion" "2==keine Aktion ( wird von VB gesetzt )" verstehe ich noch nicht ganz, was Du damit erreichen möchtest... wenn Du es brauchst, kannst Du das Setzen der Variablen ja (temporär) mit einen Schalter simulieren.

Ich denke mal, so sind die Aufgaben "gerecht" verteilt, und es ist näher an Deiner Vorstellung...

... eine kleine Beschreibung, was Du machen möchtest wäre natürlich hilfreich...

P.S. Das MBS-Projekt kannst Du ja exportieren und als .zip hier einstellen oder unter "Experimentelle Anlagen" veröffentlichen.

Gruß

EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

Am liebsten wäre mir eine ( neue ) Aktion in der EVW, mit der man Objekte miteinander verknüpfen kann:):).


Da aber schon an anderer Stelle darüber diskutiert wurde, die EVW nicht unnötig "aufzublähen" wollte ich ein mini-VB-Programm haben, was das ersetzt.

Ich habe zwar etwas Programmiererfahrung, allerdings in der "Microcontroller-Ecke" ( C-Control und Bascom ), in VB muss ich mich erst einarbeiten, scheitere aber schon an der Bedienoberfläche >:(:(.
( Eigentlich wäre so ein mini-Programm der ideale Einstieg dazu ).
 

 

hier ist die Idee, bei der alles mit Bordmitteln läuft:

Prinzip1.jpg

da das gelbe gleis mit der Laufkatze bewegt wird und die grünen mit den Transportmitteln, summieren sich die Anhalteungenauigkeiten, im besten Fall "kippeln" die Container, im ungünstigsten wird der Container nicht mitgenommen/abgesetzt.

Das würde ich mit dem direkten andocken (verknüpfen) umgehen.

Jetzt stellt sich mir aber ein Problem in den Weg, wie ich die Container indentifizieren kann, die sich unter der Traverse befinden- :(
ich kann zwar erfragen, wo sich ein Objekt befindet ( Befehl 102 ), aber nicht welches Objekt in der nähe von x,y,z ist.

Bleibt eigentlich nur mir in der EVW zu merken, wo was ist, und zu hoffen, das Neo es ermöglicht, den Inhalt von einer Variale in eine andere zu Übertragen -
in den µC- Progammen gibt es dazu eine einfache Möglichkeit: "Rechenoperator @ " : "indirekte Adresse".

Im Studio könnte das so aussehen:   Variable (x) setzen-   Wert:     @"variable (y)"   // überträgt den wert von y in x

Zum Programm:

Eigentlich bräuchte ich nur die paar Zeilen, in der die Variable "Aktion" / da müsste ein passenderer Name her, vlt. "Andocken" o.ä.
ausgewertet wird und je nachdem der entsprechende Befehl  ( 140; inhalt von "Objekt A"; inhalt von "Objekt B" ) oder ( 141; inhalt von Objekt A" ) ausgeführt wird.

Die Variable "Aktion" auf 2 zu stellen ist eigentlich nur ein "Schalter Aus"; kann man auswerten, muss man aber nicht.

So, ich hoffe, ich habe dich jetzt völlig verwirrt;).

 

Gruß Lutz

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Lutz,

... eine sehr kurze Form wäre, nur mit der Variablen "Andocken" zu arbeiten.

Andocken="ObjektA;ObjektB" -> Verknüpfung setzen (Wert mit ";")

Andocken="ObjektA" -> Verknüpfung lösen (Wert ohne ";")

... würde auch gleich der schreibweise der Schnittstelle entsprechen.

 

Zitat

Bleibt eigentlich nur mir in der EVW zu merken, wo was ist, und zu hoffen, das Neo es ermöglicht, den Inhalt von einer Variale in eine andere zu Übertragen -

Wenn es Dir helfen würde, könnte ich Dir auch noch ein "Wert übertragen" mit einbauen...

Variable Wertuebertragen="Variable1;Variable2" würde dann bedeuten, daß der Wert der Variablen1 der Variablen2 zugewiesen wird...

(... es gelingt mir noch nicht immer aber bei Variablennamen versuche ich "äöüß" zu vermeiden...)

Gruß

EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

EASY,

das mit der verkürzten Schreibweise geht natürlich auch ( warum bin ich nicht drauf gekommen? ),
auch die Variable "Werteuebertragen" ist herzlich willkommen (y).

Da fällt mir noch eine dritte ein: "Objektsetzen" :P / und Abfrage; selbes Muster wie von dir vorgeschlagen:

Objektsetzen="ObjektA" ; Antwort in Variable "ObjektposX" "ObjektposY" "ObjektposZ" speichern;  bzw
Objektsetzen="ObjektA";ObjektposX;ObjektposY;ObjektposZ zum "hinbeamen";).

Wenn Du so ein Programm schreiben würdest und als VB-Projekt hier einstellen könntest- mein Dank wird Dir ewig hinterher schleichen:);)

Übrigens: Das Problem mit >>Umlauten und Compiler<< kenne ich von den µC's her auch :), geht meistens ohne Fehlermeldung durch, das Progamm tut aber SEHR merkwürdige Sachen...

so, schnell Schluss machen sonst fällt mir noch mehr ein und wir haben dann eine Schnittstelle zur Schnittstelle:):).

Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

Das mit der Verkürzten Schreibweise geht leider nicht-,
wenn ich ObjektA in die Variable Andocken übertrage, krieg ich ja ObjektB nicht mehr rein-

also wäre die Variante mit 3 Variablen die bessere ( einzig mögliche? ).

Leider, Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Lutz,

... war eine nette kleine Übung in VB...

... vorab: das mit der verkürzten Schreibweise geht, man muß nur ein eindeutiges Trennungszeichen setzen. Da ";" schon von der Schnittstelle gebraucht wird, habe ich mich mal für das ">" entschieden. In der Beispielanlage "Andocken" = "Pyramide>Lok1" -> "Pyramide" folgt "Lok1" , "Andocken" = "Pyramide" -> Verbindung von "Pyramide" wird gelöst (Andocken ohne ">")

Das gleiche Trennungszeichen habe ich auch für die Variablen genommen, "Werteuebertragen" = "AVariable>BVariable" -> der Variablen "BVariable" wird der Wert von "AVariable" übertragen.

Beschreibung Beispielanlage: Jeweils mit "Zug betritt ein Gleis"

Die Variable "Aktion" habe ich mal doch noch verwendet, allerdings nur als Rückgabewert von VB an die EVW, damit evtl. ausgewertet werden kann, wann die Aktion (in VB) abgeschlossen ist, bzw. ob sie erfolgt ist.

Bei 1 (in EVW "Reset"): Die Variablen werden zurückgesetzt

Bei 2 (in EVW "Position"): Die Position von "Pyramide" wird ermittelt und den Variablen PosIst(x,y,z) zugewiesen (Aktion=4)

Bei 3 (in EVW "an"): "Pyramide" wird mit "Lok1" verknüpft (Aktion=1)

Bei 4 (in EVW "weg"): Verknüpfung von "Pyramide" wird gelöst (Aktion=2)

Bei 5 (in EVW "Variablen"): der Variablen "BVariable" wird der Wert von "AVariable" übertragen. (Aktion=3)

Bei 6 (in EVW "Setzen"): Den Variablen PosSoll(x,y,z) werden die Werte von PosIst(x,y,z) übertragen...

und die Pyramide an die Position von PosSoll(x,y,z) gesetzt (...beam me up) (Aktion=5)

... die Lok muß "manuell" gestartet werden... vielleicht nicht gerade losrasen lassen

Frilu01.jpg

Beim Senden von Kommandos "Send_Command..." gibt es in VB überall dort, wo der Name eine Objektes vorkommt, die Variante mit einer Fehlerabfrage. Ich habe es mal so gemacht, falls ein Objekt gelöscht oder umbenannt oder ein Schreibfehler vorliegt, daß von VB eine Fehlermeldung kommt. (...bei Variablennamen nicht!)

Überigens: Das was ich gemacht habe, die Verknüpfung setzen bzw. lösen, sollte man eigentlich nicht tun, solange sich ein Objekt bewegt (in diesem Fall die "Lok1"... es kann sonst zu (kleinen) Positionsfehlern kommen, die sich mit der Zeit aufsummieren...

... da "kundenspezifisch" habe ich mir in der Namensgebung "FriLu..." erlaubt... (...kann aber auch sonst verwendet werden, nur die "Austauschvariablen" müssen namentlich stimmen, da sie in VB "fest" hinterlegt sind.)

Ich hoffe, Du kannst es einigermaßen nachvollziehen...

In der .zip ist das MBS-Projekt, das VB-Projekt und die .exe.

P.S. ... ich weiß, daß man das VB-Skript noch "straffen kann" (nicht alle internen Variablen sind notwendig, aber ich halte es so für etwas übersichtlicher...)

Gruß

EASY

 

Frilu01.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

sei Bedankt für deine Mühe- das  Programm tut, aber leider geht es so nicht (mit zwei Variablen in einer): Mengenproblem:(.

Ich wollte ja ca. 24 Container mit ca. 17 Tragmitteln verknüpfen- über 4000 Einträge in der Verwaltung um alle möglichen Fälle abzudecken ist nicht machbar>:(.

Auch beim Variablen übertragen ist es ähnlich, man kann einfach nicht für jede Kombination ein Ereignis definieren,
demzufolge müssen die beiden Variablen getrennt übertragen werden- vielmehr die "Zeiger", also die Variablennamen.

 

Nochmal ein Versuch der Beschreibung ( man sollte Telefonieren, da ist es etwas einfacher ) :

Zum Schluss bemerkt, das es sehr unübersichtlich ist, deshalb hier die Verwendeten Variablennamen:
Standplatz 1
Traverse 1
WerteuebertragenRein
WerteuebertragenRaus
ObjektA
ObjektB

--Das Fettgedruckte sind die Namen der Objekte--

 

Die Traverse fährt auf Standplatz 1, dort befindet sich Container 12 ( Hinterlegt in der Variablen Standplatz 1 ).

Die EVW beschreibt die Variable WertuebertragenRaus mit  Standplatz 1,                                       // übergibt die Variablennamen
die Variable WerteuebertragenRein mit Traverse 1;

Das VB-Programm merkt die Änderung von Variable WerteuebertragenRein, holt sich den Inhalt von Variable WerteuebertragenRaus;

dann holt es sich den Inhalt von Variable Standplatz 1 ( Container 12 )                                           // wertet die Variablennamen aus
und schreibt ihn in die Variable Traverse 1

In der EVW wird die Variable ObjektB  mit Traverse 1 beschrieben,
die Variable ObjektA muss jetzt mit dem Inhalt von Variable Traverse 1 beschrieben werden ( also Container 12 ).       -Das wäre also der Variablen-übertragen-teil- 

//  Da ist zwar was doppelt, dafür sind die beiden Teile Wertübertragen und Andocken aber unabhängig voneinander //

Das VB-Programm merkt die Änderung von Variable ObjektA, holt sich den Inhalt von Variable ObjektB  und schickt die Verknüpfung Container 12+Traverse 1 ans Studio.

 

Beim Testen mit VB-Projekt ...fuer-Schnellversuche habe ich festgestellt, das Befehl 141 ( Verknüpfung aufheben ) nicht ( unbedingt ) notwendig ist,
einfach zum Absetzen mit der Bodenplatte verknüpfen, da die alte mit der neuen Verknüpfung überschrieben wird.

Puh, und das an einem Dreizehnten :).            sorry, musste sein...

Gruß Lutz

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Lutz,

... ich mal mal einen Versuch der Frage, da fertige Gedankengänge nicht immer leicht nachzuvollziehen sind.

Verknüpfung:

Variablen: "FolgeMir" = Objektname, "Folge" = Objektname; "Verbinden" = 1 -> Objekt mit dem Namen in "Folge" wird mit dem Objekt mit dem Namen in "FolgeMir" verbunden. "Verbinden" = 0 -> Verbindung von Objekt mit dem Namen in "Folge" wird aufgehoben.

Wenn sich "FolgeMir" oder "Folge" in der EVW ändert soll sich VB die neuen Objektnamen merken.

Variablenwert:

Variablen: "WertuebertragenRaus" = Variablenname; "WerteuebertragenRein" = Variablenname; "Uebergeben" = (eigentlich irgendwas) -> Variable mit dem Namen in "WerteuebertragenRein"  bekommt den Wert der Variablen mit dem Namen in "WertuebertragenRaus".

Wenn sich "WertuebertragenRaus" oder "WerteuebertragenRein" in der EVW ändert soll sich VB die neuen Variablenamen und deren Wert merken.

-> dies wäre meine Iterpretation von "Zeigervarablen"...

... dann kannst Du zu jeder Zeit ein "Verbinden" oder "Uebergeben" machen und zwischenzeitlich die Variablennamen zuweisen und deren Inhalte ändern.

... so? ...so ähnlich? ... fast?  ...so doch nicht?

Gruß

EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

jetzt war ich bemüht, mit jeweils 2 Variablen auszukommen und Du bringst wieder nr 3 ins Spiel...:):).

Im Ernst:  Das Studio teilt ja jede Änderung der Variablen mit und wenn man so Diszipliniert ist, die auslösende Variable immer als zweite zu ändern, brauchts eigentlich keine dritte- wenn das Prog aber mit einer dritten einfacher zu schreiben ist geht das natürlich auch.

Bei der Verknüpfung werden ja die Namen  von Objekten übergeben, die das Programm direkt "zurückschicken" kann,
bei Variablen ist das Problem das "Matroschka-Prinzip", es werden nur Variablennamen übergeben- in der ersten übergebenen steht der Wert, der in die zweite übergebene kopiert werden soll ( die Übergabevariablen "zeigen" auf die Variablen, deren Inhalt manipuliert werden soll ).

Und JA, so wie Du es beschrieben hast, sollte es funktionieren, man könnte dann sogar den "rückgabewert" in die Variablen "Verbinden" und "Uebergeben" schreiben -

zb.: 2 -> alles ist gut, weitermachen; oder FEHLER! -> lass dir in der Verwaltung was einfallen:P.

Schönen Restsonntag, wünscht

LUTZ
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo FriLu,

... ich habe das Programm mal umgestrickt, mit getrennten Variablen für das Andocken (Verknüpfen) und "Zeigervariablen" für den Variablenaustausch....

Andocken (Verknüpfen):

Variabe "Andocken" = "1" -> Objekt mit dem Namen in Variable "ObjektA" wird verknüpft mit Objekt mit dem Namen in Variable "ObjektB".

Variabe "Andocken" = "0" (oder etwas anderes außer "1") -> Verknüpfung von Objekt mit dem Namen in Variable "ObjektA" wird gelöst.

Variable "Werteuebertragen" = "[irgend ein Wert]" -> Der Wert der Variablen mit dem Namen in der Variablen "WertuebertragenRein" wird der Wert der Variablen mit dem Namen in der Variablen "WertuebertragenRaus" übertragen.

An "ObjektPos" und "ObjektSetz" hat sich nichts geändert.

Die Beispielanlage funktioniert immer noch gleich, mir die EVW ist angeglichen...

In der .zip ist das MBS-Projekt, das VB-Projekt und die .exe.

Gruß

EASY

Frilu01.zip

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...