Archiv verlassen und diese Seite im Standarddesign anzeigen : Rnbfra Multi-Thread und Netzwerkfähig mit GUI im www, jetzt
Helf mir mal bitte üer die Strasse und gib mir einen aktuellen Link.
https://www.roboternetz.de/wissen/index.php/Network_Controller/PC
https://www.roboternetz.de/wissen/index.php/Network_Controller/PC_Spezifikationen
https://www.roboternetz.de/wissen/index.php/Network_Controller/PC_Praxis
Ja, alles Baustelle, immer den Helm aufsetzen.
Gehbehinderte bitte immer den Stock mitnehmen :mrgreen:
marvin42x
14.10.2006, 15:16
@PicNick:
Baustelle:
Da ich ja beschlossen habe meine Anwendung zu zersägen stellt sich die Frage an welcher Stelle.
Im wesendlichen, denke ich, ist das schon klar. Ich würde aber gerne die Schnittstelle genauer mit Dir besprechen.
Du hast ja gesehen, dass ich den TCP -Kram bei mir schon in einer Klasse beheimatet habe.
Ich denke wenn ich Dich richtig verstanden habe, wird das auch konzeptionell so bleiben, nur kompakter und leicht zu handhaben.
Mein Bedarf wäre jetzt im Vorfeld entweder eine grobe Übereinkunft der Klassenaufrufe.
So etwas wie ClientSend(data,lenght), oder was in der Art.
Oder einen rudimentären Baustein. Der muss noch nicht richtig arbeiten aber zum ran denken zu gebrauchen sein. Das könntest Du mir mailen oder ähnlich weil das noch nichts aus dem öffentlichen Programm wäre.
Das hätte den Vorteil für mich, dass ich unabhängig von der endgültigen Fertigstellung weiterbasteln kann und am Ende nicht so arg danebenliege falls Das Konzept doch noch anders aussieht als ich es jetzt sehe.
Netter Gruß an den Hotspot südlich von mir
Ich würde sagen, wir behalten in der Version 0.1 konsequenterweise an der Prämisse fest, daß eine ID (class /Ident) gesamtsystemweit eindeutig ist. Das, was sich dynamisch ändern kann, ist der "Pfad".
Momentan, auch bei deiner GUI, isses ja so, daß jeder Slider ja seine Message mit einer Zieladresse (Class/ident) losschicken könnte und sie würde ankommen
Momentan tut RN-SERVER ja immer noch alles IP-Seitg broadcasten, d.h. auch irgendein Progress-Bar könnte seinen ADC-Wert nach der Absender Cls/Ident problemlos rausfiltern.
Also, eigentlich macht deine GUI ja ohnehin genau das, soweit ich das mitgekriegt habe. Ob dein Gui nun überladen ist oder nicht, im Prinzip is ja alles da.
Was wir da brauchen, ist jetzt eine definitive u. verbindliche Liste der IDs, damit das jeder einprogrammieren kann.
Ein Feature, was wir machen sollten:
Man kann sich von RN_SERVER die ID-Liste abholen, und jedes VB-Gerät kann sich dann aus einer Combobox die ID's selbst zuordenen, die er braucht.
Das sollt' man dann aber schon speichern können, damit man es nicht nach jedem Start wieder machen muß.
Nächster Step: Auch die IP-Clients liefern eine Art "I-AM" Liste ab, damit RN_Server auch zwischen den GUIs routen kann.
*luftholen*
Next: VB-seitig könnt' ich mir vorstellen, das jeder unserer "ID-Classen" auch eine VB-Klasse entspricht. Dann könnt man z.B. Servo-Slider einmal runterprogrammieren, und dann beliebig wo einbauen.
Also "LEGO" Prinzip.
marvin42x
15.10.2006, 13:21
Wohl gesprochen weißer Mann:
Insgesamt:
Bin ich ganz Deiner Meinung.
verbindliche Liste der IDs: Sehe ich auch so.
ID-Liste abholen und Combobox: So soll es sein.
IP-Clients liefern eine Art "I-AM" Liste ab: Die Götter haben meine Gebete erhört ;-).
Würde jetzt jemand beispielsweise auf die Idee kommen, die Funktionalität eines Orchestrators auszubilden. Könnten wir ihm sagen: Kein Problem, es existiert zu jeder Zeit eine aktuelle Kenntnis über den Netzstatus mit Informationen über alle Netzteilnehmer inklusive deren Adressierbarkeit. Aber das wäre natürlich nur dann wenn jemand auf die Idee käme.
"LEGO" Prinzip: freu freu, Das wird ein schönes System.
TCP-Class:
Ich gehe jetzt mal davon aus das sich da erstmal strukturell nicht viel ändert. Und klinke den jetzt in die jeweilige PC -Applikation ein.
Edit:
TCP-Class meint hier die Programminterne TCP/IP-Funktionalität. Nicht die Class aus der Adresse.
Netter Gruß
verbindliche Liste der IDs:
Wir werden in der Wiki einfach eine Liste beginnen, zumindestens das Wichtigste und Allgemeinste
..."I-AM" Liste abliefern............ID-Liste abholen
Für solche Sachen werden wir gleich in der "Klassenliste" fixieren (s.o), wie die entsprechenden "cls-ident" heissen, dann geht das ganz locker.
.. Combobox:
wenn wir mit den "Classes" strukturieren, ist vielleicht ein "treeview" übersichtlicher. Das können wir aber halten, wie wir wollen.
NumberFive
21.10.2006, 07:31
so habe jetzt mal die neuste version vom rn_server runter geladen.
mal sehen wann ich richtig zu testen komme der schnell test war erfolgreich.
Im Layer0 hat sich ja nix geändert so das ich schnell an den rest gehen kann. Leider verstehe ich die https://www.roboternetz.de/wissen/index.php/Network_Controller/PC_Spezifikationen
Seite nicht so wirklich.
Ist zb. HBT Heartbeat das erste Byte nach Target und source ?
wenn ja wie setzt sich Target und source zusammen ?
Ich werde mit wohl einen TCP -> Multicast Konverterschreiben dann kann ich meine Applaktion am Multicast stream lauschen lassen.
Warum ? ganz einfach dann kann ich in meinem Netz überall einfach lauschen und brauche keine IP adressen zu konfigurieren (DHCP).
Mehr als ein Robo im netz ist die an und abmeldung auch leichter.
Aber bis dahin werde ich noch viel Zeit brauche da ich meine Hütte her noch winterfest bekommen muß. Aussdem muß ich den Roboter kram erst mal wieder aus packen und sortieren. (Umzug)
@PicNick:
was sehe ich im log file ?
Gruß
marvin42x
21.10.2006, 10:31
Große Freude, NumberFive ist wieder da :-)
@NumberFive
Ich hätte großes Interesse auf der Basic -Seite ein bisschen Synchronisierung zu betreiben.
PicNick greift mir ja jetzt immer unter die Arme wenn es stockt und ich denke Projektseitig sind wir auch einer Meinung.
Das bedeutet praktisch, dass ich, wenn fertig, auch seine TCP/IP –Funktionalität verbauen werde.
Ich habe selber eine die jetzt läuft aber Standardisierung ist in.
Meine ersten Demo -Komponenten laufen schon und ich würde gerne mal ausloten ob wir was Gemeinsames haben.
Mit gegenseitigem Austausch von was weis ich.
@PicNick
Entwicklungsstand:
Es existieren jetzt 3 schlanke Mehr –Instanzfähige Einzelkomponenten die am Netzverkehr teilnehmen können.
Wer will kann dann 200 Servos über 200 Slider ansteuern :-)
Oder 100 AD –Wandler im Auge behalten :-)
Irgendwann bräuchte er natürlich noch mehr Monitore :-)
Die konfig Files dafür sind jetzt in Arbeit
Alles Demo, aber durchaus schon Funktionsfähig.
Simulator:
Wie schon bemerkt besteht ein Bedarf an einem künstlichen Datenstrom um Netzwerk-Komponenten zu testen, ohne jedes Mal die Hardware an den Tisch schieben zu müssen.
Mein Vorschlag:
Der RN –Server hat neben den normalen seriellen Schnittstellen ein Pseudo- –Com Port der eigentlich TCP/IP Port ist.
An den kann sich jeder einen Simulanten ranhängen.
Da kann es einen Standard –Simulanten geben aber auch Eigenbauten.
Dadurch würden wir ohne große Änderungen am Server im Konzept bleiben.
Ich habe auch keine darüber hinaus gehende Hintergedanken dabei…..
Server:
Kannst Du das Path-List Fenster größenveränderbar machen?
Ich freu mich immer so an dem Beteiligten –Baum.
Und ich sehe dann immer auf einen Blick wer dazukommt.
Netter Gruß
Tach, Männer !
@No-5 : HBT ist selbst ein Target
TCP bzw. Heartbeats dienen dazu, auch verlorengegangene / inoperable Teilnehmer erkennen zu können. Wenn alles nur forward-sendet, ist man nie sicher, wer dran hängt und wer nicht.
Im Moment geht ja alles noch mit Sichtkontrolle, aber wenn's richtig remote wird, ist die Sache verschärft.
Weiters sind durch TCP auch regelrechte Sessions möglich, mit eventuellen Geräte-reservierungen, d.h. wenn im Netz einer an einem Servo rumwerkt, kann es nicht gleichzeitig auch ein anderer tun. (ist aber dzt. nur eine Option)
Marvin: der rn-server ist dzt. noch wirklich ein sauhaufen. Die Skalierung der Fenster nach Window-größe ist ein Gefummel, das ich mir erstmal gespart habe, aber einfach größer ist wohl kein Problem.
:-) für 200 Servos brauch' ich auf jeden Fall 194 Simulanten. :-)
DLL für VB etc.: hab das angetestet, kein Problem, eigentlch sogar sehr einfach.
marvin42x
21.10.2006, 14:47
Status VB 2005:
MrNiemand war so nett eine frische XP Installation für einen Praxistest für die Problematik rund um
Visual Basic 2005,
Framework 2.0 und
Window Installer 3.0.
Zur Verfügung zu stellen.
Das Ergebnis war recht beruhigend.
Wenn die notwendigen Komponenten, also Framework 2.0 und Installer 3.0 installiert sind läuft das.
Diese Komponenten sind in Vista standardmäßig enthalten. Womit sich in ferner Zukunft der Aufwand verringert.
Was noch nicht geht ist eine Namensauflösung der Ziel –IP.
Es muss also derzeit noch die IP –Adresse eingegeben werden.
Eine tragbare Einschränkung erstmal.
Ansonsten läuft das grundsätzlich gut, eben auch quer durch die Republik.
Die Kontrolle ob 100 % jedes Datenpaket auch ankommt ist zurzeit noch nicht gegeben.
@PicNick:
Am neuen Server ist irgendwas mit der Durchleitung , was der alte vollständig macht.
Ich nehme für Datendauerläufe deswegen noch den alten samt alter µ Systeme.
Da im Moment eh alles am fließen ist, ist das nur als Hinweis zu sehen, wenn Du den mal am Wickel hast. Da Mein Programmer gerade den Geist aufgegeben hat kann ich noch nicht mal herausfinden wer hier nicht folgsam ist.
Netter Gruß
Ps. Wir machen bei reger Nachfrage ein Simulanten Heim auf :-)
marvin42x
26.10.2006, 12:47
@PicNick:
Läst sich bei Deinem Server eine Parameterübergabe beim Start realisieren?
Gemeint wäre:
Die IP Adresse als String
Der Port als String
Com Port als String
Baud als String
Das würde als Beispiel so aussehen:
rn_server.exe -127.0.0.1 -42 -1 -9600
Hintergrund ist die neue Architektur der Anwendungen bei mir
Ich könnte in einem Startcenter alles zusammen definiert starten.
Als 2. Alternative wäre auch ein Ini-File für den Server denkbar.
Netter Gruß
An sich ist beim RN-Server eine hierarchische Configurations-file vorgesehen (Menu "File") den Pfad könnt man sicher auch beim Starten mitgeben. Ist für die diversen Mapping-Einträge /-Trees und sonstige Parameter vorgesehen.
marvin42x
26.10.2006, 14:48
OK, dann geht das so.
Ich richte mich dann nach den Gegebenheiten.
Wäre ja auch denkbar das ich das ini mit auswerte.
Bisschen schmulen was er sich so als Port zum Start gemerkt hat ;-)
Netter Gruß
Gerne. Ist hierarchische Baumstruktur als editierbares Txt-file
EDIT: aufgebaut wie TREEVIEW, so etwa
marvin42x
26.10.2006, 17:37
Mit TREEVIEW oder Baumstrukturen habe ich noch nicht gearbeitet.
Das werde ich dann mal in meinen Stundenplan mit aufnehmen.
Letztlich hat mir das bei Deinem Server ja sehr gut gefallen.
Ich weis zwar noch nicht wie, aber das werde ich auch einbauen.
Wenn Du mal so ein ini-File ansatzweise fertig hast, lass es mir mal zukommen damit ich eine Vorstellung habe wie so was aussieht
Netter Gruß
Hallo, Marvin42xyz !
Da ist eine RN_Server.exe version.
1 Beim ersten mal starten "FILE-->NEW"
2 Größe ändern und am Schirm placieren
2b IP-Parameter u. Com Parameter einstellen (und ausprobieren)
3 "FILE-->SAVE AS" (irgendwo als irgendwas speichern)
Der Pfad dieser cfg-datei kann als Commandline genommen werden (file anklicken und über das RN-SERVER Icon drüberziehen) oder eben beim Starten angeben
Sollte alles Broadcasten (wenn's wahr ist)
Test-Meerschweinchen (quik, quik) sind erbeten.
Laß' hören !
marvin42x
27.10.2006, 21:29
So, der erste Schnelltest ist gelaufen.
Die Logfiles habe ich mal per Mail verschickt, die sind für hier zu lang.
sogar Größenveränderbar isser jetzt.
Das mit dem Ini File klappt auch wunderbar.
Er leitet die SourceClass aber noch nicht mit durch
Wo ich unsicher bin ob ich das richtig verstanden habe.
Du kannst das Ini File als Startargument mit angeben?
So etwa:?
RnServer.exe -RNCNFIG.CFG
Netter Gruß
RnServer.exe -RNCNFIG.CFG
Ohne dem Minuszeichen geht es. RnServer.exe RNCNFIG.CFG
Wenn ich die CFG von Hand lade vergisst der RnServer den TRACE zu übernehmen.
Wenn ich ihm die CFG aber beim Start mit gebe macht er es richtig.
marvin42x
27.10.2006, 23:11
Dank an die Vogonen für die Mithilfe.
Auf das einfachste kommt man manch mal nicht.
@PicNick:
Ich brauche noch eine Info wo ich Die Weisheiten für das TreeView herbekomme.
Der Server weis das ja aber die App will ja auch denselben Komfort bieten können.
Wenn jetzt die neue Servergeneration Einzug hält muss ich mich ja auch um ein I AM kümmern. Oder ist der da noch nicht so streng?
Netter Gruß
Edit: Ich meine die reine Bauminformation, wer da ist und wer nicht.
Tach, Männer !
TRACE, IPADDR, IPPORT, COM-NR, BAUD übernimmt er erst in die interene Registry, wenn man die entsprechenden Funktionen startet.
(Dadurch weiche ich in der Schnelle der "edit/undo" Fummlerei aus)
Im Moment nimmt er auch den Connection-Baum noch nicht in die Config, das hab ich noch nicht recht den Mittelweg zwischen "Feste Konfiguration" und "dynamischer Realität" gefunden.
IAM ist ihm auch noch wurst, das wächst erst.
TREEVIEW hat er in der Toolbox, am besten einfach damit rumprobieren. Ich hab mich im VB schon damit beschäftigt, bin aber noch nicht ganz glücklich mit den Referenzierungsmöglichkeiten.
Im Anhang eine willenlose Spielerei mit diversen Tools, die kannst Du wahrscheinlich schon viel besser, ich bin ja VBmäßig noch eine Null.
Kannst du mir noch etwas detailierter sagen, WAS er nicht weiterleitet (und was schon)
marvin42x
28.10.2006, 18:08
Wunderbar, TreeView steht auch erst an zweiter Stelle.
Das I AM noch nicht gefragt ist passt mir auch gut in den Zeitplan.
Woran ich starkes Interesse habe ist Die Option mit einem Client was zu senden was der Server dann Broadcastet. Mir wäre es sogar recht wenn der auf einem anderen Port sendet, dem Simulantenport.
Aber unterschiedlicher Port ist nicht Hauptsache.
Das ganze brauche ich für Mapbuilding Versuche und zur allgemeinen Netzaustestung.
Des Weiteren soll da später auch ein Datenbank Client senden können.
Durchleitung:
Alter Server:
Message Länge: 8Bytes 0 0 130 3 252 2 0
0
0
130
3
252
2
127
Message Länge: 8Bytes 0 0 130 2 150 0 0
0
0
130
2
150
0
22
Message Länge: 8Bytes 0 0 130 5 71 3 0
0
0
130
5
71
3
195
Message Länge: 8Bytes 0 0 130 6 69 3 0
Message Länge: 8Bytes 0 0 130 1 254 0 0
Message Länge: 8Bytes 0 0 130 0 64 1 0
Message Länge: 8Bytes 0 0 130 3 144 0 0
Message Länge: 8Bytes 0 0 130 7 255 3 0
Message Länge: 8Bytes 0 0 130 5 25 0 0
Message Länge: 8Bytes 0 0 130 2 21 1 0
Message Länge: 8Bytes 0 0 130 4 98 1 0
Message Länge: 8Bytes 0 0 130 6 60 2 0
Message Länge: 8Bytes 0 0 130 1 8 1 0
Message Länge: 8Bytes 0 0 130 5 232 2 0
Message Länge: 8Bytes 0 0 130 0 10 2 0
Message Länge: 8Bytes 0 0 130 3 96 1 0
Message Länge: 8Bytes 0 0 130 2 194 1 0
-Neure Server:-------------------------------------------------------------
Message Länge: 8Bytes 0 0 0 0 254 0 0
0
0
0
0
254
0
125
Message Länge: 8Bytes 0 0 0 0 76 3 0
0
0
0
0
76
3
202
Message Länge: 8Bytes 0 0 0 0 89 1 0
0
0
0
0
89
1
216
Message Länge: 8Bytes 0 0 0 0 28 1 0
0
0
0
0
28
1
159
Message Länge: 8Bytes 0 0 0 0 47 3 0
Message Länge: 8Bytes 0 0 0 0 0 0 0
Message Länge: 8Bytes 0 0 0 0 53 0 0
Message Länge: 8Bytes 0 0 0 0 252 0 0
Message Länge: 8Bytes 0 0 0 0 66 1 0
Message Länge: 8Bytes 0 0 0 0 39 0 0
Message Länge: 8Bytes 0 0 0 0 60 1 0
Message Länge: 8Bytes 0 0 0 0 196 1 0
Message Länge: 8Bytes 0 0 0 0 184 2 0
Netter Gruß
Ps. Danke für die Spielsachen, immer gern genommen.
ei, mir schwant ja schon der Graus'
Anbei ein Zip:
Das Prog
RNSI2C.BAS /BIN/HEX sollte in den CO-Proc
RNMASTER.BAS/BIN/HEX sollte in den Atmega32
Die sollten sich besser vertragen.
marvin42x
29.10.2006, 01:38
Das Sys ist gesprächiger :-)
Ich nehme das Sys gerne, weil es so schön vor sich hin plappert.
Das RNMASTER macht natürlich einen schöneren Treeview, muss man zugeben.
Netter Gruß
Alle gut in die Winterzeit gerutscht ?
Wenn Dinge kompliziert werden, hilft es manchmal, Schwerpunkte zu setzen.
Schau'n wir mal, daß die PC-Applikationen alle miteinander können, wenn du einverstanden bist.
Eigentlich sollte RN_SERVER alles, was bei IP einkommt, auf alle anderen IPs 1:1 verteilen.
Läßt sich das verifizieren ?
marvin42x
29.10.2006, 15:38
Danke, Gut reingerutscht, Heute noch keine Fehler gemacht.
Also dann…..
Server:
Ich denke wir können Erstmal auf direkte Adressierung verzichten.
Jede PC –Applikation horcht ob es für sie interessant ist. Wenn ja benutzt sie halt die Message.
Ob es Interessant ist erkennt sie ja daran, von wem das kommt. Das bedeutet das die PC-Apps Eine Identität brauchen die als Absender mit gesendet wird. Bei 3 Slidern im Moment kein Problem.
Neue Gegebenheit:
Da wir jetzt ein neues Konzept von Einzelkomponenten verfolgen stellt sich eine neue Option:
Es ist bei meinem Projektteil vorgesehen.
1. Zusammenrottungen von Einzelkomponenten zu einer GUI als Verein zu behandelt.
2. Das sich beliebig viele unterschiedliche Vereine jeweils über ein Konfigurationsfile bilden können.
Diese Vereine die sich da bilden sollten auch einen Namen, oder Nummer haben.
Das ganze sehe ich unabhängig von dem gesendeten RN –Anmeldestring via Server
Frage:
Wie wollen wir das Adressmäßig lösen?
Netter Gruß aus der neuen Zeit
marvin42x
29.10.2006, 16:07
Software Entwicklung:
Visual Basic 2005:
Ich sehe im Laufe der Arbeit, dass sich viele Softwarebausteine bilden.
Aus meiner Sicht ist es Arbeitssparend wenn wir einen Pool gemeinsamer Komponenten bilden würden die wir einheitlich benutzen und weiterentwickeln.
Wir würden auch, da es ja Open Source ist, Anderen die Möglichkeit geben, einzelne Komponenten zu benutzen, die sie nicht extra selber schreiben müssten.
Beispiele sind ein Errorhandler, Ein IniFile Erzeuger, ein Treeview, eine Singleton Fenster Routine, usw.
Das gilt logischerweise jeweils nur für eine, jetzt meine, Programmiersprache.
Als Testlauf kann ich mir das auch als separaten Ablauf vorstellen in dem nur Entwickler und Komplizen von Entwicklern Zugang haben. Wenn uns das nicht gefällt können wir es auch wieder sein lassen.
Mein Motiv dabei ist.
Eine Homogene Softwareumgebung zu erstellen die leicht zu Pflegen und zu Verbessern ist.
Die begrenzte Zeit die ein jeder hat zu schonen.
Der Bausteinbildung Vorschub zu verleihen
Zu einem guten Ergebnis zu kommen.
Von Anderen und ihrer Arbeit zu profitieren :-) .
Wie gesagt, das alles ist ein Vorschlag von mir unter dem Aspekt, dass es ja eh Open Source werden soll.
Netter Gruß
uff, uff, ne menge.
GUI e.V. : Wir haben dzt. eine Identität so eines Vereins, nur ist das halt nur Text. Auch ohne spezielle IAM könnt' da noch eine Netz-ID reinquetschen.
Aber besser wär's, überhaupt zu einem formalen Aufbau zu wechseln, solange wir noch jung sind. Denn bald werden auch die Versionen eine interessante Information sein. ("hat der dieses oder jenes schon drauf oder nicht")
Mir wäre es einfach, wenn wir da ein Key-Value-Format nehmen würden
Key1=value1 , Key2=value2 , ....;KeyN=valueN
ID=nnnnn , NAME=aaaaaaaaa , VERS=mmm , DESCRIPT=aaaaa
(alternative statt "ID" IDC=class, IDI=ident )
Für den Absender isses so soder so nur ein String, aber ich tu' mir leicht beim zerlegen, und wir können jederzeit was hinzufügen, ohne bestehende Applikationen zu tangieren.
Also:
KEY ID, IDC, IDI, VERS, NAME, ......
"="
value numerisch oder text, je nachdem (nix hexadezimales)
"," Argument-Seperator oder nix, wenn nix mehr kommt
Reihenfolge egal, alles optional ( Wenn keine ID, dann hat er eben keine)
Das "RN" am Anfang müßte dann nicht mehr sein
*puff* für Erste
*next*
Für das Startup ist die Zusammensetzung eines GUI e.V. natürlich wichtig. Aber beim laufenden Betrieb bin ich mir jetzt nicht sicher, was eine GUI-ID für eine konkrete ´Bedeutung hat.
Gibt es die gleiche Komonente (ID-mäßig) in verschiedenen, gleichzeitig laufenden GUI e.V ?
Kannst du einfach mal vor Dich hinspinnen und erzählen, wie du dir so eine Roboter-Session idealerweise vorstellst ?
Die Frage geht danach: Was ist dynamisch variabel, und was ist fest definiert ?
(Ich mein, dem Robby kann ja kein neuer Haxen wachsen, nur weil man auf der anderen Seite einen Slider dazustartet)
marvin42x
29.10.2006, 17:53
GUI e.V. Teil 1:
Hört sich sehr gut an.
Machen wir erstmal so.
Du brauchst das für den Server ja noch nicht so dringend einbauen wenn der erstmal nur beim Broadcasting bleibt.
Broadcasting würde mir im ersten Schritt schon reichen.
Den Rest wickeln ja dann Die PC-App’s ab.
Damit hast Du mich schon mal vom Hals und deine Ruhe :-)
Netter Gruß
Ok, wie gesagt, eigentlich sollte er das broadcasten machen. Bitte schau mal, ob's wahr ist
(Nicht die erste "ID" Message, logo) Oder soll er doch ?
marvin42x
29.10.2006, 18:41
GUI e.V. Teil 2:
Was mich interessiert ist die Interaktion von PC-Apps untereinander.
Dem armen Robi können ja, wie Du schon sagtest keine extra Beine wachsen.
Vorspann:
Wir haben eine Situation wo die PC und Internetseite wartet.
Die 3D Fraktion kann ohne RN Datenstrom nichts Darstellen.
Die Mappbuilder können ohne den Unterbau eines Netzwerks keine vernünftige Entwicklung voranbringen.
Marvin42x braucht Datenströme für seinen kleinen RN Zoo
Selbst die Motorrad -Scheinwerfer –Verstell -Fraktion könnte besser entwickeln.
Auch die Vogonen könnten mit Hilfe des RN-Netzes die Herrschaft über die Rasenmäher erringen.
So, ich hör mal auf, das würde noch so ne Weile weiter gehen.
Nachspann:
Also.
Das Zentrale Start Center MARV (Marvin’s Administrations and Remote Viewer)
Ist der Ausgangspunkt.
1. Ini File für die Session1 wählen. z.B. „Rasenmäher3.ini“
2. Starknopf drücken
3. Es werden gestartet:
• Rn-Server mit Konfiguration
• 5 Slider
• 1 Radar
• 8 Levelmeter
• 1 Graph
• 1 PC –App Mappbuilder V.2.1
• 1 PC App Erkennungssystem Datenbank
• 1 PC –Datenlogger Datenbank
• 1 PC –Videosystem mit Streaming
• 1 PC -ÜbergeordnetesVerhaltensModul
Session2:
Ini File „MappEntwicklung.ini“ wählen.
Startknopf drücken.
Es werden Gestartet:
• 1 PC -Simulant, der einen Datenstrom erzeugt, als wäre er ein Roboter
• 1 PC Map Displayer
• 1 PC Verhaltensmodul
• 1 PC Map Analyser
• 3 Slider
• 3 Graphen
• 1 Radar
• 1 PC 3D Display
Session 3:
………..
…………
Ja, es gibt naturgemäß in jeder Session z.B. Slider, deren Class und ClassID sind nur unterhalb einer GUI ID eindeutig.
Das schöne ist, das Du die Komponenten für alles verwenden kannst.
Wenn Du willst kannst Du auch Dein Intelligentes Haus damit verwirklichen.
Uff, Verschnaufpause.
Erstmal Genug.
Sacken lassen.
Und Respons abwarten.
Broadcast:
Wusste ich gar nicht, Das er das macht.
Da müsste ich ja ein Echo von meiner Message erhalten?
Netter Gruß
..ja ein Echo von meiner Message ..
Der einzige, der nix kriegt, ist der Absender. Das schien mir zu schleifen-gefährlich. Auch darüber kann man natürlich reden.
Sessions: I see. d.h. wenn das Setup mal steht, is alles klar.
Was man zuvor ganz einfach braucht, ist ein "config-designer". Mit intuitiver Bedienung, versteht sich.
Und einen Cyber-Atmega als simulanten.
Irgendeine innere Stimme sagt mit, daß wir noch einen Haufen Arbeit haben :-)
marvin42x
29.10.2006, 19:13
Zitat:
Irgendeine innere Stimme sagt mit, daß wir noch einen Haufen Arbeit haben
:-) :-) :-)
Nee kein Sorge.
Wir schaffen nur die Optionen dafür.
Hi hi.
Zitat:
Der einzige, der nix kriegt, ist der Absender.
Das ist ja super so.
Wenn wir die Identifikationen auf die App –Ebene legen ist ja hier erstmal alles gegessen.
Fast alles ;-)
Jetzt kommen Apss die längere Messages benötigen.
Sagen wir mal, ……..
Mir fällt gerade nix ein.
Aber nehmen wir mal an einer will partout eine Bitmap übertragen.
Wie lösen wir das?
Netter Gruß
Mit langen Binärschweinen ist das etwas ambivalent.
Solange wir für die Applic. das Netzwerk transparent halten, kann eine Message immer auch über einen µC laufen, und da hat es Grenzen bei der Größte. Da MÜSSEN wir die Bitmap in Slices zerteilen. Das hat auch den Vorteil, daß sich der andere Traffic dazwischenschummeln kann und nicht zum Stillstand kommt.
Da werden wir wohl noch nachdenken lassen, damit wir nicht gar so schnell unsere eigene Regeln austricksen müssen.
marvin42x
30.10.2006, 09:29
So weit so gut.
Wenn der Server so tut wie erwartet, habe ich, glaube ich, erstmal alles was ich benötige.
Die Woche bin ich mit der Zeit etwas knapp.
Ich werde aber trotz dem versuchen ob ich nächste Woche eine kleine Demo zur Diskussion bereitstellen kann.
Netter Gruß
marvin42x
30.10.2006, 10:08
Na das geht ja gut los :-)
Nach dem ich nun gesagt habe, ich habe alles.
Hier der erste Wunsch:
Kannst Du an Deinem Server eine CheckBox „Fast Connect“ anbauen?
Der Wert FastConnect sollte dann auch in Deinem Config File auftauchen und ausgewertet werden.
Im Falle in dem in der Server Config Fast Connect auf 1 gesetzt ist startet der Server sofort alle Verbindungen. Wenn Fast Connect = 0 macht er keinen Connect
Hintergrund:
Ich möchte schon bei der Demo unmissverständlich klarmachen:
Ein Knopfdruck und die Sache läuft.
Dazu ist es notwendig, dass ich, wenn ich den Server als erstes starte steuern kann das er ohne weitere Zutun Online ist. Die folgenden Apps werden dann dasselbe tun.
Damit steht das System komplett mit laufendem Netz.
Sag mal bescheid ob Du damit einverstanden bist.
Netter Gruß
:mrgreen: das übliche User-Verhalten
Vorher: "Ich möcht ja nix als dieses oder jenes
....
Nachher: "Könnte man nicht noch......."
Kein Einwand, mal sehen, wie ich dazukomm'
:mrgreen: das übliche User-Verhalten
Keine Ahnung aber rum meckern: :-#
Ich habe das laden der .CFG nochmal probiert.
Den Pfad "TRACE" will er bei mir nicht aus der Datei laden. Bei IP und ... geht das richtig. [-o<
Vogon: Das werden wir noch klären, daran wird's nicht scheitern.
Ich werke grad' an einer VB-fähigen DLL + Demo für
erstmal Conifg-Files Manipulation (Load, read, write, update, Flush)
sieht gut aus, demnächst Liefertermin
marvin42x
30.10.2006, 17:53
@PicNick:
Das überschlägt sich ja hier.
Bei dem Tempo muss man ja aufpassen, dass einem nicht die Mütze vom Kopf weht.
Im Detail:
Scheinbar lohnt es sich auf Software-Ebene eine Art Abstimmung einzuleiten.
Ich arbeite gerade angestrengt an der Konfiguration meiner Anwendung.
Dazu benutze ich Ini Dateien, schreibe und lese darin.
Wenn demnächst eine DLL ins Haus steht werde ich natürlich die einbauen damit das alles ein Guss wird.
Im Klartext, ich werfe eine menge Arbeit in die Tonne.
Darum mein Vorschlag:
Eine Art Frühwarnsystem einzurichten an dem ich meine Aktivitäten ausrichten kann.
Vielleicht so eine Art Liste von Dingen die Dir vorschweben.
Hoffentlich schwebt Dir viel vor ;-)
Keine Ahnung wie wir das realisieren, aber es dürfte sich für das Projekt lohnen.
Auch die Definition von Software –Schnittstellen würde ich gut finden. Dadurch wird das Ganze schön Strukturiert.
Zum Schnittstellen festlegen würde ich Dich als Häuptling wählen.
Du hast sicher einen geschärften Blick für so was.
Server:
Der Vogone hat recht, mit dem Aufruf des Servers einschließlich Config bekomme ich das nur über ein *cmd hin in dem die Komandozeile steht. Dann habe ich aber ein offenes Konsolefenster am Hals.
Ich kann Dir eine Ultraleicht-Demo schicken, da kannst Du das mit dem Aufruf aus MARV raus untersuchen. Das ist bestimmt nur eine Kleinigkeit.
Der neue sollte dann auch kein RN mehr vom TCP Client verlangen? Mir war so.
Ausblick:
Ich bin ganz hibbelig. Das was wir hier machen wird ein ganz tolles Ding.
Und ich freu mich schon auf die ersten Gehversuche von alle dem.
Das macht richtig Spaß.
Netter Gruß
Das mit der config File war urspünglich nicht so bös' gemeint. Ich hab halt der Einfachheit halber für den RN-SERVER das verwendet, was ich sozusagen in der Lade hatte (Ich brauch' sonst immer Plattform-neutrale Sachen). Der Witz daran ist der, das sie nach dem Laden real im Speicher als hierarchischer Tree zur Verfügung steht, man muß nicht immer jeden Sch... in irgendein feld schreiben, um es sich zu merken, und den ganzen Tree zu lesen oder auf File zu flushen, geht auch elektrisch. Arbeitet sehr ähnlich der Registry in Windows
Dann ist eben der Gedanke der zentralen Config aufgetaucht, und da kann so ein Tree schon hilfreich sein, wenn man ihn mit der gleichen Struktur aufbaut wie eben die ganze Applikation.
Ich werd' die Doku + Demo zum Download herrichten.
Das ist eine DLL, die direkt von allen DLL-Fähigen Programmen verwendet werden kann. Die Funktionen im Wesentlichen
Create (empty) Tree
Drop Tree
Build (file-name-string) Einlesen ganzer Tree
Flush (file-name-string) Rewrite ganze Tree
Create/Delete/Find Directory "Knoten"
Create/Delete/Find Parameter "Key"
Create/Delete/Find Value "Value"
Primär ist alles auf string-basis, weil das überall geht.
Ich möcht noch die IP-Geschichte verpacken, das haben wir ja schon abgedeutet. Von den Funktionen her eigentlich wie die normale Socket-Geschichte, nur das Message-Zerlegen und Aufbauen ist integriert.
Eventuell auch die Layer0-ComPort Sache, die könnten ja vielleicht auch endere brauchen.
Und diverses Bit und Byte-gefummel, das immer wieder nervt.
Die meisten Sachen gibt's ja schon, es geht nur darum, wie man das vernünftig mit einer DLL exportieren kann.
Ja, der neue will kein "RN" mehr (is aber noch in Arbeit, mit der "fast-connect" Geschichte)
Doku hab' ich begonnen :
https://www.roboternetz.de/wissen/index.php/Network_Controller/PC_PC-Programme
Gerade Marvins Marvellous MARV getestet.
Überleg' grad, ob EINE zentrale ini/cfg überaupt zweckmäßig ist
Also:
MARV weiss, was wie oft zu starten ist + einige setup parameter
Aber die einzelnen Komponenten könnten durchaus auch ein Eigenleben führen.
*murmel, grübel*
marvin42x
30.10.2006, 20:31
Sorry, bin auch schon wider runter vom Baum. War ein harter Tag.
Und Du weist, ich habe es schon viermal neu geschrieben und ich schreibe es wenn es sein muss auch zehn mal neu.
Das mit der einheitlichen Cofig-Geschichte und dem Tree ist Genial.
Das ist viel besser als das was ich habe.
Das eignet sich fast als Geburtstagsgeschenk :-)
Das Du unter Anderem bei der Bit und Byte-Fummelei noch hilfst entspannt mich ungemein.
Es ist ein ziemlicher Graus, wenn man sich das alles zusammensuchen muss.
Ich mach jetzt erstmal mit meinem Zeug so weiter und werde nach und nach mit den Sachen mitziehen.
Was schön ist, dass ich einige Probleme die noch ausstehen erstmal parken kann und da nicht so viel Zeit verwenden muss.
Bin schon wieder ganz oben auf :-)
Freu mich.
Netter Gruß
Ps. Sehe gerade es ist angekommen.
Fein
marvin42x
30.10.2006, 20:35
Bei der Ini –Sache bin ich ganz offen, der beste Vorschlag gewinnt
Netter Gruß
marvin42x
30.10.2006, 21:24
Erläuterung des bisherigen Konzepts:
Jede Einzelkomponente trägt sich höchstpersönlich in das Config File mit einer eigenen Rubik ein, wenn man sie positioniert und eingestellt hat und den save Config Button drückt.
Jede Komponente hat seinen eigenen Save Button.
Die Komponente könnte auch als Einzelkämpfer auftreten.
Dann ist halt das Ini File kleiner.
In Arbeit ist zurzeit der Wechsel zwischen verschiedenen Konfigurationen.
Sprich Config Files dadurch entstehen dann unterschiedliche EV.’s.
Die Info welches Config nun das angesagte ist soll als Pfadangabe über ein Start-Argument in der Komandozeile an die startenden Einzelkomponenten mitgegeben werden. Dort wird ja bereits eine laufende Nummer mitgegeben die zum Bestandteil des Namens wird, also der ID „Trackbar 1“ z.B.
Weiter ist angedacht dort auch IP und Port und eventuell Komponentennamen zu übergeben.
Das managt MARV.
MARV weis ja was es tut,(hoffentlich) .
Weiter Merkt sich MARV die TaskID und kann beim drücken vom Aus Button alle gestarteten Tasks anhand der TaskID wieder abräumen.
Später sicher auch in einer Auswahl gezielt einzelne.
Jetzt der Schwenk zur Kür:
Geplant ist eine Remote -Funktion der Komponenten wenn sie erstmal online sind.
Das geschieht über IP Messages mit Befehlen. Damit kann man sie im laufenden Betrieb verschieben, vergrößern, verkleinern, Wertebereiche umstellen. Na das Ding wird damit lebhaft wie ein Floh, wenn man will.
Das kann man natürlich auch benutzen um die Komponenten erst nach dem Start anzuordnen. Oder umzuordnen falls sich Gegebenheiten verändern.
Auch kann man darüber die Komponente beenden.
Puhh….
Erstmal genug.
Man kann sehen, dass das RN-Com eine weit offene Architektur hat. Da bleibt kein Auge trocken und keine Seele ungetröstet.
Netter Gruß
marvin42x
30.10.2006, 22:09
So jetzt noch der Rest:
Es ist dem geneigten Leser natürlich schon klar, dass mit der TCP Remote –Funktion auch ein Roboter seine eigene GUI starten und konfigurieren kann. Der Befehlsumfang und die Parameter sind ja nicht sehr aufwendig.
Wenn ein RN-Server und ein MARV online sind, ist fast nicht unmöglich.
Netter Gruß
marvin42x
31.10.2006, 09:27
Apropos Typisches Userverhalten: :-)
Ich hätte da einen Wunsch: :-)
Wenn ich mich jetzt mal auf mein Konzept beziehe.
Würde es reinpassen wenn der Server die TCP -Befehle:
Form.Hide
Form.Show
Form.Minimize
Form Resize
Können würde.
Aus dieser Anforderung raus stellt sich dann die Frage eines einheitlichen TCP-Befehlssatzes oder Formates.
Da diese Befehle ja für alle Komponenten funktionieren sollen.
Mein Vorschlag:
Es wäre lieb, wenn Du die Definition dafür vorschlägst und wir die dann festlegen.
Die Notwendigkeit, dass der Server oben genannte Befehle kann ist nicht eilig.
Er dient jetzt erstmal nur als Vehikel um dieses Feature fertig zu definieren.
Außerdem weis ich noch nicht ob Du damit in der Form einverstanden wärst.
Netter Gruß
marvin42x
31.10.2006, 09:38
Weiter geht’s
Ich mach heute den Alleinunterhalter :-)
Jetzt eine Übersicht über TCP –Standardbefehle:
Das schwebt mir so vor:
Form.Hide
Form.Show
Form.Minimize
Form Resize
FormPosX
FormPosY
FormSizeX
FormSizeY
Close(Programmende)
CurrentConfig
Save Config
Load Config
Set Value, (welcher Wert), (Wert)
StartAction (irgend eine Aktion)
Na und was noch so kommt…….
Netter Gruß
OT (Now to something completely different)
Da is eine Zip, wo ich so eine Art digitalmixer mit einer ähnlichen Aufgabenstellung wie MARV gemacht habe (is schon älter)
unzip
wenn's auf der disk c:\ ist:
Start MX0.EXE
FILE->OPEN-> "saurier.mix"
DRV -> (right-mouse for config)
TRANSPORT-> Start / STOP / ZERO
bißchen rumdrücken, doppelclicken und right mouse Menues
Wenn's Spaß macht.
..den Alleinunterhalter ..
Na, du hast ja auch ein umfangreiches Programm, wo sicher noch ein paar Zugaben kommen :-)
Ich hab' schon mal den Helm aufgesetzt und bin in den Schützengraben gekrochen. Da wird js scharf geschossen. :-)
marvin42x
31.10.2006, 10:54
Ich glaub es ja nicht.
Das hast Du ja alles schon mal gemacht.
Da ist ja alles wie es sein soll.
Da müssen wir aber zusehen, dass wir für das jetzige Projekt ein gemeinsames Konzept haben was die Erfahrungen von Deinem Mixer verwertet.
Du hast ja ungeahnte Qualitäten :-)
Da muss uns ja nicht bange sein.
Jetzt habe ich natürlich ein Informationsdefizit in Hinblick auf das Konzept was dem Mixer zu Grunde liegt.
Das was ich bis jetzt von mir beschrieben habe ist ja die Beschreibung eines Konzepts.
Und Konzepte kann man wechseln wie die Socken.
Den Mixer kann man bestimmt Recyceln :-)
Netter Gruß
...kann man bestimmt Recyceln ...
Ja, in den Müll :mrgreen:
Aber ich hab natürlich was gelernt dabei.
BTW: ich find' da grad eins meiner (Test) Programme für Video files u. Video Capture devices. Soll man das auf DLL umbauen, damit du deinen Karaoke Hamster realtime gucken und analysieren kannst ? Reicht ja, wenn sich einer die Hände gebrochen hat.
Oder hast du das eh' schon fertig ?
marvin42x
31.10.2006, 12:32
Das wird ja immer besser.
Mein Hamsterviewe geht natürlich schon. ich wäre aber an einer Lösung von Dir mehr interessiert.
Meine Erfahrung hat gelehrt, das ich besser damit fahre :-)
Wenn das noch in einer Dll eingepackt ist wird die Softwarelandschaft auch schön homogen.
Weißte doch, Standardisieren auf Teufel komm raus.
Und wenn sich einer schon einen Abgerackert hat soll das genug sein. Ich bin kein Masochist und verlange nach extra Schwierigkeiten.
Netter Gruß
marvin42x
31.10.2006, 13:00
Mixer:
Einen Unterschied glaube ich beim Mixer zu sehen.
Der Taskmanager erzählt mir von einem Multi Window Konzept.
Wir haben uns ja diesmal auf ein Multi Task Konzept geeinigt.
Was bei der Frage der Kommunikation zwischen den Komponenten möglicherweise andere Erfordernisse hat.
Im Erscheinungsbild ist aber genau das wieder gespiegelt was ich gerade baue.
Bin ja gespannt was daraus wird.
Netter Gruß
Nun, die Funktionalitäten der Mixer-Komponenten unterscheiden sich von unserem Konzept nicht so sehr. Die von dir genannten Form.xxx Methoden braucht man so oder so.
Beim Mixer haben sie natürlich im Betrieb recht flott zu kommunizieren, das geht natürlich bei multi-window einfacher.
Ich hab das so, daß es eine allgemeine "Komponenten"-Klasse gibt, die die Komponenten erben. Dadurch sind aus zentraler Sicht die allgemeinen Funktionen und Felder(eigenschaften) einfach über diese einzelne Klasse anzusprechen, egal, was die Komponente sonst darstellt.
Das ist praktisch bei so Dingen wie minimize & restore, das gibts als methode eben nur einmal und in der Komponente selbst braucht man da garnix mehr.
Na schau'n wir mal.
Meerschweinchen gefragt !
Da ist ein VB Projekt mit dem Versuch, eine "Config-File" mit TREEVIEW zu kombinieren.
Theoretisch, wenn du es aufmachst und im Debug laufen läßt, sollte es sich bewegen.
Die Config-File ist halt irgendeine, die ich erwischt habe.
Es geht aber auch jede andere
Vielleicht guckst du mal rein, drückst eiin paar knöpfe und schaust die die VB mal an, ob du was erkennen kannst.
DOku folgt. Ich bin mir über die Schnittstelle noch nicht so sicher, zu viel soll's nicht sein, zuwenig aber auch nicht.
(Im Textfeld kann man die werte alle ändern)
marvin42x
31.10.2006, 17:43
Microsoft (R) Visual Basic-Compiler has encountered a problem and needs to close. We are sorry for the inconvenience.
Prima, eine CompilerBombe.
Wie haste denn die Programmiert?
Das ist bestimmt nicht einfach.
Wenn ich mal fortgeschrittener bin versuche ich mich auch mal an so was.
Harr harr hi hi.
Mach Dir nichts draus, das Leben geht weiter.
Netter Gruß
marvin42x
31.10.2006, 18:03
Nee, jetzt mal Quatsch bei Seite.
Ich muss mal sehen, er behauptet die Dll nicht zu finden, auch wenn ich sie in die Projektmappe einfüge.
Damit ist aber erstmal der Compilerabsturz vom Tisch.
Einen Verweis darauf kann ich auch nicht hinzufügen weil er sagt das ist möglicherweise keine compatible.
Ich versuch mich noch dran. Es ist ja gleich die Frage mit den Dlls.
Netter Gruß
Ich werd mal den Gegenversuch mit der Express-Version machen. Hoffe, daß es nicht daran liegt.
Wie gesagt, in der declaration muß der Pfad stimmen, also ev. korrigieren
declare Tralala LIB "C:\da\und\dort\rnregist.dll" etc.
EDIT: Nein, auch mit der Express geht es tadellos.
Ich hab die gepostete Zip runtergeladen , in ein verzeichnis
d:\VB2005_exp_ed
und dort aus der zip dann
d:\VB2005_exp_ed\tooltest......
erzeugt.
Da hab ich jetzt aus der Ferne im moment auch keine Weisheiten :-(
Jetzt hab' ich die DLL dorthin kopiert /verschoben, wo auch das Tooltest.exe nach dem Veröffentlichen hinkommt.
Dann von DORT in den Projektordner aufgenommen
Dann Tooltest veröffentlicht.
Da klappt es auch.
Für den Registry/config Filenamen sollt' man ein Eingabefeld machen.
EDIT: Ja schön, aber dann noch einen "OPEN" Button dazu
Den TreeView aufbau kann man dann aber nicht in "Form-Load" machen, sondern in der Open-Button-routine
eieieiei
marvin42x
31.10.2006, 22:28
Vier Dinge:
Eins:
Ich habe mal Test weise eine Dll aus dem Internet eingebunden, das ging ohne Aufhebens.
Ich musste noch nicht mal einen Verweis hinzufügen.
Zwei:
Ich weis nicht wo Du den Pfad hinschreibst:
Zitat:
declare Tralala LIB "C:\da\und\dort\rnregist.dll" etc.
Also in dem Projekt existiert das nicht.
Drei:
Irgendwas ist bei Dir anders als bei anderen Menschen.
Vier:
Ich habe das an zwei verschiedenen Rechnern ausprobiert immer mit dem gleichen Ergebnis.
Habe das einem Anderen gegeben der hat das bei sich gemacht , mit dem selben Ergebnis.
Es steht also 3 zu eins für mich.
Netter Gruß
Das ist Form1.vb
Imports System.Runtime.InteropServices
Public Class Form1
Dim heute As Date
Dim yy As Int16
Dim mm As Int16
Dim dd As Int16
Dim DllVal As Integer
Dim Selected As Integer
Dim NodSel As System.Windows.Forms.TreeNode
Dim RegTop As Integer
Dim RegistryName As String
Declare Function RnRegistInit Lib "rnregist.dll" () As Integer
Declare Function RnRegistRead Lib "rnregist.dll" (ByVal top As Integer, ByVal filename As String) As Integer
Declare Function RnRegistFlush Lib "rnregist.dll" (ByVal top As Integer, ByVal filename As String) As Integer
Declare Function RnRegistNextDir Lib "rnregist.dll" (ByVal Hd As Integer, ByVal pre As Integer, ByVal dir As String) As Integer
Declare Function RnRegistFindDir Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String) As Integer
Declare Function RnRegistCifDir Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String) As Integer
Declare Function RnRegistNextPar Lib "rnregist.dll" (ByVal Hd As Integer, ByVal pre As Integer, ByVal dir As String) As Integer
Declare Function RnRegistFindPar Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String) As Integer
Declare Function RnRegistFindParDef Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String) As Integer
Declare Function RnRegistCifPar Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String) As Integer
Declare Function RnRegistNextVal Lib "rnregist.dll" (ByVal Hd As Integer, ByVal pre As Integer, ByVal dir As String) As Integer
Declare Function RnRegistCifParVal Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String, ByVal val As String) As Integer
Declare Function RnRegistCifParValSet Lib "rnregist.dll" (ByVal Hd As Integer, ByVal dir As String, ByVal val As String) As Integer
Declare Function RnRegistDrop Lib "rnregist.dll" (ByVal Hd As Integer)
Declare Function RnRegistName Lib "rnregist.dll" (ByVal Hd As Integer, ByVal name As String) As Integer
Declare Function RnRegistNameSet Lib "rnregist.dll" (ByVal Hd As Integer, ByVal name As String) As Integer
Declare Function RnRegistRef Lib "rnregist.dll" (ByVal Hd As Integer) As Integer
Declare Function RnRegistRefSet Lib "rnregist.dll" (ByVal Hd As Integer, ByVal ref As Integer) As Integer
Public Sub New()
InitializeComponent()
Selected = 0
End Sub
Private Sub Tree_build_node(ByVal head As Integer, ByVal TreeHdr As System.Windows.Forms.TreeNode)
Dim pdir As Integer
Dim ppar As Integer
Dim pval As Integer
Dim DirName As String
Dim ParName As String
Dim ValName As String
Dim NodSub As System.Windows.Forms.TreeNode
Dim NodVal As System.Windows.Forms.TreeNode
DirName = New String(" ", 64)
ParName = New String(" ", 64)
ValName = New String(" ", 64)
pdir = RnRegistNextDir(head, 0, DirName) ' get first param
While pdir <> 0 ' while params
NodSub = New System.Windows.Forms.TreeNode
NodSub.Text = DirName
NodSub.Tag = pdir
TreeHdr.Nodes.Add(NodSub) ' create treeview
Tree_build_node(pdir, NodSub)
pdir = RnRegistNextDir(head, pdir, DirName) ' get first param
End While
ppar = RnRegistNextPar(head, 0, ParName) ' get first param
While ppar <> 0 ' while params
NodSub = New System.Windows.Forms.TreeNode
NodSub.Text = ParName
NodSub.Tag = ppar
TreeHdr.Nodes.Add(NodSub) ' create treeview
pval = RnRegistNextVal(ppar, 0, ValName) ' get first value
While pval <> 0
NodVal = New System.Windows.Forms.TreeNode
NodVal.Text = ValName
NodVal.Tag = pval
NodSub.Nodes.Add(NodVal) ' create treeview
pval = RnRegistNextVal(ppar, pval, ValName) ' get first value
End While
ppar = RnRegistNextPar(head, ppar, ParName) ' next param
End While
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim DirName As String
Dim ValName As String
Dim phdr As Integer
Dim NodHdr As System.Windows.Forms.TreeNode
DirName = New String(" ", 64)
ValName = New String(" ", 64)
RegTop = RnRegistInit()
RegistryName = "t_vis_set.cfg"
DllVal = RnRegistRead(RegTop, RegistryName)
phdr = RnRegistNextDir(RegTop, 0, DirName)
While phdr <> 0
NodHdr = Me.TreeView1.Nodes.Add(DirName) 'Top Directory
NodHdr.Tag = phdr ' save position
Tree_build_node(phdr, NodHdr)
phdr = RnRegistNextDir(RegTop, phdr, DirName)
End While
End Sub
Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
Dim Seltext As String
Dim slen As Integer
NodSel = e.Node
Seltext = New String(" ", 64)
Selected = e.Node.Tag
slen = RnRegistName(Selected, Seltext)
TextBox1.Text = Seltext
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim slen As Integer
If Selected <> 0 Then
slen = RnRegistNameSet(Selected, TextBox1.Text)
NodSel.Text = TextBox1.Text
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim retval As Integer
' RegistryName = "something_different_or_the_same.CFG"
retval = RnRegistFlush(RegTop, RegistryName)
End Sub
End Class
marvin42x
01.11.2006, 10:14
Ja, das Form1 sehe ich ja.
Auch die Deklarationen.
Die sind OK
Ist die alte Schreibweise, aber völlig in Ordnung so.
Ich habe mit einer genau solche Deklaration eine andere Lib mal eingebunden und das ging ohne zucken.
Da legst Du die Lib einfach ins bin Verzeichnis und alles ist fein.
Er weigert sich einen Verweis zu setzen weil er sagt da ist keine. Der tut so als wollte ich eine nicht dll Datei als dll verkaufen.
Ich hatte schon mal mit MrNiemand einen dll-Versuch zwischen VB6 und VB2005 gemacht.
Der lief im ersten Anlauf VB6 dll in vb2005 OK
Vb2005 dll in vb6 Problem.
Es ist ganz gut, dass wir das Problem haben. Denn Du kannst das bei Dir gar nicht nachvollziehen.
Du kannst nur zu Deinem Kollegen gehen und das da mal probieren.
Wer den Fehler als erstes finde hat gewonnen :-)
Ich bleib drann
Netter Gruß
Edit:
Sag mal, kann es sein das die System Uhr vom Forum falsch geht?
..einen Verweis zu setzen ..
Den braucht er nicht wirklich. Ist bestenfalls hübsch, wenn verwendete dll's im Projekt sind (und man install-sets kreieren will)
Ist ein ganz anderer Kaffee, wenn man mit VBxx eine DLL erzeugt, da geht zwar mehr, aber auch viel spezialisierter. da mag zwische VB6 /VB2005 DLL schon ein Unterschied sein.
Vergiß die DLL im Projekt, das geht ihn eine Sch... an , schau nur, daß der Pfad stimmt.
Schlimmstenfalls kopier die DLL dorthin, wo die anderen sind, also WINDOW\SYSTEM32 oder so.
Wenn Problem, dann eines mit den Pfaden (environment)
Wenn er eine exe oder dll sucht, geht er erst lokal, und dann über
PATH= ............................
(oder man gibt den kompletten Pfad im "declare" an)
Das ist ja lächerlich
System einrichten ... viel Glück
virtuelle Kanne Kaffee reinstell ;-)
..virtuelle Kanne Kaffee ..
Cyber-coffeine nutz da nix.
Irgendeine Idee ? Ich hab das probiert auf W2k prof. mit der kompletten VB2005 Suite, auf XP sp2 mit VB2005 express und kann den Fehler nicht nachvollziehen.
marvin42x
01.11.2006, 12:59
An UllrichC:
Danke für den Kaffee :-) kann sein das wir den brauchen.
Ich fasse mal den momentanen Stand der Ermittlungen zusammen.
Die Dll geht bei PicNick tadellos.
Schlussfolgerung:
Die Dll lässt sich aus VB2005 benutzen.
Die DLL geht bei Marvin42x auf drei Rechnern nicht.
Schlussfolgerung:
Die Systeme kann man als das zu erwartende Umfeld ansehen.
Aufgabe:
Funktionsfähigkeit im zu erwartenden Umfeld herstellen.
Fehlersuche:
Marvin42x hat probeweise eine zufällige Dll aus dem Internet runtergeladen bei der die Einbindung in vb2005 beschrieben war und mit einer entsprechenden Deklaration eingebunden und angesprochen.
Das ganze ohne jegliche Pfadangabe. Die Dll muss nur entweder in bin oder bin\debug oder bin\release liegen.
Wie PicNick schon sagte ohne Verweis hinzuzufügen.
Dieser Vorgang lief problemlos ab.
Auch eine Kernel32.dll Einbindung läuft bei Marvin42x ohne Probleme.
Marvin42x hat die RnRegist.dll in alle nur denkbaren Verzeichnisse kopiert.
Einschließlich system32 und system
Der Befehl: regsvr32 c:\Windows\system32\RnRegist.dll
und regsvr32 RnRegist.dll
Schlagen fehl mit der Fehlermeldung:
LoadLibrary(„RnRegist.dll“) fehlgeschlagen – Das angegebene Modul wurde nicht gefunden.
Dieser Befehl regsvr32 war einmal nötig um eine VB6 Dll anzusprechen. Darum dieser Versuch.
Vorsichtige Schlussfolgerung:
Alle Fehlermeldungen laufen darauf hinauslaufen, dass er die Dll nicht findet obwohl man ihn in jeder erdenklichen Art mit der Nase drauf stößt.
Und der regsvr32 Befehl sagt er findet die nicht, er sagt ja nicht wie schon vorgekommen, er kann sie nicht registrieren weil sie nicht richtig ist. In dem Fall hat er sie offensichtlich gesehen und überprüft.
Schlussfolgerung?
So erstmal Strich, geht später weiter
Netter Gruß
marvin42x
01.11.2006, 13:12
So, weiter geht’s:
Der erstrangige Schluss aus der Situation kann sein:
Schlüssel Annahmen:
Bei PicNick arbeitet die Datei
Bei Marvin42x arbeitet die Datei nicht
Beide Systeme sind ausreichend identisch.
Marvin42x arbeite mit einer Kopie, nicht mit dem Original.
Es fand ein Kopiervorgang, Ferndatentransfer, Kopiervorgang der Datei statt.
Schlussfolge:
Die Datei entspricht nicht dem Original.
Meinung:
Die Pfadangabe in der Deklaration mit c:\……. Kann nicht der Weg sein.
Marvin42x wird aber auch das noch prüfen.
Zwischenstopp
Netter Gruß
marvin42x
01.11.2006, 13:56
Nachsatz:
Wenn jemand was Bestimmtes sucht und das bestimmte ist nicht da obwohl was Ähnliches mit selben Namen da ist, sagt er auch: „ich kann das nicht finden“.
Und dann kann man sich auf den Kopf stellen ihm zu sagen wo das Ähnliche liegt, obwohl es doch den gleichen Namen hat.
Netter Gruß
Ich hab sicherheitshalber die DLL nochmal erstellt. Bin nicht sicher, ob eine verwendete lib nicht im debug mode erstellt wurde, d.h. da braucht er ein paar DLL-Varianten, die ich zwar überall habe, weil ich ja VC++ installiert habe, aber bei euch ist das möglicherweise nicht der Fall.
wenn's wahr ist, hieße das, das er zwar rnregist.dll findet (so blöd kann er ja nicht sein) daß er aber dann nicht weiterkommt, aber nicht weiß, wie ihm geschieht.
Versuchs bitte mal
marvin42x
01.11.2006, 14:24
geht
Netter Gruß
..geht ..
*unausprechliches*
marvin42x
01.11.2006, 15:38
Da lassen wir uns doch nicht unterkriegen gell? :-)
Edit: MrNiemand hat da im Hintergrund ein bisschen mit geschoben und den richtigen Verdacht gesät:
Thanks :-)
*stinkesauer*indenA..beiss*
Es ist immer solcher Schwachsinn, an dem man Nächte verpulvert.
marvin42x
01.11.2006, 15:47
Ja, ich bin auch drauf reingefallen. Ich habe geglaubt ein schwieriges Problem zu haben.
Es ist halt genau beim ersten mal passiert.
Nimms leicht, klar, bisschen schade um die Zeit aber das Thema Lib Einbinden ist nun ausführlich in diesem Thread nachzulesen :-) :-)
Netter Gruß
marvin42x
01.11.2006, 16:16
So, jetzt zurück zum Mainstream:
Das sieht absolut klasse aus auch die Handlin Routinen sind sehr kompakt.
Ist schon gekauft.
Das ist lieb das Du das in einer Demo in vb2005 rüberschiebst.
Ich schwinge zwar große Wörter aber wenn es um die Praxis geht bin ich für jede Hilfe dankbar.
Ich werde mir jetzt mal angucken wie ich das integriere. Ich werde dabei auch noch einige Umstrukturierungen vornehmen damit die Komponenten am Ende einen einheitlichen Befehlssatz besitzen der auf möglichst allen Wegen ansprechbar ist.
Ich meine:
Config. File
TCP –Befehl
Komandozeilenargument.
Da ist natürlich Essig mit einer Demo nächste Woche :-)
Netter Gruß
marvin42x
01.11.2006, 16:32
Auch das Config File sieht gut aus.
Eine sehr komfortable Sache.
Und wenn ich das richtig sehe steht es zur Laufzeit im Speicher und wird nur bei Anforderung in die Datei geschrieben.
Wie Du schon angekündigt hast.
Werde mich aber erst morgen weiter damit auseinander setzen können. Die liebe Zeit.
Bis dahin
Netter Gruß
Ich werd versuchen, morgen etwas doku zu Config zu liefern.
Hätte mir gedacht, daß man z.B.
[MARV] Server = "127.0.0.1"; port = 42 ; rootdir = "c:\RN\"; exedir = "C:\exedir\"
[.SCREEN] posx = nnn; posy=nnn; DISPLAY = MINIMIZE
[.PROTFILE] file = "protokoll.txt" ; OPEN = AUTO
[.STARTUP]
[..FIRST] shell = "dideldum.exe" ; param = "param1", "param2", "param3" ;Start = AUTO ; ID = nnn
[..SECOND] shell = "tralala.exe" ; param = "param1" ; Start = MANU; ID = nnn
Ich hab' die Erfahrung gemacht, am leichtesten geht es, wenn die Baumstruktur die gleiche ist wie die Applikations-Struktur.
marvin42x
02.11.2006, 01:38
Einer Meinung mit Dir.
Gleiche Strukturen wo immer man kann.
Ich werde auch noch mal die Programm Struktur der Komponenten dahin gehend ändern das jeder der möglichen Befehle eine eigene Routine bekommt.
Damit ist ein gleichmäßig leichter und übersichtlicher Aufruf über alle Wege gewährleistet.
Das wird dann nach und nach immer Bausteinhafter.
Alle Komponenten werden dann einen weitgehend identischen Aufbau haben.
Wenn man eine Komponente verstanden hat, hat man alle verstanden.
Like a Mixer ;-)
Da ich gerade bei einheitlich bin.
Ja Du hattest Recht als Du weiter vorne vermutet hast, dass wird sicher noch nicht alles sein.
Mein Vorschlag wäre:
Einheitliches Look and Feeling.
Auf der einen Seite soll es möglich sein das jeder macht was er will.
Aber wir sollten mindestens ein Standard Design entwickeln bei dem die Bedienung immer denselben Gepflogenheiten entspricht.
Wenn man eine Komponente verstanden hat, hat man alle verstanden.
Das meine ich sicher nicht als Reglementierungsversuch.
Mir liegt vielmehr am Herzen das ein Benutzer in kürzester Zeit mit seinem System klarkommt. Und es mögen lernt.
Einen ersten Vorversuch zum Überlegen habe ich beim OneTrackbar gemacht.
Aber da gibt es sicher noch bessere Lösungen. Ich denke wir sollten aber schon paralell darüber nachdenken.
Jetzt schließe ich aber erstmal sonst kündigst Du mir noch die Freundschaft :-)
Netter Gruß von der Nachtschicht
Morjen !
DLL Was ich noch rauskriegen muß:
dzt. gebe ich Object-Referenzen (Adressen) als INTEGER her, bzw übernehme sie so. Im Prinzip reicht das auch. Ist aber unbefriedigend. Eigentlich sollten das Objects sein
Für diverse Sachen brauche ich so eine Art Callback-Methode, d.h. ich muß aus der DLL Methoden im VB aufrufen, ev. aus einem anderen Thread. Ich werde da etwas experimentieren müssen. Ideen ?
marvin42x
02.11.2006, 09:56
Morgen.
Du hörst Dich an wie jemand der gerade an einer asynchronen TCP/IP Client Funktionalität mit Eventhandling schraubt. Oder einem gemeinsamen Configpool im Speicher.
Das ist dann schon die Kür.
Wird für mich schwer sein da konstruktive Wörter zu finden.
Der Thread wird aber zahlreich mitgelesen vielleicht gibt es ja da Erfahrungen.
Netter Gruß
Auf jeden Fall mal ein wenig Doku zu der DLL
marvin42x
02.11.2006, 13:33
Zitat:
„Ein wenig Doku“…..
Was für ein Ding.
Da muss ich mich aber erstmal hinsetzen.
Das ist mehr als ich jetzt erwartet habe.
In Hinsicht auf die Config Möglichkeiten und in Hinblick auf die Demo.
Ich werde meine Sachen dann mal unauffällig entsorgen.
Ein schönes Teil
Netter Gruß
..unauffällig entsorgen..
na, na. Dafür bin ich in VB ein Blinder :oops:
marvin42x
02.11.2006, 15:24
Das mit dem Entsorgen geht schon in Ordnung.
Was mit dem Config Modul raus springt ist ja das Idealbild von dem was mir vorschwebt.
ich bin vieleicht etwas Unwissend, aber nicht blöd :-)
Netter Gruß
However, Haupsach', es hilft.
Status Callback: Is das Problem aufgetaucht, das VB offenbar irgendeine Calling-Convention verwendet, die ich mir suchen muß *grmpf*
Wirkt sich so aus: Ich kann zwar Callbacken, aber beim Return scheppert es dann. Soweit isses gekommen, daß ich den VB mit dem Disassembler debugge *auweia*
Schlimmstenfalls machen wir als interimslösung irgendeine andere Schweinerei *grunz*
marvin42x
02.11.2006, 19:32
Stichwort Callback, schepper:
Wenn es scheppert hat man oft daneben gegriffen.
Mir fällt da spontan das Wort Singleton ein. Ich habe das verwendet um meine Fenster -Instanz eindeutig zu machen.
Maybe das Du das in Deiner Übergabe auch machen musst.
Falls ich arg daneben liege sehe mir das nach. Ich bin mit Dlls in der Hinsicht noch nicht bewandert.
Netter Gruß
NumberFive
03.11.2006, 07:28
@PicNick
Ich weiß leider nicht genau wo dein problem ist mit den CallBack von VB aus aber ich kann dir folgendes auf meiner Erfahrung mit VB6 sagen.
VB ist nicht Thread Sicher !
ComObjekt als Callback's Funktionieren sehr Gut.
Was möchtest du genau machen ?
Ich habe für Comobjekte die in anderen Sprachen verwendet werden und geThreaded sind folgen Lösung gefunden. Ich erzeuge ein unsichtbarer nachrichten fenster wenn die instance des Comobjets erzeugt wird. wenn ich jetzt aus dem Thread ein Event feuern will mache ich das über das fenster und schon tut's.
@all
Irgend wie habe ich zur Zeit massive Schwierigkeit das Protokoll zu verstehen. geht das nur mir so ? Es tut zwar weh das zu geben zumüssen
aber irgendwie Fehlt mir die zusammen fassung.
Gruß
marvin42x
03.11.2006, 09:38
@PicNick:
Ich habe Dir mal ein TCP/IP -Beispiel in VB2005 mit Dll gemailt wie ich es anfangs verwendet habe.
Ich hatte dann im Zuge der Entwicklung die Dll aufgelöst und der Übersichtlichkeit halber als Klassen in mein Projekt aufgenommen.
Inzwischen ist es nun aber wieder konzeptgerechter wenn das eine DLL wird.
Vielleicht ist da irgendwas was Dir weiterhilft.
@NumberFive:
Mach Dir wegen des Protokolls keine Sorgen.
Wenn wir hier aus dem Gröbsten raus sind werden wir das noch mal Ansprechen.
Ich habe in der Richtung auch noch nichts am laufen.
Das wird aber im Zuge der Entwicklung rasch zum Thema werden.
Edit:
mit vb meinst Du jetzt vermutlich VB6?
VB2005 ist was sehr anderes und eben Threadsicher. darum lässt es auch nicht so ohne weiteres mit sich reden.
Edit2:
im Umgang 2005 zu Vb6 wird sehr oft mit Wrappern gearbeitet um das Problem zu lösen. Ich habe aber damit noch nicht gearbeitet deswegen kann ich das hier nur als Stichwort beitragen.
Netter Gruß
Gute Nachricht:
Weil ich mich von solchen Silizium-Batzen grundsätzlich nicht piesacken lasse, haben wir das Callback-Problem jetzt schon halbwegs im Griff. (Lesen hilft, is nur ein Tip)
Also haben wir ja was zu tun. Wie schon Marvin42 sagte, wir müssen kurz einmal die PC-GUI-Fronten begradigen, dann sind wir wieder bei unseren Rn-Standards u. Protokollen
marvin42x
04.11.2006, 00:18
Zitat: Gute Nachricht
1. Ja, Lesen bildet.
2. Gratulation.
Etwas anderes hätte Deinem Seelenfrieden auch nicht gut getan :-)
Status:
Habe jetzt Deinen MARV Cofig -Vorschlag in den neuen TreeViewe von MARV eingelesen.
So wie Du es hingeschrieben hast ist es genau das was ich mir gewünscht hatte. Nicht zu viel und nicht zu wenig.
Das lassen wir jetzt erstmal so.
Bis uns noch mehr einfällt.
Randbemerkung:
Ich glaube, ich hatte es nicht erwähnt. MARV wird selbstverständlich auch Netzt –Remote fähig sein sobald er online ist. Nur der Befehlssatz den er kann wird etwas umfangreicher sein.
Der RN-Server könnte Beispielweise auch den MARV manipulieren.
Da der Server Netzwerkseitig sehr im Bilde ist vermute ich das das noch sinnvoll sein könnte.
Kann sein, dass die gegenseitige Beeinflussbarkeit ab und an noch Thema wird.
Netter Gruß
Nun, ist die Frage, wer das Sagen hat. Natürlich könnte sich der µC und damit den RN_SERVER ein Profil aussuchen, da er ja weiß, was die µC so an Geräten draufhaben. Wenn die aber nicht spezifisch sind, also einfach ADC u. Servos (z.B. wie bei einem einfachen Fernbedienungs-Betrieb) ist das nicht unbedingt eindeutig.
Umgekehrt könnt' MARV den der ausgewählten Konfiguration entsprechenden Bootloader starten :mrgreen:
Also die Frage: Sucht sich der Server seine Clients aus oder der Client seine Server ?
Kommt wahrscheinlch drauf an: Tüftelst du grad am Robby rum, hast du eine gleichbleibene Config am PC und lädst den µC immer wieder nach.
Bastelst du am PC, bleibt der Robby unverändert und du hast start-stop am PC
However, ich glaub', am Wichtigsten ist mal, daß wir am PC ein Setup haben, daß er sich unter einer bestimmten Config merken kann, also Slider links oben, ADC rechts unten und das Radar schön groß in der Mitte.
marvin42x
04.11.2006, 12:43
Bootloader:
Das mit dem Bootloader ist ja noch mal eins drauf.
Gefällt mir, der Ausblick auf das was wir könnten.
Das mit den Wichtigkeiten sehe ich auch so.
Ich realisiere deswegen auch als erstes das laden ändern, erstellen und Speicher mit der neuen Config –Dll bei MARV und einem TestClient.
Da ich mich entschlossen habe Das Konzept einer Standard -Klasse für Die Clients (like Mixer) noch konsequenter als schon geschehen durchzusetzen schreib ich wie immer erstmal alles neu.
Es ist ein Kreutz, wenn man besser wird.
Netter Gruß
..schreib ich wie immer erstmal alles neu..
nur nicht zu hastig ! Alles, was funzt, haut man nicht weg !
Aber es ist richtig, gerade das administrative Zeugs (doppelklick: wenn nicht da, dann starten, wenn minimized, dann ausgraben, wenn eh' am Schirm, dann nach vorn und Fokus drauf, etc.) ist bei allen Komponenten immer wieder das Gleiche, ist angenehm, das nur einmal als "Generic RN-Component" schreiben zu müssen.
Erst wenn das steht, dann mit "inherit" was Spezielles drauf hängen.
EDIT: Das mit dem Bootloader machen wir dann, wenn wir das restliche Projekt mit Flaschenweise Prosecco begossen haben. *ermbarmen*
marvin42x
04.11.2006, 18:28
Prosecco ist auch keine schlechte Idee :-)
Ja, Bootloader machen wir wenn wir sturzbetrunken sind
Netter Gruß :mrgreen:
A propos sturzbetrunken:
Solche DLL Functions OHNE return-Value mag der VB irgendwie nicht.
Da müßte man die Deklaration erweitern. Ein "Delete-Config-Entry" Beispiel anbei
Declare Function RnRegistDrop Lib "\indizes_disk\exe\rnregist.dll" (ByVal Hd As Integer) As Integer
Dim res As Integer
If Selected <> 0 Then
res = RnRegistDrop(Selected)
Selected = 0
NodSel.Remove()
End If
Läßt sich vielleicht mal klären, aber sei's d'rum
marvin42x
05.11.2006, 20:34
Apropos Apropos:
Danke für das Fixing.
Habe ich gleich als Delete Button eingebaut :-)
Da das auf die Art geht und irgendwie unauffällig aussieht könnte man ja erstmal Gras drüber wachsen lassen. Ich bin da schlicht, wenn er will und kostet nicht viel, soll er haben.
Ich habe an die Deklarationszeile einen Kommentar rangemacht ;-)
Wenn ich das richtig sehe war es auch der einzige Fall ohne Rückgabewert.
Bin gerade dabei dem MARV die Remote Befehlsfähigkeit zu implementieren.
Das brauche ich bevor ich die Registry auswerten kann.
Das ist dann Programmintern immer ein und derselbe Aufruf egal von wo der Befehl kommt.
Insgesamt werde ich Deinem Ratschlag folgen und nicht alles neu machen.
Da ich von Anfang an Baugruppen haben wollte besitzt das ja im Prinzip schon die richtige Struktur. Und zukünftig verändert sich das, wie man bei der Befehlsauswertung sehen kann auch schrittweise in die richtige Richtung.
Netter Gruß
So, es sind schon wieder Berliner Meerschweinchen gefragt. :-)
Anbei ein VB-Project IP_DLL und eine "RnRegist.DLL"
In der Dll sind ein paar IP -Funktionen zusätzlich zu den Config-Sachen
Im VB das gewohnte Spiel mit dem "DLL-Finden". :-(
der Basic hat nur Grundfunktionen drinnen, es fehlt jede Eleganz.:oops:
Schau mal, ob du dich auskennst (mit dem Callback-Trara)
Ich werd noch Doku machen.
Laß hören, wenn du Zeit hast
marvin42x
06.11.2006, 14:51
Manchmal frage ich mich wann Du das alles machst.
Egal.
Dll Finden:
Selbes Phänomen wie letztes Mal.
Er findet die Lib nicht oder sie gefällt ihm nicht, sagt er, ohne das näher zu erläutern was nun genau meint.
Ich habe alle alten überall rausgelöscht um keine Verwirrung zu bekommen.
Und ihm die neue zu Füßen gelegt.
Wenn ich ihn mit der Nase drauf stoße will er sie nicht.
ich bleib drann
Netter Gruß
marvin42x
06.11.2006, 15:08
Programm:
Die Aufrufe decken sich stark mit dem wie ich es verwende.
Was ja durch die Aufgabenstellung auch nahe liegt.
Das bedeutet, dass ich das recht schmerzfrei integrieren kann.
Du bist ja des Visual Basics schon ganz schön mächtig.
Ist wohl doch kein neues Ufer, sondern nur das Alte frisch gestrichen ;-)
Da ich mich lange genug mit dem TCP/IP rumgekloppt habe weis ich so eine Lib zu schätzen.
Ich werde dann mal daran gehen und das ausprobieren.
Wiederholung:
Das Verpacken in Musterprojekte ist sehr angenehm und hilfreich.
Netter Gruß
Hallo GPD (guinea-pig-department) !
Ich schau nochmal wegen der DLL-linkerei
EDIT: etwas doku
Versuchen wir's nochmal.
EDIT: was vergessen:
Bei einem Fehler muß man den IpRef natürlich auch noch wegschmeissen, sonst bleibt er über
If res <> 0 Then
IpState.Text = "ERR"
res = RnIpDrop(IpRef) ' WEGSCHMEISSEN
IpRef = 0
Else
marvin42x
06.11.2006, 16:33
Geht
Netter Gruß
marvin42x
06.11.2006, 18:20
Der erste Schnelltest ist gelaufen.
Wie ich das im Moment überblicke, ist erstmal alles da was man braucht.
Das ganze macht ganz unauffällig seine Arbeit.
Prima.
Ich kann leider z.Z. keine Hardware ranhängen weil ich die Woche bis spät abends Arbeiten muss. Da werde ich mal sehen wie ich das noch hinbekomme.
Die Cal Back Geschichte muss ich mir noch in Ruhe anschauen um da nichts Unsinniges zu erzählen.
Ich werde mich jetzt dran Versuchen das zu integrieren und kann dann berichten.
Ist ja auch immer eine Frage, wie kommt ein Nachwuchsprogrammierer damit klar.
Im Motorrad Rennsport nannte sich das früher Junioren Klasse :-)
Wobei sie mich bei den, von den Franzosen ausgerichteten, 10Km von Berlin in die Klasse der Veteranen eingestuft haben…. Hmmm….
Na ja, lassen wir uns überraschen.
Danke schön PicNick.
Netter Gruß
..Klasse der Veteranen ..
Tscha, im Sport bis du ab 40 ein Fossil, meistens sogar früher.
Wenn's hinten weh' tut, soll man vorne aufhören :mrgreen:
Die Doku weiter oben hast du gesehen ?
marvin42x
06.11.2006, 19:17
Überblick:
Jupp, Doku gesehen.
Bin auch konzentriert am lesen.
Die Docu ist Ok, wenn ich nicht so Kopfweh von kriegen würde.
Da sind ein paar Techniken drin, mit denen ich noch nicht so vertraut bin.
Strategie:
Du weist doch, erstmal anmachen und danach die Betriebsanleitung, um nachzusehen ob man es richtig gemacht hat.
Dann einbauen und wenn’s nicht geht den Kundendienst rufen.
Netter Gruß
..und danach die Betriebsanleitung..
Aber auch nur dann, wenn's dampft und raucht.
Ich hab's so versucht, daß man es einfach abkupfern kann, ohne gleich in die metaphysischen Tiefen versinken zu müssen.
Wir haben's ja so, daß da eigentlich zwei unabhängige Streams laufen, einer raus, einer rein. Für unsere Dialog-Applikationen ist das meist ok so.
Btw: die mußt nicht alles auf einem connect machen, du kannst auch x-mal connecten, der DLL isses recht, dem Server auch.
(z.B. für Sensoren einen, für Slider etc. einen anderen, dann kriegst du deine Broadcast auch wieder zurück und kannst dich selbst testen)
(Vielleicht ist es auch günstig, für den administrativen Teil einen unabhängigen Stream zu machen. damit wir diese Daten nicht unbedingt ins RnCom µC Protokoll zwängen müssen. Das is aber auch wieder ein anderer Kaffee)
marvin42x
06.11.2006, 19:52
Wie Du das ganz richtig siehst, ich werde das gnadenlos abkupfern, ohne jede Spur von Kreativität, aber dafür mit Erfolg.
Da ich weis, dass Du mir das nachsiehst bin ich dann auch unbekümmert.
Das bedeutet ja nicht, dass ich das nicht grundsätzlich und im Wesendlichen verstehe. Und anwenden kann ich es auf die Art alle mal.
Admin Stream:
Hört sich interessant an die Idee, das könnte mir glatt gefallen.
Das lege mal ins Regal für die langweiligen, dunklen, verschneiten, langen, einsamen und eintönigen Winterabende an denen wir all das tun wozu wir im Sommer keine Zeit hatten.
Das holen wir bestimmt noch mal vor. Grübel, Denk……
So, bevor ich vor lauter lauter nichts mehr auf die Reihe bekomme.
Erstmal noch einen schönen Abend.
Netter Gruß
marvin42x
06.11.2006, 21:53
Nabend,
Admin Kram:
Sind jetzt schon die langen Winterabende?
Ich hätte da gern mal ein Problem.
Da ich gerade die TCP -Remote Sache einbaue.
Brauche ich einen Schlüssel für den Umstand, dass jetzt ein Kommando kommt.
Ich habe mal in den Definitionen nachgelesen und nur das cmd Byte gefunden.
Kannst du da mal was genaues festlegen?
Oder falls ich es überlesen habe mir auf die Sprünge helfen.
Am besten mit einer Beispiels Remote Message.
Die muss ja dann auch ein eindeutiges Ziel haben.
Das Key=Value Prinzip machen wir ja schon, das kann den Befehl Transportieren.
Netter Gruß
Ps. Und den IP Connector Hook immer schön warm und trocken halten :-)
..und nur das cmd Byte gefunden.
Ich finde, so wie du es machst (CMD = 1 ---> Key-Value sequenz)
ist das schon brauchbar und sinnvoll. Und eigentlich auch so gedacht. Auf den PC's ist ja ein String-vergleich (select case) kein Problem. Und man kann sich jeden Tag ein neues COmmand ausdenken, ohne daß andere Applikationen zwangsläufig betroffen wären
(wenn's nich sein muß, bin ich kein Freund von binären Command-Codes)
Also, würde sagen, daß ist einfach ausgemacht.
Steht in CMD-Byte eine 1 (0x01 , &H01), dann folgen im Datenfeld
KEY=VALUE,
(trimmed, also keine Spaces irgendwo) Komma als Trennzeichen, wenn mehrere Key-Values folgen.
Frage: Ist KEY bzw Value case-sensitiv ?
marvin42x
09.11.2006, 20:51
Frage: Ist KEY bzw Value case-sensitiv ?
Das wüsste ich auch gerne :-)
werde ich ausprobieren.
Im Moment mache ich bei Command, also Key, einen einfachen Stringvergleich und das riecht nach Case sensitiv.
Der Value Anteil wird der verarbeitenden Routine als String übergeben. Die muss sich dann darum kümmern ob ihr das was sagt, was sie da bekommt. Also String to Dezimal oder was auch immer sie da für sich machen muss.
Das mit dem cmd 1 ist dann erstmal gebucht.
Das mit mehreren Key=Value pro Message bin ich mir unschlüssig.
Kannst Du mir da ein paar Für -und –Wieder Argumente zukommen lassen?
Netter Gruß
marvin42x
09.11.2006, 21:56
Habe ich jetzt übersehen.
Die Adressfelder Class und Class ID reichen für die Kommunikation zwischen RN-EV’s nicht aus.
Wollen wir die Identität dieser EV’s auf de Level 1 Ebene abhandeln?
Das wäre dann ein Ident String.
Ich meine die µC’s brauchen vom PC-Gewusel doch nichts mitbekommen?
Wenn Ja brauchen wir dann im cmd Feld die 2 für: „Jetzt kommt die ID“ ?
Wobei die Zahlen im cmd Feld später auch leicht geändert werden könnten.
Ich zitiere mal:
--------------------------------------
' GUI e.V. : Wir haben dzt. eine Identität so eines Vereins, nur ist das halt nur Text.
'Auch ohne spezielle IAM könnt' da noch eine Netz-ID reinquetschen.
'Aber besser wär's, überhaupt zu einem formalen Aufbau zu wechseln, solange wir noch jung sind.
'Denn bald werden auch die Versionen eine interessante Information sein. ("hat der dieses oder jenes schon drauf oder nicht")
'Mir wäre es einfach, wenn wir da ein Key-Value-Format nehmen würden
'Key1=value1 , Key2=value2 , ....;KeyN=valueN
'ID=nnnnn , NAME=aaaaaaaaa , VERS=mmm , DESCRIPT=aaaaa
'(alternative statt "ID" IDC=class, IDI=ident )
'Für den Absender isses so soder so nur ein String, aber ich tu' mir leicht beim zerlegen, und wir können jederzeit
'was hinzufügen, ohne bestehende Applikationen zu tangieren.
'Also:
'KEY ID, IDC, IDI, VERS, NAME, ......
'"="
'value numerisch oder text, je nachdem (nix hexadezimales)
'"," Argument-Seperator oder nix, wenn nix mehr kommt
'Reihenfolge egal, alles optional ( Wenn keine ID, dann hat er eben keine)
'Das "RN" am Anfang müsste dann nicht mehr sein
-----------------------------------------------------------------
ENDE Zitat.
Das würde dann nach meinem Verständnis so aussehen:
ID=RNEV, Name=MARV, VERS=0.1, DESCRIBT=Testfall
Wenn MARV seine Schützlinge steuern will muss er sie ja beim Namen rufen können.
Oder gibt es da noch ganz andere Überlegungen?
Netter Gruß
marvin42x
10.11.2006, 00:12
Heute habe ich mir noch eine Freude gegönnt und meine TCP/IP Remote Fähigkeit in Betrieb genommen. Habe mit einem MARV einen anderen über den Bildschirm gescheucht.
Und ihn auch über TCP/IP Message beendet.
Ich gebe zu das ist nicht so viel, aber genau das richtige für mein kindliches Gemüt.
cmd 1 ist also in Betrieb
Key=Value ebenfalls
Das TCP Netz App—Server—App auch
Das alles aber noch ohne Namentliche Adressierung.
Command Line Start Argumente kann er sowie so schon
Der Key ist übrigens Case sensitiv.
Value im Prinzip auch. Da kommt es aber drauf an wie er weiterverarbeitet wird.
Netter Gruß
.. mehreren Key=Value pro Message ...Für -und –Wider ..
Na unbedingt. Stell dir nur vor, du willst deinem Karaoke-Hamster die gewünschten Bild-Parameter setzen oder abfragen
Case-sensitiv:
Ich mach es immer so: KEY ist case-sensitiv, wird allerdings in dern RnRegist-Routinen immer standardisiert auf uppercase, getrimmt und ohne leading spaces. (was immer einer auch eintippt).
Bei den Values hab' ich's eigentlich so:
OHNE Quotes wird auch normalisiert.
MIT Quotes gilt es als Text und obliegt dem User (da können dann auch spaces drin sein).
(wobei ist die übliche quote-logik habe, also wenn im Text ein quote sein soll, dann muß man es doppelt schreiben)
Das wird bei unserem Gebrauch aber keine große Rolle spielen, denn irgendwie ist ja alles entweder eh' numerisch oder ein Schlüsselwort.
(Bei meinem Mixer hat sich z.b. diese Frage nie gestellt)
(Auch die quoted-Value Geschichte hat sich eigentlich als irrelevant erwiesen)
Next: Vereins-ID
Ich glaub' beim "Shell" kriegst du ja die Prozess-ID als Wert zurück. Das ist innerhalb eine Maschine das eindeutigste, was wir haben. Und das ist ein simples 16-Bit Wort. Könnten wir nehmen:
ID=nnnn, NAME=seppel,PID=nnnnnn......
(die eigene Pid weiß schließlich jeder)
marvin42x
10.11.2006, 09:50
Mehrere Key=Value:
Ok, überzeugt, machen wir so.
Case-Sensitiv:
Ich Stelle alle Keys auf Großgeschrieben um. Damit müsste alles nahtlos passen?
Bei Den Values dann auch soweit es notwendig ist.
Dann kann die Lib normalisieren und meine Befehlsauswertung bekommt das was sie erwartet.
Deine Erfahrung mit den Quotes können wir gerne übernehmen.
Mir fällt im Moment auch keinen Fall dafür ein.
Da bleibt die Sache an der Stelle erstmal schlicht und übersichtlich.
Netter Gruß
marvin42x
10.11.2006, 10:13
Vereins ID:
Die PID ist ein guter Vorschlag. Das realisiere ich dann erstmal so. Die wandle ich zum String und verwende sie.
Geht ja heute wie’s Brezelbacken.
Netter Gruß
Zum Darüberstreuen:
'NEU ------------------------------------------
Declare Function RnIpEnabRx Lib "rnregist.dll" (ByVal IpRef As Integer) As Integer
'-------------------------------------------------------------------------------------------------
' Workout with original Thread
'-------------------------------------------------------------------------------------------------
Public Sub IpData(ByVal MyIp As Integer, ByVal Arg As Integer, ByVal Status As Integer)
Dim MsgRef As Integer ' current Message Reference
Dim res As Integer
Dim RespLen As Integer
MsgRef = RnIpMsgGetIn(IpRef)
While MsgRef <> 0
'.....
End While
If IpRef <> 0 Then 'NEU ------------------------------------------
res = RnIpEnabRx(IpRef) 'NEU ------------------------------------------
End If 'NEU ------------------------------------------
End Sub
Das sollte gegen das verhaspeln helfen , hoff' ich
In der ZIP: MARV (Teilprojekt)
und eine neue DLL
Und weiter: Bei Key und sonstigen Schlüsselwörtern bitte Umlaute vermeiden: Also "SAUBAER" statt "SAUBÄR"
Es ist jetzt ein paar mal von einem "Simulanten" gesprochen worden. Ich meine, einen Client, der sich daran hängt und mit einstellbaren Intervallen irgendwelche einstellbaren oder randomized() Werte aussendet, kann man sich ja leicht vorstellen.
Oder geht das in Richtung Cyber-Robby ?
marvin42x
10.11.2006, 21:44
Momentane Aktivitäten:
ich habe MARV gerade mit der Fähigkeit ausgerüstet über einen Schieberegler einstellbar das Netz zu stressen.
Da MARV mehrfach startbar ist kann man auch Netzdialoge Simulieren.
Das ist sehr nützlich beim Implementieren von Remote Eigenschaften.
Also in einiger Hinsicht ist MARV auch zum Simulanten mutiert.
Zweck:
Den Simulanten sehe ich jetzt in erster Linie als Netz Analyse Tool.
Umso schöner der Simulant echten Netz-Verkehr nachmachen kann umso besser ist es natürlich zum testen.
Der Umgang mit einem Dynamischen Plug and Play Netz erfordert auch einen dynamischen Testvorgang.
Wunsch:
Schick wäre natürlich ein etwas geistig luxuriöseres Teil als extra Client.
Ein Ansatz wäre den MARV herzunehmen.
Der ist schon Remotefähig
Er hat schon die Netz Dll implementiert, die habe ich ja nahezu 1:1 nur einklinken müssen.
Da fliegt nur raus was er für den Simulantenjob nicht braucht.
Am MARV soll ja schon das Konzept der „Generic Komponente“ Struktur gewinnen.
Ich sehe hier auch das Ziel eine Generic Komponente sichtbar zu machen die dann so eine Art Plug In erlaubt.
Also Softwarebausteine die man einzeln Pflegen kann.
Wir sind da schon dicht dran und sollten da untereinander auch so homogen wie möglich werden.
Ich ändere auch gerne noch Sachen die dieser Idee im Wege stehen.
Cyber:
Der Simulant ist ansonsten erst etwas später auf Level 2 noch mal Thema.
Dann würde er aber noch ein paar Sachen mehr auf Lager haben, so was wie Recording und Replay und Mapphandling usw. was wir jetzt noch nicht brauchen.
Was auch nicht mehr wirklich Gegenstand des Kern-Projektes ist.
So, großes Lamento fertig :-)
Netter Gruß
Ps.
Ich Mail Dir morgen mal den jetzigen Entwicklungsstand als Diskussionsgrundlage.
Danach schau ich mal wie das funktioniert etwas zum Downloaden in denThread zu stellen.
NumberFive
11.11.2006, 10:06
was ist an dem telegram falsch so das der rn_server
mich nicht erkennt Logon nachricht:
2<00>ID=45,NAME=RNComNetworkLayer,DESCRIPT=Michael Test
Gruß
mmhh. Sieht ja ok aus.
Ich könnt' mir aber vorstellen, daß durch die diversen Panikaktionen auch ein Prog-Versions-Durcheinander entstanden ist.
Ich (Wir) werden sehen, daß wir den Status quo mit einem einzelnen Zip -File eindeutig festlegen. Sonst kennt man sich sehr schnell überhaupt nicht mehr aus.
Ich hab' selber auf 3 Computern vier verschiedene Versionen von dem RN-Server.
Ich tu' das also und stell' eine konsistentes Set da rein.
NumberFive
11.11.2006, 10:53
wohin stellt du es hier rein ?
Hier im Thread. Solang das alles dermaßen in Bewegung ist, hat es keinen Sinn auf der Homepage.
Also, das wär die aktuelle Version von:
RN_SERVER.exe
RN_CLIENT.exe
RN_ADC.exe
Dabei ist auch eine PNG, wie das aussieht, wenn die alle drei gestartet und verbunden sind. (Mein lokaler Rechner heißt "studio", bei euch wird das anders sein.
RN_SERVER verteilt eigentlich alles zu jedem, wie besprochen, wenn "ID_TO_PATH" nicht gecheckt ist, tut er auch in keiner Richtung irgendwas mappen oder so .
Wenn also irgendwas ist, dann bitte auf DIESEN RnServer bezogen probieren.
Lasttest, stabilität mit der DLL schau ich mir jetzt an.
marvin42x
11.11.2006, 15:45
Sehr schön, damit sind wir dann auf einer Linie soweit das zurzeit möglich ist.
Ich werde einen MARV bereitstellen wenn wir das Netz stabil haben.
Der kann dann einige Befehle mehr.
Und interagiert dann schon übers Netz.
Da soll man dann schon sehen können worauf es hinausläuft.
Er beherrscht jetzt den neuen Netz ID String wie besprochen.
Sieht im Server Tree dann so aus:
Bg352 RN-ID=1,NAME=MARV,PID=448356
Das RN ist noch für den alten Server, das kommt dann weg.
Über die PID könnte man auch schön Adressieren?
Nützt Dir das schon was?
Ich kann jedenfalls ab jetzt in den Apps Nachrichten gezielt rausfischen.
Eigentlich auch gezielt verschicken.
Die landen zwar im Broadcast aber der Empfänger wüsste, dass er gemeint ist.
Vorschläge?
Umlaute vermeiden wir.
Großschreibung ist umgesetzt.
Es gibt tatsächlich einen Fall wo wir möglicherweise Quoting brauchen.
Und zwar wenn ich eine App starte. Kann sein das der Startname Case sensitiv ist.
Ich meine das Windows das eng sieht.
Wie wollen wir das handhaben?
Hier erstmal Pause ;-)
Netter Gruß
marvin42x
11.11.2006, 15:53
Holla, der Server kann ja mehr :-)
Freu freu
Klasse, mit dem Tree !!!
Netter Gruß
Na, alles am werken.
Ich hab momentan die Scheuklappen und teste mich blöde, um das gewonnene Terrain abzusichern.
Wie befürchtet, find' man immer was. Ich möchte jetzt auf jeden Fall mal , daß die ganzen IP-Appl-Kollegen kreuz und quer connecten,-disconnecten, senden (in Massen) können, ohne das da irgendwas seltsames geschieht.
Dann klären wir das mit dem Startnamen. Dem ingeniööör is nix zu schwööör.
Ich rühr' mich !
marvin42x
11.11.2006, 18:24
Mach das in Ruhe.
Ich habe z.B. noch eine Mege andere Sachen die ich fertigstellen will.
Und dafür läuft das Netz gut genug.
Übrigens habe ich gesehen das Deine Clients ja auch schon auf der Höhe der Zeit sind was den Netstring angeht :-)
Netter Gruß
So, GPD ist wieder gefragt (guinea-pig-department)
Da drin ist wieder
RN_SERVER.EXE
RN_CLIENT.EXE
RN_ADC.EXE
RNREGIST.DLL
und ein VB-Projekt IP_DLL
Letzters ist der letzte Stand des Wissens (meines halt :oops: ), PID etc. allerdings einfach reinkodiert, ist erstmal wurst.
Wenn du diese mehrfach startest, kannst du Ping-pong spielen
und wenn du die Servo- und ADC clients anwirfst und den Ip_DLL auf ECHO schaltest, ist der Bär los am Netz, da jede Message dann Kinder und Kindeskinder kriegt. (Irgendwann müßte es aber dann krachen)
IP_DLL ist zu rumbasteln gedacht. Also als Simulaten-Template.
Mit dem Wissen kann ich mich nun wieder MARV zuwenden.
Wenn irgendwas trotzdem schnackelt, bitte Laut geben.
marvin42x
12.11.2006, 01:32
Der erste Probelauf sah sehr gut aus. Wie sagst Du.
Da steppt der Bär.
Ach ne ohne Umlaute BAER ;-)
Das sagt man in Berlin, der Bär ist doch unser Wappentier.
Nur meinen MARV erkennt der Server nicht mehr.
Aber ich werde mal die IP Funktionalität in den MARV transplantieren.
Geht ja schnell, ist ja aufgebaut wie ein Austauschmotor.
Melde mich
Netter Gruß
Heißt das denn nun Berlin oder Bärlin (baerlin) ?
marvin42x
12.11.2006, 11:01
Der neue Motor ist drin.
Und schnurrt wie ein Bienchen.
Dadurch ist jetzt bei mir ein Problem aufgetaucht.
Wenn ein Programm über Messages steuerbar ist.
Muss ich jetzt Maßnahmen ergreifen damit es nicht über selbige abgeschossen werden kann.
Solange MARV handverlesene Befehle verfüttert bekam war alles gut.
Jetzt wo ich künstlich dreckigen Netzverkehr zu Hauf erzeuge verreckt er umgehend :-)
Die reine Netzsache sehe ich erstmal als „Können wir so lassen“
Ich muss mir jetzt einen Filter einfallen lassen der MARV vor verstümmelten oder falschen Befehlen schützt.
Netter Gruß
Ps. Ja das mit dem Namen Bärlin siehst du richtig
Als man in grauer Vorzeit sah, das es in Zukunft Schwierigkeiten mit Umlauten geben wir hat man die Stadt schnell Berlin genannt.
Du siehst, wir waren schon immer vorne weg :-)
I see. Also hieß das ursprünglich "Hubschraubär" und "Sprä" . Wieder was gelernt.
Sag, es gibt eine Möglichkeit ("TEST"), daß sich "DoCommand" selber aufruft. Steckt da was drin ? Müßt ich jetzt rekursiv grübeln *ächz*
über selbige abgeschossen werden kann
Wir müssen schauen, ggf. Selbstmorde zu verhindern (Bridge-Client)
marvin42x
12.11.2006, 11:38
Haste natürlich recht.
Wenn ich einer App sage: „Stirb“
Und die macht echo an.
Bin ich drann.
Da brauchen wir eine Adressierung oder irgendwas.
Mach mal bitte Vorschläge. Ich habe da noch nix auf Lager zu.
Netter Gruß
Ps. Man sollte mit Ausländern nie eine Debatte über Umlaute beginnen :-)
marvin42x
12.11.2006, 12:19
TEST:
Ja das ist ein Relikt aus den Anfängen.
Da gehört statt „DoCommand“ natürlich „Test“ hin.
Würde möglicherweise(Ich bin jetzt zu faul das rekursiv durchzudenken) rekursiv sein wenn der Fall gezielt angesprungen werden würde.
Danke für den Wink.
Ich habe das bereinigt.
Netter Gruß
Naja, diese Echo-Geschichte ist natürlich jetzt durch das Testen etwas denaturiert.
Ein reines PING-PONG Echo ist ja in der Praxis was völlig sinnloses.
An sich sind ja dies ganzen "Commands" mehr dialog-orientiert, also request/response. (--->"stirb" <----"röchel"). Man könnte einfach sagen, auf "Commands" gibt's kein Echo, sonder nur eine Antwort.
--> CommandByte = 1 String "CMD=STIRB" request
--> CommandByte = 254 (ack)
od. CommandByte = 255 (nak)
Möglicherweise aber leichter zu konzipieren:
--> CommandByte = 1 String "CMD=STIRB" request
--> CommandByte = 1 String "ACK=STIRB" response
Dann weiß jeder, wie's gemeint ist.
Umlaute: Diskussionen schon gar nicht mir einem Wienär
Soda.
Anbei das gewohnte Set RnRegist.DLL und IP_DLL Project
Ein paar Zeilen sind neu, findest du leicht. Sind auch verständlich, hoff ich
Leider geht das mit Klassenintegration etc. nicht so einfach.
Der VB-Kollege macht sich ins Halstuch mit Marshalled Code, insecure Code und weiss der Teufel was.
Ist erstmal nur lesen.
Vorsicht: dzt. wird nix getrimmt oder adjustiert oder upper-gecased
muss man noch selbst machen, wenn notwendig
marvin42x
12.11.2006, 18:41
Befehlsauswertung:
Feine Sache.
Das läuft tadellos.
Er gibt mir halt noch einen zu langen String mit Leerzeichen.
Darum versteht er den Befehl noch nicht.
Das sind aber Kleinigkeiten. Die mach ich noch zurecht.
Modularisierung:
Was mir nebenher sehr gefällt ist die Modularisierung der Teilprojekte.
Aus Sicht der Juniorenklasse stellt sich das Beispielsweise so dar:
Mal der Idealfall:
Beispielprojekt hernehmen
#Region " Variablen und Lib Declarationen TCP/IP Conector "
#Region " TCP/IP Connector "
Zusammenklappen, markieren kopieren und im eigenen Projekt einfügen.
Jetzt noch die notwendige GroupBox nebst Inhalt kopieren und ebenfalls im eigenen Projekt einfügen.
Ab sofort läuft das.
Idee:
Wenn jetzt nix mehr in den Button Event Subs drin steht außer der Aufruf einer Sub die die eigentliche Funktionalität enthält kann die Funktion auch sofort über die anderen Befehlswege des Programms angesprochen werden.
Das ganze hätte zur Folge, dass die kleinen Beispielprojekte zu Behältern für Referenzbausteine werden.
Der Entwickler des Referenzbausteins könnte sich bei Änderungen unbekümmert austoben und hätte lästige Erklärungen vom Hals wie diese oder jene Änderung eingefügt werden muss.
Weil immer die komplette #Region gewechselt wird.
Was hältst Du von so was?
Netter Gruß
Ps. Mit „Entwickler der Referenzbausteine“ bist Du gemeint. :mrgreen:
marvin42x
12.11.2006, 19:27
Marshalled Code, insecure Code:
Das Handgeklöppelte schlanke Kleine passt nicht mehr in unser heutiges Konzept. Ohne Seiten -Airbag ist ja eine Fortbewegung auch nicht mehr denkbar.
Wenn Du dann mit 2 Jahre alten Anachronismen auftauchst musst Du Dich nicht wundern wenn die neue Welt nur rumnörgelt :-)
Netter Gruß
..Entwickler der Referenzbausteine..
au weia. Naja.
Klingt alles irgendwie nach Arbeit.
Btw: das Konzept beim dot-net VB ist ein ganz grausliches, mit dem jedes neue Megahertz der CPU und jedes Byte der Memory sofort abgefackelt wird.
EDIT Seiten-Airbag vs. handgeklöppelt: Ich werd' hoffentlich heut erfahren, ob mein Firmenrechner im A.. ist oder ob das "VisualStudio Professional" einfach Sch... ist. Es produziert laufend Blue-Screens. Da mein W2k auch schon eine alte Sau ist, wollen wir heute XP Prof. installieren. Mal sehen.
marvin42x
13.11.2006, 09:25
Referenzbaustein:
Nein, so war das nicht gemeint.
Ich schicke Dir mal ein Muster.
Es geht nur um die Gestaltung.
Wenn wir die richtig wählen kannst Du Dir sogar einiges an Arbeit sparen.
Es geht nur um so Sachen wie:
Keinen Programmcode in Button Event Subs
Benutzen des Region Features.
Das Hauptfenster heißt Form1.
Nur ein paar Konventionen .
Die aber aus Sicht der Juniorenklassen den Unterschied machen.
Du wirst das an dem Beispiel sehen. Sobald ich Zeit habe mach ich es gleich fertig.
Neuinstallation:
Da kommst Du ja in den Genuss der neuesten Technologie :-)
Vb2005:
Bei mir läuft das erfreulich unauffällig auf mehreren Rechnern.
Netter Gruß
..erfreulich unauffällig
Ja, mit dem Express-Zeugs hab ich auch keine Probleme. Aber in der Fa. hab' ich ihenen eingeredet, wir brauchen das komplette Visual Studio Super-Douper-Professionell mit Wasserspülung und Bauchtanzen, und das macht einen Blue-Screen nach dem anderen .
marvin42x
13.11.2006, 13:17
Vb2005 Prof.:
Jetzt wo Du es sagst fällt mir ein.
Ich hatte mir mal vor geraumer Zeit die Vollversion geliehen um zu sehen wo die unterschiede sind.
Dabei benahm sie sich auch zickiger als die Express.
Ich hatte das nicht weiter beachtet da ich damit sowieso nichts machen wollte.
Und weis der Geier, hätte ja auch an meinem System liegen können.
Ich hatte übrigens damals den Eindruck, dass einem bei der Express Version fürs erste nichts fehlt.
Das sind natürlich keine Angaben von Stiftung Warentest sonder ganz subjektive Einzelerlebnisse.
Netter Gruß
Hi,
na direkt fehlen nur Feinheiten und verschiedenes Drumherum. Das bißchen, was ich da auf der Prof.Version mache, kann ich 1:1 daheim mit dem Expreß verwenden. Also für uns macht es wohl nix.
Debuggen ist z.B. viel mächtiger und auch im Release-Bereich tut sich mehr. Aber da bin ich auch kein Guru.
Egal, was wir da tun, muß sowieso auf der Express Version lauffähig sein, sonst sterben wir einsam mit dem Zeugs.
marvin42x
15.11.2006, 14:36
Das Programmieren schreitet voran.
Ich will mal einen Vorschlag zur Kommunikation machen um das Thema anzuleiern.
Beispiel:
MARV startet einfach so. oder mit Parametern in der Befehlszeile
Nach/Bei dem Start guckt er in seine Konfigdatei.
Dort findet er wie er heißt und was er als nächstes tun soll.
Das wäre beispielsweise:
3 Trackbars starten.
Der Aufruf den er tätigt sieht etwa so aus:
OneTrackbar.exe MOTHERPID=2345,NETNAME=TRACKBAR,ID=1,DESTCLASS=53, DESTCLASSEID=1,PORT=42,IP=127.0.0.1; HOWSTART=AUTO
OneTrackbar.exe MOTHERPID=2345,NETNAME=TRACKBAR,ID=2,DESTCLASS=53, DESTCLASSEID=2,PORT=42,IP=127.0.0.1; HOWSTART=AUTO
Noch mal……
Der Trackbar der nun startet. Hat ja order automatisch zu Verbinden.
Und connectet auf IP 127.0.0.1 Port 42 , Anmeldename Trackbar1 PID 3456 mit dem Server.
Das erste was er tut ist ein IAM absetzen:
IAM=MOTHERPID=2345,MYPID=3456
Damit hat MARV die Rückmeldung das sein Kind online und am Leben ist und welche PID er jetzt hat.
Über Die PID kann er jetzt gezielt adressieren z.B Positionieren oder beenden. Auch kann er jetzt die Klassenzuordnungen neu setzen.
Erstmal Pause und warten auf Reflections.
Das ist ja noch nicht wasserdicht.
NETTER=GRUSS
*grübelgrübel*
Jetzt kommt ein Querschläger, setz' dich lieber erstmal hin :mrgreen:
Die Rollen und Aufgaben von MARV <> Rn_server sind mir etwas verschwommen.
Ich denk', das ist wie beim Highlander: Es kann nur einen geben.
Wär's nicht gescheiter und in der Anwendung/Betrieb einfacher, wir würden RN_Server und Marv zusammenführen ?
Alleine schon, nurmehr einen TREE /Config zu haben, scheint mir was wert. In solchen Redundanzen steckt nämlich oft einiger Kummer drin.
Schockiert ? :-) (kalte Umschläge mit Essig können helfen)
marvin42x
15.11.2006, 17:18
Nein, überhaupt nicht.
ist ja nicht so dass ich mich um Schwierigkeiten reiße.
Wenn der MARV als Ideenträger das Konzept weitergebracht hat kann er seine Schuldigkeit getan haben.
Nett von Dir das Du bisschen auf meine Gesundheit achtest :-)
Ich hatte extra den Server etwas außen vorgelassen um Dir nicht noch mehr aufzuhalsen.
Also, Du siehst, allerbeste Teambedingungen.
Das mit dem Tohuwabohu hatte mir auch schon Kopfzerbrechen bereitet.
Das zieht ziemlich viel Verwaltungsaufwand nach sich.
Mach mal Vorschläge wie Du die Lösung siehst.
Damit wir da was festlegen und ich meine Aktivitäten darauf ausrichten kann.
Netter Gruß
Bei der jetzigen Trennung MARV (Supervisor) und Server (zentraler IP-Knoten) wird die Kommunikationen immer knackiger und umständlich.
Was ich mir vorstell' bzw. überlege ist eigentlich einfach: Die paar Aufrufe, die man als IP Server extra braucht, drücke ich der DLL in die Hand, die Funktionen selbst sind ja eh drin. Und das Verhalten bezüglich Messages lesen (callback) ist identisch. Müßte nichtmal eine eigene Callback-routine sein, es ist in beiden Fällen ja das Gleiche zu tun.
Extra ist nur die Verwaltung mehrere IP-Handles, bei Broadcast etc.
Wir werden noch sehen, was alles diese DLL sozusagen im Hintergund abnudeln kann und wo du Hand anlegen müßtest.
Im Prinzip sagst du statt "connect" nur "define" (IPadr, Port) und in der Callback routine, die aber sonst genauso aussieht, gibt es den Event "New", d.h. ein neues IP-Handle taucht auf. Das mußt du dem mit "shell" gestartetem Prozeß umhängen. d.g. du mußt ihn anhand der PID finden (die er ja zu Beginn mitschickt)
Das hättest du im jetzigen Konzept aber auch müssen.
Und wenn du einem bestimmten Fuzzy was senden willst, mußt du das passene IP-Handle verwenden, statt des einen, zentralen, den du jetzt im Moment hast
allein schon der Vorteil: Wenn einer der GUI e.V. verstirbt, weißt du es aus erster Hand.
Klingt nach etwas Arbeit, ist aber einfach mehr straight-ahead und strukturell viel klarer.
War das positiv formuliert ? (dafür, das du wieder ein paar Sachen umbauen mußt) :-)
marvin42x
16.11.2006, 00:11
Zitat:
….positiv formuliert, ….paar Sachen umbauen musst.
Ja, das hast Du gut gemacht :-)
Ich hatte schon Helm und Sicherheitsgurte angelegt in der Annahme großer Umbrüche.
Habe alle Hoffnung fahren lassen, und mich dem Schicksal ergeben, mit dem Lied auf den Lippen „Nun fahr denn hin du schöne Welt“
Aber wie ich sehe komme ich noch mal davon.
Das was Du da entwirfst sieht gut aus und ist diskussionslos gekauft.
Die individuelle Kommunikation zwischen PC-Komponenten wäre damit auch in besten Händen.
Das Konzept smarter Clients mit Fernsteuerfähigkeiten in Modularere Bauweise sehe ich da nicht gefährdet.
Die Frage des lokalen Ereignis Manager oder Vereinstifter also das was MARV originär sein sollte müssen wir dann noch betrachten.
Das meint:
Was der Server, der ja naturbedingt sehr gut im Bilde ist lieber mit erledigen sollte.
Ob es sinnvoller ist das der Server die Schäfchen hütet und/oder auch startet und beendet.
Ist klar das ich MARV mag, aber wenn was anderes besser fürs Projekt ist wird das Bessere genommen.
Zehn mal Umschreiben habe ich ja fürs Erste versprochen ;-)
Netter Gruß
marvin42x
16.11.2006, 09:15
Eine Frage steht für mich noch im Raum:
Wieweit tangiert die Sache jetzt die Internetfähigkeit.
Callback und Handles hören sich nicht sehr transportfähig an.
Einmal könnte ich mir ja eine Browserbasierte Sache vorstellen.
Aber zum anderen Die Standard Clients als Verein auf einem Entfernten Rechner hinter einer Firewall.
Die einfach über…. ???????? kommunizieren.
Was mein Ideal wäre.
Oder sehe ich da was falsch?
Netter Gruß
However, konzeptionell soll sich ja eigentlich nichts ändern, ausser, daß aus den zwei Programmen MARV.EXE und RN_SERVER.EXE eines wird.
Denn sonst kommunizieren die sich blöde.
MARV verhält sich wie ein weibliches Wildschwein im Frühjahr: ("S-a-u" hat er zensiert)
Er wirft seine Ferkel hinten raus (SHELL) und wartet, daß die bei den Zitzen (connect Port 42) wieder auftauchen.
(Nicht alles, was hinkt, ist ein Vergleich)
Vielleicht gliedern wir aber die COM Port geschichte dafür aus und machen eine Client-Kategorie "Remote-Adapter" , die dann auch für anderer Remote-Geschichten herhalten kann (HTTP, SOAP, blabla)
Auch das wär dann etwas geradliniger.
Egal, step by step. Ich bau mal wieder an der DLL um und liefere ein Template.
Also, Meerschwein is angesagt.
Da ist ein IP_DLL drinnen, wie gehabt, mit ein paar Kleinigkeiten dazu.
Er kann, je nach Button, Server spielen oder Client, wie vorher.
Pikanterie: er kann auch beides gleichzeitig machen, (natürlich erst define und dann connect, logo)
Darüber hinaus noch naturbelassen, guck einfach mal rein.
marvin42x
17.11.2006, 00:51
Ja, habe schon reingeguckt.
Mein Gehirn hatte aber heute keine rechte Lust.
Darum bin ich mit ihm übereingekommen, dass ich das erst Morgen verstehe.
Weiter haben wir uns geeinigt die Zeit nicht zu vertrödeln, obwohl wir beide sehr müde wahren.
Darum haben wir erstmal was gemacht was relativ einfach ist und Arbeitserleichterung für die Zukunft verspricht.
Ich habe jetzt mal die Ecke an der ich arbeite zusammengestellt.
In den Programmtexten beider Projekte kannst Du sehen wie ich Dein Template einbaue.
Falls es Dir so zusagt würde ich das in diesem Stil fürs erste beibehalten wollen.
Das kann sich ändern wenn wir das möglicherweise in Klassen oder Module packen.
Bis dahin wäre es für mich zum Testen und Verwenden eine enorme Erleichterung.
Also bitte wohlwollend prüfen.
Ich habe die IP_DLL schon so zurechtgemacht das Du sie zum Weiterarbeiten nehmen könntest.
Das ist jetzt eine Option, wenn Du was anderes bereit stellst bau ich das natürlich auch ein.
Netter Gruß
marvin42x
17.11.2006, 00:54
Jetzt noch der Rest.
Alles mit einem mal wollte er nicht.
Netter Gruß
marvin42x
17.11.2006, 09:18
Bin zwar immer noch müde.
Habe aber jetzt mal die Sache ausprobiert.
Das ist ja noch mehr als ich glaubte zu brauchen.
Da bin ich ja hocherfreut über das Spielzeug.
Da muss ich erstmal richtig nachdenken was man damit alles anstellen kann :-)
Hmm…. Denk sinnnier……
Ich werde als nächstes mal sehen, dass ich das irgendwie anwende.
Netter Gruß aus den Research and Destroy Center
Short Doku I:
Beim Portdefinieren zeigt die bei "define" erzeugte "IpDef"-Referenz sozusagen auf das "Mother-Port". Ausser eventuell wieder wegschmeissen ("stop listening") kann man damit eigentlich nicht machen.
Wenn sich nun ein Client an das Port connected, wird "callback" gerufen mit dem Status=2. (Der Client kriegt da grad sein "ok" auf den Connect)
Auch damit kann man in unserem Fall nicht viel machen, da ja noch keine Message empfangen wurde.
Wenn nun der Client die erste Message wegschickt, sollte sie ja zumindest seine PID enthalten, und jetzt sollte (oder kann) der Server erst wirklich aktiv werden.
Aber da ist der Status nichtmehr = 2, sondern wieder normales "ok" (=0)
Rein technisch müßte sich ein Server diese IpRef nicht extra merken, er kriegt ja jedesmal in der Callbackroutine diesen Wert wieder mit.
Er kann auch so darauf normal senden (antworten) oder ggf. "disconnecten"
(Wird fortgesetzt)
Doku II:
Stimmen wir mal die Situation beim Starten der einzelnen Applikationen:
Es gibt eine Startliste mit Prozess/Programm Namen. wobei sie auch mehrfach gestartet werden sollen.
z.B. Eintrag "GUI e.V" Starten = 2 x
Der "SHELL" Befehl gibt ja die PID des erzeugten Prozesses zurück.
d.h. die PID des GUI e.V weiß MARV schon durch das Starten.
Jeder erzeugte GUI e.V Prozess connected sich nun mindestens einmal, möglicherweise aber auch mehrfach an das von MARV definierte Port (42)
Bei Marv taucht nun eine neue IpRef auf, die MARV ja dem richtigen Prozess zuordnen muß
Daher muß in der ersten Message von GUI e.V die PID enthalten sein. Die kann er nun bei den durch "SHELL" erzeugten Einträgen suchen und die IpRef dazu hängen.
Bei jeder weiteren Message des GUI e.V wird MARV nun die IpRef suchen (und finden), d.h. er weiß sofort, von wem die Message kommt.
Dabei sollte eine Struktur entstehen, wie im Bild angedeutet.
Sind wir soweit d'accord ?
marvin42x
17.11.2006, 14:25
Doku:
Ja soweit alles klar.
Ich habe noch nicht so viele mit Zeigern gearbeitet. Aber kein Problem.
Zitat:
und die IpRef dazu hängen…
das wäre jetzt ein Integer die ich im Nachrichtenstring mitschicke?
Allgemeines:
Wir wollten ja auch mal sehen ob davon nicht einige Richtung RN-Server wandert. Weil der ja besser im Bilde ist.
Und MARV eine eher Inhaltliche Rolle übernimmt die mehr mit Projekt spezifischen Fragen zu tun hat als mit Administrativen.
Und was Unterhaltsames zum Wochenende:
Rückblick von mir auf damals schwierige Zeiten:
Frr ms d Pro se krz Vrn ver dm s af d dls kl Mnt d Pgzil vllstg a d Bls sn knt.
Ht sn d Bls z Gl gr gwd
Frühr mstn die Proger ser kurz Varinamn verwndn dam sie auf dn dmls kln Monit die Progzeile vollstg auf dem Bildsch sen knten.
Hte sin die Bildsch zm Glck größer gewrden
Früher mussten die Programmierer sehr kurze Variablennamen verwenden damit sie auf den damals kleinen Monitoren die Programmzeile vollständig auf dem Bildschirm sehen konnten.
Heute sind die Bildschirme zum Glück größer geworden.
80 Zeichen pro Zeile war einmal das Limit.
Hut ab vor den alten Herren.
N G
Ntr Grs
Netter Gruß
Naja, eine Lochkarte hatte eben nur 80 Spalten. Und davon waren ein paar reserviert. Ursprünglich gab's zum programmieren überhaupt keine Monitore, sondern z.B. Lochkartenstanzer IBM 29 *hehe* und Formularpapier mit den Spalten. Kleinere Änderungen und Jobs hat man selber gestanzt, sonst gab man das in die "Datenerfassung", wo ein paar schicke Mädels gesessen sind.
Verknautschte Lochkarten wieder geradebügeln kennt ja heute keiner mehr.
*räusper*
Was das "reinhängen" betrifft, kommt's natürlich drauf an, was MARV eigentlich tun soll und worauf er aufpassen muß.
Wenn er nur ein paar Prozesse starten muß und sich dann einen schönen Tag macht, isses natürlich einfacher.
Wenn er seine Schäfchen hüten muß und schauen, daß sie nicht an den Klee gehen, muß er aber natürlich sozusagen für jeden Prozess ein "dossier" anlegen und die ganzen n:n Zusammenhänge verwalten.
Wie ich weiß, geht das aber mit dem Config-TreeView recht komfortabel.
Also schlaf' dich mal ordentlich aus, du wirkst ja im moment etwas ausgepowert, das kriegen wir schon hin.
(Hab ich das schon gesagt ? Wenn's hint' weh tut, soll man vorn' aufhören)
marvin42x
17.11.2006, 15:13
Ausschlafen:
ja an die Möglichkeit hatte ich auch schon vage gedacht :-)
Vielleicht sollte ich mal guten Rat befolgen.
Also dann bis etwas später
Netter Gruß
Kaum schreibt man was hin, fallen einem auch schon selbst die Gegenargumente ein.
Daß sich ein GUI eV mehrfach connected, ist technisch ja o.k., aber praktisch sinnlos und verwirrend, vor allem bringt's ja nix.
Dennbei einem eventuellen Routing muß ja das Verhältnis CLS/IDENT<>IpRef eindeutig sein.
CLS/Ident andererseits kommen ja aus der Config, also müßte ja da schon drin stehen, daß mehrere Connections gemacht werden sollen.
Also aus administrativer Sicht (starten, config, etc) ist nur eine Connection sinnvoll, welcher connection sollte er denn ein Commando "MAXIMIZE" senden ?
Was anderes ist es, wenn eine Gui eV daherkommt, die NICHT von MARV gestartet wurde. Remote von woanders, z.B.
Das muß akzeptabel sein. Für diese GUI hat MARV dann wahrscheinlich keine Parameter oder Commands auf Lager, aber wenn sich einer mit PID und CLS/IDN korrekt anmeldet, kann er auch mitspielen.
(Muß man aber was machen, damit man PID von fremden rechnern nicht mit den lokalen durcheinanderhaut)
Btw: Ich hab ein bißchen im MARV gestöbert. Für jeden gestarteten Prozeß speicherst du in einem Array die PID.
Als Quickie brauchst du eigentlich nur eine zweite, gleich große Integer-Tabelle, wo du am gleichen Index wie bei den Pids die IpRef reinschreibst.
Mit dem gleichen Suchvorgang kannst du also nach PID oder IpRef suchen, kommst auf den gleichen Tabellen-Index und weißt, was zusammengehört.
marvin42x
18.11.2006, 03:43
So, habe mir nach der Arbeit einen 10 Minuten Schlaf gegönnt, so was soll gesund sein, habe ich gehört.
Aber warum bringen die im Fernsehen schon die 0:00 Uhr Nachrichten?
Na egal, das kläre ich später.
Jetzt erstmal GUI EV’s
Erster Beitrag: Aufgabenverteilung
Also ich beginne jetzt erstmal etwas Philosophisch:
Das RN -Netz ermöglicht das Soziale Zusammenleben von vielen Einzelkomponenten.
Das RN –Netz misch sich nicht in die Gründe ein warum und wie sich Gruppen zusammenschließen.
Dieser Part des RN –Netzes erfordert Stabilität und Leistungsfähigkeit. Und ist vom User nicht zu beeinflussen.
Denkbare Auflistung:--BEGIN--------------------------------------------------------------------
RN- Netz:
Dazu gehört vermutlich Das ganze Level 0 und alles was man wohl unter Serveraufgaben rechnet.
Komponenten dieses Parts sind:
1 Der RN -Server
2 Die RN -Sende und -Empfangsroutinen in den Netzteilnehmern.
3 Die RN- „Befehls-Erkennungs „ Routinen (was dem Befehl zufolge gemacht wird aber nicht mehr)
Der Server hat natürlich, da er sich auf dem Bildschirm tummelt, auch eine soziale Komponente. Er muss also auf Geheiß seine Position und Größe ändern oder auch unsichtbar werden können.
RN –Netz Teilnehmer:
Das sind PC Programme mit spezialisierten Aufgaben.
Komponenten dieses Parts sind:
Trackbar
Levelmeter
Radar
3D Visualisiere
Datenbank
Simulant usw….
RN -GUI –Builder
Das ist ein PC –Programm welches Komponenten startet und ihr Überleben überwacht.
Komponenten dieses Parts sind:
N.N.
Eventuell RN-Server
In Vertretung: MARV
RN –Netz Assistenten
Da geht es um das „Warum und Wie“ RN –Netzfähige Netzkomponenten starten und zusammenarbeiten.
Komponenten dieses Parts sind:
N.N.
In Vertretung: MARV’s
Und andere Userapplicationen
Denkbare Auflistung:--ENDE--------------------------------------------------------------------
Aufgaben des RN –Netzassistenten.
Ich stell mir das mal versuchsweise vor:
Benutzerwünsche entgegenzunehmen
Das Artikulieren der Wünsche zu erleichtern
Dafür sorgen, dass ein vom Benutzer gewünschtes Szenario(EV) erzeugt wird und es betreuen.
Assistenten haben üblicherweise keine großen Kompetenzen in Fachgebieten.
Zentrale Fragen verwaltet der RN-Server
Der hat die Liste der Listen.
Wenn ich mir das so ansehe denke ich mangels besserer Ideen bei mir, wir machen den Builder und den Assistenten erstmal funktionell im MARV weiter und sehen was dabei rauskommt.
Das ist zwar erstmal sehr Programmier -sprach –Spezifisch aber das Logikmodell ist ja nachher universell.
Netter Gruß
marvin42x
18.11.2006, 03:59
Zweiter Beitrag:
Technische Ausführung der Builder und Assistent Funktionalität:
Mich graust schon vor Tabellen und Abfragen und Ref’s
Aber egal.
Das sieht aus als hätten wir so eine Art Level 1 Server zu bauen.
Die Adressierung:
Es erscheit zwingend, dass ein MARV immer nur einen Verein gründet.
3 Vereine dann = 3 MARV’s und daher auch drei Mother PID
Jede von einem RN Netz –Assistenten(in diesen Falle MARV) gestartete PC –Komponente bekommt über die Kommandozeile die Mother PID mit auf den Weg.
MARV bekommt beim Star auch schon die PID von seinem Schützling (Child PID) mit
Jetzt besitzt Ein Vereinsmitglied bereits eine Identität die durch Mother und Child PID definiert ist.
Darüber haben Mother und Child Kenntnis.
Es Connected nie ein EV. Der EV ist im Prinzip nur eine Liste. Zur Zeit geführt von der Mother(MARV)
Es Connecten immer nur Vereinsmitglieder.
Die haben auch nie identische Netnamen da der Netname von MARV erzeugt wird und eine Nummerierung besitzt.
Wenn jetzt Ein Vereinsmitglied beim Server Connected hätte er schon eine Menge an Individualität zu bieten.
Mother PID (Was jetzt die Vereinsidentität repräsentiert da jeder MARV nur einen Verein gründet)
Child PID
Dazu käme noch sein Netname, der ja auch beim Start zugewiesen wird z.B. Trackbar2.
Jetzt bekommt das Child vom Server bei der Anmeldung eine IpRev zugewiesen.
MARV weis davon noch nix???
MARV selber hat sich ja bereits mit seinem Netname als erster beim Server angemeldet und hat seine eigene IpRev zugewiesen bekommen.
Man könnte jetzt Den Netname von MARV so wählen, dass es ein Vereinsname ist.
Jeder MARV meldet sich also mit einem anderen Netnamen an.
Jetzt müsste das Kind erstmal mit Mutti reden können und seine neu erworbene IpRev bekannt geben.
Ab jetzt wäre eine eindeutige Adressierung über IpRev möglich.
Soweit meine unbestätigte Meinung.
Eine andere sehr interessante Sache:
Da Du ja in Deiner IP Wundekiste noch eine Serverfunktionalität versteckt hast schwebt mir die Möglichkeit vor eine Kommunikation außerhalb des RN –Servers zwischen Komponenten zu ermöglichen. Die machen sich einfach einen anderen Port auf und können reden ohne die Anderen zu stören. Wozu auch immer.
Jetzt erstmal genug
Netter Gruß
OT: Dein Lebensrhythmus macht mir Sorgen tzzz, tzzz
Wenns kompliziert wird, hilft Teilen.
Eigentlich gehts um zwei recht unabhängige Dinge:
Die Message-routerei PC<>PC<>µC und hin und her. (RnCom)
Und dann die Konfigurationsgeschichte (MARV, Kinder, eV, etc.etc.) die dafür sorgt, daß Applikationen da sind, wo es was zu routen gibt.
Wir sind ja im Moment tief drinnen im Letzteren und darauf können wir uns ruhig erstmal konzentrieren.
Der Gedanke, die MARV<>Kinder Kommunikation völlig außerhalb der "RnCom"-Geschichte abzuhandeln, hat was, denn das spielt sich praktisch immer point-to-point ab, Sender-Empfänger sind immer eindeutig. Der komplette Adress-header einer Message (und auch das CMD-Byte) kann da geschmissen werden, da steht für diese Verwendung nix interessantes drin.
marvin42x
18.11.2006, 14:36
Teilen ist gut.
Aufgabe und Namen:
Bei meiner letzten Auflistung ist auch der Begriff RN –Netzassistent aufgetaucht.
Der Netzassistent wird ja z.Z. von MARV dargestellt.
Wobei da inzwischen fast mehr Nick als Marv drin ist ;-)
Aber das ist gut so.
Ich denke wir sollten wie beim RN-Server, der ja seinen Job im Namen führt auch „RN-Netzassistenten“ , „Rn-NA“ oder eine ähnliche Bezeichnung einführen. Das hilft um schon von Außen zu sehen das dieses eine erweiternde Funktion des RnCom ist.
Solange mir noch nicht klar war was ich so als Programm verzapfe wollte ich da noch kein RN vorne anstellen. Aber inzwischen kristallisiert sich ja eine gewisse Brauchbarkeit heraus.
Was hältst Du davon wenn wir die „offizielle Version“ des RN-Netzassistenten „Rn-NA“ oder was Ähnliches nennen? Vorschläge gerne gesehen.
Programmier Option:
Ich würde den Code von MARV auch nicht gern als exklusiv Marin42x sehen wollen.
Mir wäre es aus praktischen Erwägungen heraus lieber, wenn der Code ein Vorschlag ist, in dem von beiden Seiten gebaut werden kann, was ja indirekt bereits geschieht.
Es ist eh Open Source.
Ich habe in der neuesten Variante bereits angefangen Versionsdatum und Autor für die Komponenten und später für die Sub’s einzuführen. Damit blieben wir vor Verwirrungen bewahrt.
Das ist ein Vorschlag. Ich bin in Professioneller Programmentwicklung nicht bewandert. Es kann also sein, das man so was ganz anders macht. Auch hier Vorschläge gern gesehen.
Das wir uns auf die EV Geschichte konzentrieren bin ich ganz auf Linie.
Zitat:
MARV<>Kinder Kommunikation völlig außerhalb der "RnCom"
Völlig hab ich nicht gesagt :-)
Der allgemeine Datenverkehr Sensor --> Anzeige bleibt ja unbenommen.
Die Befehlsübermittlung was Position kill und was weis ich angeht würde ich auch lieber im RnCom lassen um zukünftigen Ideen nicht im Weg zu stehen was die Remote Seite angeht.
Da käme ja sonst keiner mehr ran.
Wenn jetzt aber zwei PC-Applikationen unbedingt Mapps austauschen wollen könnten sie das tun ohne die Anderen zu behelligen. Das gleiche würde für Bildbearbeitungen und Erkennungsdatenbanken gelten.
Es würde nicht übers RnCom laufen wäre aber Bestandteil des Generic RN-Client.
Da würde mir erstmal eine rudimentäre Ausprägung für den Tag X reichen.
Irgendwie rede ich in letzter Zeit ein bisschen viel
Netter Gruß
Ps. Jetzt bin ich aber wieder im normalen Nachmittagsprogramm :-)
Jetzt hat mich diese Schweinebacke unter dem A.. ausgeloggt und will, daß ich alles nochmal schreibe *grmpf*schnorch*
Kurzform:
Vorschläge:
RnComManager /RnComWizard /RnComAssistant
(ausses Roboternetz noch ein "Netz" im Namen is zuviel :-)
Eigene Schiene: Is im Grund ja jetzt mal völlig egal, über welches Port "Marv" mit seinen Ablegern quatscht. (Du kannst mit der DLL auch noch x andere Ports definieren) Und wenn dann mal irgendeine Applikationen mit einer anderen auf einem eigenen Kanal tuscheln will, soll's uns im Moment auch wurst sein.
Open-Source-Profi-development: Solange wir das Fundament noch hin und herschieben, kann der Klempner im 1.Stock keine Badewanne aufstellen, da hilft ihm nix.
Schneeball-Phase, halt.
Jetzt setz' ich mal ab, sonst schmeißt er mich wieder
marvin42x
19.11.2006, 15:00
Ich mein das ist ne Sauerei, dass ich jetzt lachen musste.
Wenn einem das ganze Geschriebene flöten geht ärgert man sich schon die Platze.
Ich hab auch gleich wieder aufgehört mit Lachen, ja.
Bei mir ist das ja anders. Da meine Rechtschreibung schlecht ist muss ich das Ganze immer erst in Word verzapfen bevor ich es einstellen kann. Da kann mich nur noch ein PC-Absturz bremsen, wie letztens auch frei nach Murphy passiert ist.
Aber das war’s eigentlich nicht was ich sagen wollte.
Ich wollte mal fragen ob Du es drauf hättest mir zum Spielen eine Sonder Edition des RN-Servers zu bauen die automatisch beim Start auf 127.0.0.1 Port 42 Open macht?
Ich schraube gerade an dem ganzen Getümmel und das würde mir sehr zu Passe kommen.
Das ist aber nicht vorrangig.
Ich Quäle mich sonst auch so weiter durch.
Netter Gruß
Das Statement schreib ich noch, bevor ich alles speichere
Special Edition: sollte kein Problem sein.
Du kriegst heut eh' noch ein paar Schmankerl vor die Füsse :mrgreen:
Sorgt euch. Brief folgt
marvin42x
19.11.2006, 16:00
oh oh,
Bei den Rohrlegern hieß das:
Kinder betet
Vater lötet
Netter Gruß aus dem unterirdischen Schutzraum
So. Ich hab die Doku ein wenig auf den letzten Stand gebracht.
Passende DLL dazu is auch dabei.
(bei den "RnRegist" ist aber noch alles beim Alten)
Neu: Manipulationen mit "Key-Value" unabhängig von RnCom oder sonstwas. (schreiben und lesen)
Also ggf. auch für Commandline bzw. shell-commands
Hab ich noch nicht, aber ich denke, wir werden in den Routinen den Text für "KEY" standardgenmäß links ausrichten, trimmen und uppercase.
"Value" nur ausrichten und trimmen.
Gerade mit ggf. anderen Plattformen ist das einfach sicherer
Bei den "Config" Paramtern und Knoten mach ich es ja auch, das hat sich bewährt.
marvin42x
19.11.2006, 18:55
Da können wir uns ja richtig einig sein.
Manipulation mit Key-Value:
Unabhängigkeit ob Commandline, TCP/IP Message, oder aus der Config Datei,
alles ein Format und eine Routine. Genau.
Formatierung:
Value Case sensitiv lassen ist mir sympathisch. Auch der Rest der Festlegung findet volle Zustimmung.
Eine sehr runde Sache und eine sehr gut lesbare Dokumentation dazu.
.
Verständnissproblem:
Bei einer Sache habe ich noch einen Riss im Hirn.
Wenn ich schreibe FORMPOSX=100,FORMPOSY=200
Ist das Klar.
Das ist bei mir jeweils eine Routine.
Wenn ich eine Routine habe, die zwei Parameter braucht
Ausgedachtes Beispiel:
FORMPOS
Die will x und y übergeben haben.
Wie würde da die Zeile aussehen?
Netter Gruß
Es gibt mehrere Möglichkeiten: Eine davon
Mehrere Values:
FORMPOS=264=128,...
Sowas schreiben:
RnCsvWrSep(csvref, "FORMPOS")
RnCsvWrVal(csvref, "264")
RnCsvWrVal(csvref, "128")
Sowas Lesen
RnCsvRdSep(csvref, Key)
if Key = "FORMPOS" then
RnCsvRdVal(csvref, X_VAL) ("264")
RnCsvRdVal(csvref, Y_VAL) ("128")
Da mach ich es aber immer so, daß die Routine ihre Values selber liest oder schreibt, d.h. ich drück' ihn einfach den CSVREF Handle in die Hand
RnCsvRdSep(csvref, Key)
if Key = "FORMPOS" then
sub_routine (CsvRef as Integer)
Elseif Key = "SAUBACKE" then
sub2_routine (CsvRef as Integer)
public sub_routine (CsvRef as Integer)
RnCsvRdVal(csvref, X_VAL) ("264")
RnCsvRdVal(csvref, Y_VAL) ("128")
public sub2_routine (CsvRef as Integer)
RnCsvRdVal(csvref, SAU_VAL) ("???")
Da kann sich die Routine selber drum kümmern, da sie ja am besten weiss, was sie braucht.
Da das "RdVal" niemals über das konkrete Element hinauskommt, kann da nix passieren, Also wenn nur ein Value da ist, kann die Sub auch zwanzigmal RdVal sagen, ohne was durcheinander zu bringen.
Andere Variante, auch gern genommen:
In einem solchen String stehen nur Keys und werte für EINE Funktion
Die Funktion als Key ohne value vorne.
"FORMPOS,X=100,Y=20,TOPX=233,TOPY=200"
Dann würde die Hauptroutine nur einen RdKey machen und dann die Funktionen mit dem CsvRef aufrufen, dann soll die selber lesen, was sie braucht.
Dritte Variante, etwas aufwendiger:
Irgendein Value ist selbst ein Key-Value string (Das geht beliebig rekursiv). Das erklär' ich noch, wie das geht
Vielleicht nachgeschossen, falls das nicht gut erklärt wurde:
RnCsvRdKey liest IMMER den NÄCHSTEN KEY, das RnCsvRdVal dazwischen KANN man machen, MUSS aber nicht
z.B. String
"PAR1=ellenlangerschrott,PAR2=wichtig
RnCsvRdKey(ref, KEY) liefert "PAR1"
wenn ich will, kann ich jetzt RnCsvRdVal() machen und krieg "ellenlangerschrott"
So oder so, der nächste
RnCsvRdKey(ref, KEY) liefert "PAR2"
marvin42x
19.11.2006, 19:58
Wie ich das im Moment sehe schließe ich mich deiner Gewohnheit an und drück der Routine den CSVREF Handle in die Hand.
Das bedeutet zwar, dass ich alle Routinen umschreibe aber der Vorteil überwiegt hier.
Ich denke das hast Du gut beschrieben.
Ich werde das mal umsetzen.
Netter Gruß
marvin42x
19.11.2006, 21:22
CSVREF Handle in die Hand drücken:
Bin doch noch etwas unschlüssig geworden.
Da ich die Routinen auch aus der Programmlogik heraus ansprechen will kann es sein, das ich da noch variiere.
Aber Wege hat es ja genug.
Vorschau:
Wenn ich das Key=Value implementiert habe kommt noch ein Net Befehl dazu:
SNAPSHOT
Alle Child -PID in der Liste des Wizards bekommen diesen Befehl und machen einen Snapshot ihrer Parameter.
Länge, Breit, Position, Port, IP, Werterange usw.
Diesen Config Tree senden sie an den Mother –PID (den Wizard)
Der Wizard baut daraus einen Gesamt Tree und speichert den unter einem gewünschten Namen ab.
Das ist dann die Config mit der der Wizard die gespeicherte Session wieder herstellen kann.
Gott steh mir bei.
(PicNick würde da aber auch erstmal reichen)
Netter Gruß
Ps. damit wäre das Thema Config aber auch schon am gewünschten Ende.
(Glaube ich jedenfalls) :-)
marvin42x
19.11.2006, 23:51
Pars ComandLine läuft.
Und wird erkannt und ausgeführt.
Ganz prima.
Was ich noch machen muss damit er das richtige bekommt siehst Du unten:
Aber das weist Du ja.
CsvLen = RnCsvRdKey(CsvRef, Key) ' ergibt “PARAMx”
While CsvLen <> 0
CsvLen = RnCsvRdVal(CsvRef, Val) ' ergibt “Valuex”
'-----------------------------
' auswerten Key=Val
MyKey = Trim(Key) 'Leerzeichen eliminieren
MyVal = Trim(Val) 'Leerzeichen eliminieren
lenk = MyKey.Length 'Länge holen
lenv = MyVal.Length 'Länge holen
MyKey = MyKey.Remove((lenk - 1), 1) 'Bissel Tricky, da muss noch ein verstecktes Zeichen am Ende gekillt werden.
MyVal = MyVal.Remove((lenv - 1), 1) 'Bis ich da drauf gekommen bin......
DoCommand(MyKey, MyVal)
'-----------------------------
CsvLen = RnCsvRdKey(CsvRef, Key) 'Next
End While
Ans Schreiben von Key=Values mach ich mich morgen.
Netter Gruß
Aus den Search and Zerstreu Labs. In good old Berlin
Edit:
Nachtrag:
Die frischeste Version findest Du unter dem Link den ich Dir geschickt habe.
Und sag jetzt nicht Du hast den verbummelt.
Netter Gruß
Tagchen !
Ok, um das trimmen etc. kümmere ich mich, schau nur erstmal, ob du bis dahin irgendwie überlebst.
Pfooaaa ! Der VB ist nix für Rekonvaleszente, Frischoperierte, manisch Depressive und Gemütskranke !
Wenn du sagst Text.Length , gibt er dir die Länge von "new", egal, was da drin steht.
Leider muß man auf jeden Fall folgendes einfügen, damit das ein sauberer String wird:
CsvLen = RnCsvRdKey(CsvRef, Key)
While CsvLen <> 0
Key = Key.Remove(CsvLen, Key.Length - CsvLen) NEWNEWNEW
CsvLen = RnCsvRdVal(CsvRef, Val)
Val = Val.Remove(CsvLen, Val.Length - CsvLen) NEWNEWNEW
....
Ich faß' es nicht.
(Geht auch, wenn csvlen = 0, also keine Sorge)
Anbei die DLL mit trimmen und ausrichten, wie besprochen
marvin42x
20.11.2006, 22:31
:-)
Da habe ich auch rumgeturnt.
Na Du bekommst das kürzer hin.
Dank für die prompte Lieferung.
Ich habe es schon eingebaut und werde mal sehen. Das ging ja vorher schon ganz easy.
Ich habe mich heute noch mal mit einer Zweifensterlösung, ein Fenster Generic Funktionen, das andere freie Anwendung, rum geschlagen.
Bin aber noch nicht so recht begeistert davon. Das werde ich erst später noch mal aufgreifen.
Man müsste einfach mehr Zeit haben.
Das Programm heißt jetzt RnWizard womit der Name Programm ist.
Netter Gruß
.Man müsste einfach mehr Zeit haben.
*hehe* wemenem sagen sie das ?
We're goin' to see the wizard,
the wizard, the wizard of Oz
marvin42x
22.11.2006, 00:32
Ich komme nicht weiter.
Irgend was ist falsch.
#Region " CommandHandling……
ParsLineArgument()
Val = Val.Remove(CsvLen, Val.Length - CsvLen) 'NEWNEWNEW '(Autor:PicNick) 20.11.2006 21:09 GG
Liefert
System.ArgumentOutOfRangeException wurde nicht behandelt.
Message="Die Anzahl darf nicht kleiner als 0 (null) sein.
Parametername: count"
ParamName="count"
Source="mscorlib"
Kannst Du mir da mal unter die Arme greifen.
Ich investiere sonst unmäßig Zeit in die Sache.
Netter Gruß
marvin42x
22.11.2006, 02:48
Nachtrag:
Der RnWizard wertet Key=Value Kommandos über 5 Wege aus.
Program start Parameter von der Command Line.
TCP Message String Command Lines
Parameter aus der Config Datei
Parameter aus Den Auswahlboxen.
Parameter Programmintern aufgerufen.
Das alles erfolgt bereits (fast) einheitlich.
Mir wäre was daran gelegen die Commandline –Pars Routine einmal zu haben.
Das bedeutet die Frage können wir mal schauen ob wir das vereinheitlichen können?
Kannst Du da mal einen Vorschlag machen, wenn Du das für sinnvoll hältst. Oder sonst eine Meinung dazu sagen.
Das Commandline zusammenbauen geht übrigen ganz prima mit der Dll.
Das stellt mich vor keine Hürde.
Habe ich jetzt eingebaut. Ist noch nicht in der geposteten Version drin.
Nun denn, weiter geht’s
Netter Gruß
NumberFive
22.11.2006, 08:21
Unter www.i-do-more.de/mine-robo/download/RN-Protokoll.zip
findet ihr ein zip file
RNComNetworkLayer ist meine Netzwerk umsetzer auf der einen Seite TCP zum rn_server auf der andern Seite Multicast stream.
der SerialServer zeigt die daten an die Kommen war jetzt auf die schnell die einfachest lösung um mal zu sehen was da so kommt und ob mein Multicast umsetzer tut. Ich möchte als erster eine daten logger auf basis mysql schreiben weil meine erfahrung mir gezeit hat das man so was sehr schnell braucht. Telegramme wieder simulieren die durch netz gefolgen sind. (Simulation).
die Optition sollen sein im gleich Zeit abstand oder im zeit raffer als so schnell wie geht. Ich denke da merkt man dann schnell wo es noch hackt.
ich hoffe ihr kommt mit meinen Logging klar und könnt mir sagen ob ich die Daten richtig decodiere.
Gruß
Also *entrüst*, um DIE Zeit ist die Hot-Line zu. Ich bin ja kein Vampir oder Bäckergeselle.
Ich schau mir das gleich an. Die Länge NULL hab ich probiert, kein Problem.
Nun müssen wir schauen, wie es zu negativen Zahlen kommen kann.
marvin42x
22.11.2006, 08:57
@NumberFive:
Deine Absicht mit dem Datenlogger freut mich erheblich :-)
Könntest Du noch ein kleines Readme machen?
Ich weis nicht wie ich das richtig in Bewegung bringe.
Persönlich lasse ich im Moment den Datenverkehr des Servers über das Loop Back 127.0.0.1 Port 42 laufen. Das ist das einzige was überall gleich ist.
Netter Gruß
''Marvin42xxxxxxxxx-------------Ab hier wird es spannend--------------------------
'----Ab hier neu
Key = Key.Remove(CsvLen, Key.Length - CsvLen) 'NEWNEWNEW '(Autor:PicNick) 20.11.2006 21:09 GG
CsvLen = RnCsvRdVal(CsvRef, Val) ' ergibt “Valuex”
Val = Val.Remove(CsvLen, Val.Length - CsvLen) 'NEWNEWNEW '(Autor:PicNick) 20.11.2006 21:09 GG
'----Bis hier
'Post PicNick:
' CsvLen = RnCsvRdKey(CsvRef, key)
' While CsvLen <> 0
' Key = Key.Remove(CsvLen, Key.Length - CsvLen) NEWNEWNEW
' CsvLen = RnCsvRdVal(CsvRef, val)
' Val = Val.Remove(CsvLen, Val.Length - CsvLen) NEWNEWNEW
'....
'-----------------------------
DoCommand(Key, Val) 'Ab zur Befehlsauswertung
'-----------------------------
'-----------------------------------------------------
'wichtig wichtig wichtig wichtig wichtig wichtig wichtig wichtig
'-----------------------------------------------------
'durch das .Remove sind die strings KEY & VAL ja jetzt möglicherweise zu kurz geworden
' wir brauchen also wieder neue in voller Länge
' das ist so auch bei den anderen "CSV" lese-sachen
' Fällt nur auf, wenn erst ein kurzer und dann ein langer "Key" oder "value" kommt.
Key = New String(" ", 64) ' 64 = maximallänge Key oder Value
Val = New String(" ", 64)
'-----------------------------------------------------
'wichtig wichtig wichtig wichtig wichtig wichtig wichtig wichtig
'-----------------------------------------------------
CsvLen = RnCsvRdKey(CsvRef, Key) 'Next
End While
CsvLen = RnCsvDrop(CsvRef) 'Freigeben der Buffer
Eigentlich logisch, aber da muß man sich erst an die Eigenheiten der Heap-Verwaltung gewöhnen.
Tut leid' :oops: aber wir lernen ja dazu. ](*,)
Da isses so, daß dir nur das letzte Argument überbleibt. Man müßte entweder alle argumente zu einem string zusammenhängen (wenn der USer versehentlich irgendwo ein blank drin hat) Oder von vornherein nur das erste Argument oder halt das, wo key-value drin steht, lesen
For Each Argument As String In My.Application.CommandLineArgs 'Orginal Start String
MsgBox("Start Argument: " & Argument & "End Argument")
If Argument <> "" Then CsvString = Argument 'Den String zur Auswertung übergeben
MsgBox("Start Argument für die Verarbeitung: " & CsvString & "End Argument")
Next
NumberFive
22.11.2006, 11:09
Nun die Kleine readme
Zur Zeit funktionieren nur:
SerialServer und RNComNetworkLayer der rest funktioniert
noch nicht richtig und der serialserver ist mal als anzeige Client defomiert.
RNComNetworkLayer /RegServer starten
damit er sich ein trägt das sollte mit ein MsgBox bestätigt werden.
nach dem ersten start gibt es in dem verzeichis eine RNComNetwork.ini
[RNComNetwork]
OwnIP=192.168.2.10 anpassen lokale adresse
MultiCastIP=224.0.0.0
MultiCastPort=44000
StartTCPConnect=1 wenn 1 dann macht er connect zum rn_server
RN_ServerIP=192.168.2.10 die adresse des rn_server port 42 ist zur zeit hart kodiert
marvin42x
22.11.2006, 11:44
@PicNick:
Hotlin für Vampire:
Ist schon recht wenn die nicht so lange offen hat :-)
Ich lungere dann halt vor der Tür bis aufgesperrt wird.
Meckermode:
Ohne Gemecker geht’s wohl nicht *breit grins*
Haste noch ein Haar in der Suppe gefunden?
Mach mal nen besseren Vorschlag.
Wenn kein Leerzeichen drin ist liefert das brav das was ich will.
Zur Not kann ich es auch so einrichten, dass er auch die durch Leerzeichen getrennten Einzelteile abliefert. Ich bin jetzt aber erstmal davon ausgegangen das der String OK ist.
Mit Stringreparaturen mochte ich mich noch nicht abgeben.
Ich habe da schon einiges versucht und viel Zeit rein gesteckt und wenn Du was hast was gut ist nehme ich es, jetzt mal im ernst, gerne.
Es ist für Junioren extrem aufwändig an solchen Stellen.
Das sind drei Zeilen an denen gehen Tage drauf.
Und nun noch mal schönen Dank für die prompte Bedienung.
Ich verstehe das jetzt so, dass ich die zwei Zeilen Key= und Val= einbaue?
Wenn das geht werde ich die Ecke mal entrümpeln.
Sieht ja inzwischen aus wie bei Hempels unterm Sofa.
Meinen Arbeitschwerpunkt habe ich jetzt auf die Registry verlagert.
Es geht darum Die gestarteten Childs darin zu führen.
Es ergibt sich dadurch auch die Frage auch Serverfunktionalitäten in den RnWizard zu verlegen.
Wäre, würde, könnte:
Da würde ich aber gerne stark abgestimmt mit Dir vorgehen.
Der Wizard ist ja bereits ein Gemeinschaftsprojekt.
Wenn wir uns entschließen würden den Server komplett einzulagern würde ich es schön finden wenn Du den Serverteil des Wizards gestalten würdest. Du hast ihn ja bereits in C gebaut. Und die Gestalt des Wizards ist ja bereits mindestens zur Hälfte von Dir.
Auch vom Namen her habe ich das bereits absichtlich endpersonalisiert.
Für mich alleine wäre Server zu heftig.
Was mir gefallen würde wäre ein Programm in einer frei verfügbaren, leicht zu verstehenden, (hüstel), Programmiersprache. Das jeder versteht und so umbauen kann wie er lustig ist. Die Gestaltung der Oberfläche kann dann auch je nach Geschmack erfolgen.
Ideen fürs Weitermachen gerne gesehen.
Im Moment ist auch so noch gut zu tun.
Netter Gruß
marvin42x
22.11.2006, 12:09
@PicNick:
Wunderbar, wie das läuft.
Besten Dank.
@NumberFive:
Danke für das Readme.
Ich mach mich mal drann.
Netter Gruß
Schau, das du nicht ins pralle Sonnenlicht kommst, sonst zerfällst du uns zu Asche. :mrgreen:
Commandline: Checken wir mal, was denn in der Commandline drin stehen kann
1) Nix
Ist die Situation Erstaufruf/"NEW".
Er hat also nur default-Werte und könnte eigentlich garnix machen, der User muß also die Registry aufbauen und dann als "Save As" speichern.
2) Aufruf durch "Start"/Scheduler/Shortcut
3) Aufruf durch SHELL eines anderen Wizards
Da das der Aufgerufene nicht unterscheiden kann, sollte die Commandline in beiden Fällen gleich interpretierbar sein
Wenn wir grundsätzlich das Key-Value-format nehmen, isses am besten, wir hängen die Command-line-teile einfach zusammen. Durch das adjustieren und trimmen regelt sich das Weiter dann sowieso von selbst.
Möglicher Komfort: beim Zusammenhängen zweier Commandline-Elemente sicherheitshalber ein Komma dazwischen hängen d.h.
CONFIG=file.cfg,AUTOSTART=ON
ist dann das gleiche wie
CONFIG=file.cfg AUTOSTART=ON
Wenn ein User woanders Leerzeichen reinmacht, hat er Pech gehabt.
Wir machen kein AI Programm.
Vorschlag:
Dim CsvString As String = "" 'Input – Key-Value String
Dim CsvRef As Integer
Dim CsvLen As Integer
Dim Key As String
Dim Val As String
If LineArgument = "" Then 'Line Argument leer -->Commando Line auslesen-
For Each Argument As String In My.Application.CommandLineArgs
If CsvString.Length = 0 Then
CsvString = Argument
Else
CsvString = CsvString & "," & Argument
End If
Next
MsgBox("Start Argument für die Verarbeitung:<" & CsvString & ">End Argument")
Else
CsvString = LineArgument
MsgBox("Start Argument für die Verarbeitung:<" & CsvString & ">End Cmdline")
End If
"DoCommand" sollte einen Wert zurückgeben, OK / Kenn ich nicht
bzw. "parsline" eigentlich auch.
Denn wenn weder da noch dort was sinnvolles drinsteht (Situation "new") ist z.B. jede weitere Aktion zweifelhaft.
marvin42x
22.11.2006, 13:55
@PicNick:
Dein Vorschlag oben finde ich nett, den habe ich jetzt adoptiert.
Weil er so schön schlank und schlau ist.
Ich hoff mal, dass der auch funktioniert :-)
Rückgabe:
Ich habe zwar noch keinen Plan wozu DoCommand was zurückliefern sollte. Aber ich habe das mal zur Freude halber eingebaut.
DoCommand hat von Hause aus als Case Else die Routine
IdontUnderstandWhatYouWont(Command & Value)
Dort wird das auch ab LogLevel 3 mitgelogt inclusive was er genau nicht versteht.
Bei ParsLineArgument() weis ich auch nicht genau wen das im Programmverlauf interessiert ob das geklappt hat und was bei raus gekommen ist. Wenn nix gescheites da ist macht er eben nix.
Das mitloggen ab Loglevel 2 kommt jedenfalls sowieso.
Ich bau das mit dem Rückgabewert aber auch aus Stil Gründen ein.
Geschadet hat so was noch nie.
Ich entwickele ja erst meinen Programmierstil :-)
Bei der Gelegenheit.
Das WorkoutCommand() macht doch im Prinzip dasselbe wie ParsLineArgument()
Kann man das alles zu einem machen?
Ist das Sinnvoll?
Netter Gruß in die Meckerecke :-)
Ps. Mit dem Sonnenlicht pass ich auf
Return-Values:
Du rufst im MARV_LOAD (startup) den PasLineArgument() auf, und egal, was da passiert, wenn die fastconnect Checkbox ein Häkchen hat (und das hat sie immer aus dem Form-Designer) startest du einfach los und schaust nicht rechts oder links.
Da hilft das Log-Protokoll nur dem Gerichtsmediziner bei der Autopsie.
WorkoutCommand() / ParsLineArgument()
Klar kann das eine Routine werden. Sicherheithalber als zusätzliches Argument einen Code, wo denn das Command herkommt. Kann immer sein, daß bei irgendeinem Command, das uns noch einfällt, ein Unterschied in der Behandlung notwendig ist.
Sonst, wenn möglich, immer Gleiches mit Gleichem vergelten.
A propos FormDesigner: Es ist die Situation entstanden, daß Parameter und Werte teils aus der Konfig, teils vom Designer und tw. aus dem Programmcode kommen.
Wir sollten da zusammenräumen, wobei ich dafür wäre, auf die Config zu setzen. Sprich:
Startup:
1) Alle Form-Elemente neutral, blank und leer.
2) Wenn aus der Commandline eine Config-File angegeben, dann einlesen und in die Formelemente verteilen
3) Wenn keine Config, nur Unstrittiges (MyPID, "127.0.0.1" "42") ausfüllen
4) Und dann schauen, was zu machen ist.
marvin42x
22.11.2006, 15:05
Guter Plan.
So wird gemacht.
Damit für die Gerichtsmedizin nicht mehr so viel übrig bleibt :-)
Komentare dieser Art immer gern gesehen.
Das meine ich jetzt tatsächlich so.
Netter Gruß
marvin42x
22.11.2006, 15:39
@PicNick:
Das ist übrigens genau das was jetzt auch ansteht.
Die Config Sache hochziehen.
Damit erledigen sich dann die im Form Designer abgelegten Werte.
Da das mit dem Parsen jetzt erstmal läuft, vermute ich mal, muss er mit Configs umgehen lernen.
Und im Neuzustand muss er sich seine erste Config eben anlegen oder er bekommt eine genannt.
Das mit Command Bestätigungen ist vermutlich auch ein Muß. Das fehlt noch völlig.
Das wird ja noch mal alles recht aufwendig.
Wenn ich sehe was ich auch noch alles Betriebsicher machen muss.
Da werde ich wohl doch bei dem Freizeitverbrauch von meiner Umwelt verstoßen unter einer unserer zahlreichen Brücken enden.
Das hätte natürlich den Vorteil nicht der prallen Sonne ausgesetzt zu sein
Netter Gruß
..unter einer unserer zahlreichen Brücken enden..
Na, wollen wir doch nicht hoffen, und schon garnicht, daß du vorher auch noch runterspringen mußt. :-)
.. prallen Sonne
Immer auch auf Knoblauch achten :-)
Noch was: Wir haben ja bei Key-Val gesehen, daß das mit den Strings und Stringlängen so seine Haken hat.
Ich schau mir die Register-DLL in dieser Richtung durch.
Also, wenn da irgendwo Kanten auftauchen, nicht verbeißen, sondern Laut geben
mmmhh. Blöde Geschichte.
Also, was besseres fällt mir jetzt auch nicht ein:
Um die zurückgegebenen String Vergleichen zu können oder so:
(Tree_build_node)
ppar = RnRegistNextPar(head, 0, ParName) ' get first param
While ppar <> 0 ' while params
StrLen = RnRegistName(ppar, ParName)
WrkString = ParName.Remove(StrLen, ParName.Length - StrLen)
' WrkString passt jetzt wirklich
' braucht KEIN "new" vorher
Die DLL-Funktion
StrLen = RnRegistName(ppar, ParName)
Kann man auf alle register-Werte anwenden, also DIR, PAR und VAL
Der Name wird nun 2 x zurückgeschickt, aber was soll's
marvin42x
22.11.2006, 19:28
@NumberFive:
Die Programme kann ich starten. Habe auch das reg ausgeführt aber ohne eine Messagebox zu bekommen. Die Dll Habe ich zusätzlich nach system32 kopiert.
Ich meine das ich das schon früher mal mit reg gemacht hatte.
Das Connectete aber nicht am Server.
Ich habe Dir jetzt ein Susi Sorglos Packet geschnürt in dem ist alles drin was ein Mensch so braucht. Wenn Du dich mal im icq meldest schicke ich dir was frisches. Damit kannst Du dann ein Netzwerk hinstellen und Tests durchführen.
Mich würde interessieren ob die RnRegist.dll auch von vb6 aus angesprochen werden kann.
Für den Amiga muss es ja nicht kompatibel sein.
Aber für unsere älteren Programmierer unter VB6 wäre es doch nicht schlecht.
MrNiemand sitzt in der Beziehung im selben Boot mit Dir oder umgekehrt. Vielleicht könnt ihr eine Allianz bilden.
So eine Art Veteranen Club ;-)
Ich bin gerade sehr knapp mit Resourcen. Was sich erst ändert wenn so eine Art Grundversion des RnWizards steht.
Vielleicht zersägst Du aber auch den RnWizard für Deine Zwecke und umgehst alle Probleme?
Wie auch immer es gibt viele Wege.
Melde dich bitte mal.
Und verzeih mir möglicherweise den Veteranen Club.
@PicNick:
Wenn ich fertig bin mit umfummeln auf allgemeinen Wunsch eines einzelnen Herrn.
Werde ich verstehen was Du zuletzt gesagt hast.
Das mit dem Knoblauch und das mit dem nicht verbeißen war ja noch relativ einfach.
Aber danach muss ich mir mein Tauchzeug holen und in Richtung Wunderbaum abtauchen um Erleuchtung zu erlangen.
Das wird nicht an mangelndem Interesse scheitern.
Die Gründe warum das scheitern könnte wären nur das mir die Götter die Erleuchtung verweigern.
Netter Gruß
Nun, die Sache mit Strings, die von der DLL zurückgegeben werden sollen:
Wenn du einen Leer-String erzeugst mit
MyString = new string(" ", 64)
und diese Stringadresse an die DLL weitergibts, kann die wunderbar ihr Zeugs drin ablegen. ABER:
Die Länge ist aus Sicht von VB nach wie vor 64, auch wenn eigentlich nur drei belegt wurden.
Daher hauen Vergleiche und andere Manipulationen nicht hin, weil (scheinbar) der String mit Blanks auf 64 Bytes aufgefüllt ist.
daher muß man aus dem einen String einen neuen machen, aber gleich in der richtigen Länge. Das macht man, indem man diese Blanks hinten abzwickt. (remove)
Das Problem hatten wir sofort beim Key-Value, bei den Registry-Sachen ist es nur noch nicht stinkig geworden.
Das Registry-Lesen, z.B
ppar = RnRegistNextPar(head, 0, ParName) ' get first param
geht ins Auge, wenn du dann z.b. vergleichst
if ParName = "SEMMELHUND" THEN
gassi_gehen()
Das funzt nicht so nicht
Was du brauchst, ist die tatsächliche Länge der strings und die liefert der DLL-Befehl
StrLen = RnRegistName(ppar, ParName)
DANN geht
passender_string = ParName.remove(StrLen, (64 - Strlen))
und jetzt haut es hin.
(Statt "64" nehmen wir aber den wert von ParName.Length, dann müssen wir nicht aufzupassen, was wir vorher bei "NEW" angegeben haben).
Besser ?
marvin42x
22.11.2006, 20:01
Ah, alle klar.
Muss einem doch gesagt werden.
Nun muss ich den Abend nicht im Ungewissen Dunkel verbringen sonden nur im Dunkeln.
Netter Gruß
Na also.
Gleich noch was: Wenn wir das Layer-1 Format auch zwischen Wizard und seinen Kinderchen beibehalten wollen, sollten wir als Target-Zieladresse ein standard Pseudo-Ziel angeben ("Command-Interpreter").
Dann kann es auch in Zukunft keine Probleme geben, was nun zu routen ist und was nicht.
Die PID als Ziel könnten Konflikte kriegen mit unseren anderen IDs. (Servos, adc, etc.)
Die Rückadresse lassen wir einfach mal auf NULL
Dadurch ist ein frühzeitiges Splitten von routbaren Layer-1 Messages und administativem Zeugs möglich, d.h. SERVER und Wizard kommen sich von vornhinein nicht in die Quere.
(Hintergedanke: Mit einem anderem Pseudo-Target könnten wir dann sehr einfach (und modular) so Sachen machen wir zentrales Protokoll/Log oder so.
marvin42x
22.11.2006, 20:32
Hört hört, Hintergedanken.
Klingt irgendwie nicht schlecht. In so einer Richtung habe ich überhaupt noch nicht gedacht.
Fazit:
Es bleibt spannend :-)
Dann lass mal zu gegebener Zeit hören, auch wie der Messages String aussehen könnte.
Netter Gruß
So, war etwas mehr vergraben, der Hund, der.
Ich hab der Einfachheit halber das korrigierte Form1.vb als zip eingefügt, das restliche Projekt hast du ja
Nachtschwärmer aus Bridge-Town: bei Cut & Paste immer guckst du, ob die VariablenNamen auch passen. Beim "DoCommand" waren da leichte Differenzen
Beim "invoke" isses so, daß er alles, was in den "invokten" Subs passiert, als Fehler des "invoke" selbst anmault. Geschmissen hat es ihn ganz woanders, Krüppel, das.
marvin42x
23.11.2006, 15:42
Danke fürs Fixing.
Es läuft wunderbar.
Ich kann jetzt an der Stelle erstmal die Klappe zu machen.
Befehlshandling auf den Kommunikationswegen läuft.
Und obwohl ich weis was es kann, freue ich mich trotzdem immer wieder daran wenn es jetzt auf Geheiß pariert und Befehle aus dem Netz befolgt.
Wenigstens einer der sich was sagen lässt.
Ich frage mich ob ich das ganze nicht eigentlich deswegen mache :-)
Jetzt werde ich noch die Formular Objekte soweit es geht vom Kernprogramm abkoppeln.
Und das Setzen von Default Werten Zentralisieren.
Danach sollte Parametrieren über Config dran sein.
Netter Dank aus Bridge -Town
..von Default Werten Zentralisieren. ..
Nachgedacht. Bei neutralen Defaultwerten kann man ja schon den Designer dazu verwenden, denn kommt aus der Config was anderes, überschreibt er es eh.
marvin42x
23.11.2006, 17:29
Default Werte im Designer:
Da hast Du schon Recht.
Aber alles was sich auf ein bestimmtes Formelement beruft kann man schlecht in Klassen oder Libs auslagern.
Der Programmkern soll zur Not auch ohne Formelemente laufen können.
Da ich vorhabe den Wizardkern auch als Generic RN Komponente zu verwenden.
Da soll in der Form dann die jeweilige Ausprägung residieren.
Wenn das klappt kann ich immer den neuesten und schlauesten Stand in den RN Komponenten halten.
Es muss nur der Wizard gepflegt werden und das Update für die Anderen ist fast Mühelos.
Soweit die Theorie ;-)
Du siehst aber bereits in der Architektur der Fähigkeiten worauf ich hinaus will.
Der Wizard kann bereits mehrere Wizards starten mit jeweils eigener Netzidentität.
Und jeder kann jeden rumkommandieren.
So eine Art Wizardseuche.
Das nun lauter Wizards rumsausen ist aber nur zum testen vom Familienfähigkeit.
Nachher gibt es Idealerweise nur einen Wizard mit seinen Kinderchen.
In den Kinderchen schlägt aber immer des Wizards Herz.
Mal sehen ob ich das so realisieren kann.
Darum versuche ich erstmal eine Trennung von der Form herbeizuführen.
Netter Gruß
.. zum testen vom Familienfähigkeit..
Richtig, soziale Kompetenz erwirbt man am besten in der Jugend, durch das Vorbild der Erzeuger. :-)
Generic Components ? Na, du treibst es.
Kommt, laßt uns gehen. Was besseres wie den Tod finden wir überall
marvin42x
23.11.2006, 20:02
Wart mal ab :-)
Das ist der erste Replikant in diesem Teil der Galaxis.
Bei unsachgemäßem Umgang vervielfältigt er sich unkontrolliert und verbreitet sich über den gesamten Globus.
Wer das verursacht hätte lieber mit den Bremer Stadtmusikanten mit gehen sollen.
Netter Gruß
Hat sich doch der Hexenmeister endlich einmal fortbegeben...
(Müssen ja keine Besen sein, im Zeitalter der Robbies.)
Doch wehe, wenn sie, losgelassen,
wachsend ohne Widerstand
einhertritt auf der eig'nen Spur
Als freie Tochter der Natur
Solche Wizards hat's offenbar früher auch schon mal gegeben
marvin42x
24.11.2006, 01:39
Kann es sein das wir ein Problem haben mit dem Punkt in RNWIZARD.cfg wenn es über die StartCommandline geht?
Einmal mit Doppelkick starten.
Den Zweiten über Testcommand
STARTCHILDAPP=RnWizard.exe
Dadurch bekommt er einen Parameterstring mit auf den Weg.
Ansonsten wie immer : volle Baustelle.
Aber die Isolierung des Kerns schreitet voran :-)
Das wird dann eine „Engine“ , so sagt man wohl.
Netter Gruß
Ps.Aber ich fress keinen Besen wenn es was anderes ist.
Ist auch schon wieder so spät. Irgendwann soll man ja Engel sehen oder den Wald vor lauter Bäumen nicht.
Edit: Das ganze kann man in dem Logfenster mitlesen.
Weil, wir haben jetzt Gleiches mit Gleichem vergolten.
War mir so aufgetragen.
marvin42x
24.11.2006, 09:04
Das mit dem Punkt werde ich am Rande mit abarbeiten.
Was mich noch interessiert ist das Pseudo Device.
Seit einem Monat bin ich immer kurz davor eine Demo fertig zu haben.
Wenn wir da was ausmachen, könnte ich die Message Geschichte soweit komplettieren um erstmal was zum laufen zu bringen.
Dafür würde ich sogar die Config Sache etwas nach hinten verlagern.
Mir liegt was daran eine Art Teilergebnis zu haben. Dann kann ich mich mal zurücklehnen und das Sonnenlicht genießen.
Netter Gruß
..das Sonnenlicht genießen..
Du weißt, Vampire brauchen einen hohen Sonnenschutzfaktor :mrgreen:
Pseudo-Devices: Wie schon erwähnt, wär es praktisch, eine Log/Protokoll zentral zu führen. (muß ich argumentieren? wenn irgendwas schief läuft, ist es zähe, aus einzel-protokollen einen Ablauf/Reihenfolge der Geschehnisse zusammenzubauen. denn die autonomen Abstürze hören ja irgendwann auf und wechseln zu dynamischen, schwer wiederholbaren "Koinzidenz-Todesfällen").
Mit Special-Targets wäre es einfach: Der Empfänger schreibt einen einheitlichen Header (Time, Source/Pid) und dann eher flat den Text aus "MsgVal". Antwort:keine, wird einfach gemacht, wenn die Logfile offen ist.
Das erspart "MessagBoxen" bei den einzelkomponenten, die ja sonst auch wer quittieren muß , damit sie wieder weggehen.
Da hätt' ich mal Pseudo-devices:
Admin-Functions Wizard (key-val)
Form-Handling Kinderchen (key-val)
Protokoll/Eventlog Wizard (structured printout)
....
RnWizard.exe
Is mir schon eingefallen: Der Punkt gilt als dezimal-Punkt.
Remedy:
1 Hochkomma
2 String mit den "RnCsvWr" Routinen erstellen, der checkt das dann (prefix)
marvin42x
24.11.2006, 10:04
Hört sich ziemlich Klasse an Dein Plan.
Den brauchst Du schon nicht mehr bewerben.
Kannst Du mal so eine Ar Beispielmessage machen.
Und wer empfängt und betreut diese Messages?
Ich habe mein Log Wesen bereits in der Richtung Key=Value aufgezogen.
Und dann halt noch die Adressierung an einen einzelnen Netzteilnehmer als Beispiel.
Und nen AutostartServer
Und….und……
Sonneschutzfaktor:
Stimmt, die Sonne schmerzt etwas in den Augen :-)
Netter Gruß
Gut bewährt hat sich folgendes:
Innerhalb des Wizard gibt es ein modul/sub, das kriegt die IP-Message, wenn im Target diese Pseudo-Device-ID steht.
Wenn nun eine Log/Protfile offen ist, schreibt er einen Record
11:12:01;PID;SRC;"Text aus Ip-MsgVAL"
11:12:01;PID;SRC;"Text aus Ip-MsgVAL"
etc.
Dabei ist
Uhrzeit (logo)
PID die prozess id, von dem die Message kommt
SRC die Komponente, von der die Message ist
Text und einfach der Text aus MsgVal (der ist dann immer ein Ascii-String)
Semikolon dazwischen, damit man die File auch leicht mit Excel einlesen kann. (sortieren, selektieren, drucken, etc) (+graphische Auswertung!)
Anm:
SRC sollte die "facility" bezeichnen (code) die die Message geschrieben hat. also z.B.
PROC allgemeine Programm komponenten
FORM was mit der "Form" zu tun hat
IP was mit der low-level kommunikation zu tun hat
KEY-VAL-Interpreter ("syntax-error")
LEV0 Level-0
ROUT Level-1 Router
(Das soll vermeiden, daß bei jedem Prot Text die hälfte als beschreibung dient, an welcher stelle ein Fehler/Event aufgetreten ist)
z.B.
00:01:40 01EC PROC "RnWizard Startup"
00:01:41 01EC PROC "Taskbar1.exe submitted"
00:01:42 01EF PROC "Taskbar1.exe started"
00:01:43 01EC IP "Taskbar1.exe connected"
00:01:50 01EC KYVAL "CMD-Syntax-error"
00:02:21 01EC LEV0 "COM2 opened"
00:02:22 01EC LEV1 "RNBFRA online"
......
Für den User ist das Log-Schreiben dann eine (generic*g*) function, die irgendwo aufgerufen wird.
WriteProt("SRC","Text")
marvin42x
24.11.2006, 12:58
Hört sich gut an.
Ich werde das mal einbauen so wie ich es verstanden habe und Dir dann zeigen.
Es wird erstmal nur grundlegend sein. Mit 3 bis 5 Devices und gelogt wird im LogFenter und dann auch in eine Datei.
Wollen wir für Log Messages einen anderen cmd Schlüssel nehmen als für Commands?
Vielleicht die 2 oder so?
Würde sich möglicherweise anbieten.
Wer nicht mitlogt ignoriert dann cmd = 2
Oder sollten wir die Devices hinter cmd Schlüsseln verstecken?
ich werde der Einfachheit halber erstmal auch meine 4 Loglevel beibehalten.
Die bekommt ja jeder mitgeteilt.
Da kann man sich in Friedenszeiten viel Funkverkehr sparen.
Netter Gruß
Ich würde Pseudo-Devices mal unabhängig vom CMD-Byte machen-
CMD=1 heißt, das danach ist als Key-Value zu lesen, egal, wo und wie.
Is weniger wegen des Command-Interpreters, der kann eh nicht anders, aber damit halten wir uns den Rücken frei, wenn sich andere auf diesem Weg gegenseitig was verklickern wollen.
marvin42x
24.11.2006, 13:22
Ok cmd 1 DEVICE=PROC
Eine Überlegung zu den Semikolons:
Da ich da völlig Erfahrungslos bin sehe ich die Priorität der Importfähigkeit in Exel nicht ganz vorne.
Was ich auf jeden Fall sehen würde. Die Messages enthalten Infos über den Betriebszustand des Netzes nebst Teilnehmern.
Zeitnah.
Das würde die Möglichkeit einräumen im Netz dynamisch auf einige Dinge zu reagieren.
Da Das Kommunikationsverständniss Key=Value ist existieren dafür auch handlig Routinen und Befehle. Es würde also nahe liegen das durchgängig zu halten.
Was meinst Du?
Na, unser größte Sorge ist Excel nicht. Aber durch die "geschenkten" Möglichkeiten, zu sortieren und zu selektieren, sollte man rechtzeitig ein Kreuz an die Wand malen, wo vielleicht später eine Tür hinkommt.
Durchgängiges Key-Value: bin ich absolut d'accord. Denn die alternative wären strukturierte Daten, und das ist für flexible Background-Funktionen extrem lästig bis geht-gar-nicht.
Aber wir dürfen unser armen µC-Schei...r nicht vergessen, die tun sich da schwer. Soll heissen, ein switchen muss möglich bleiben.
Key-Value: Ein weiter Vorteil davon ist es, daß es ein leichtes ist, sowas in (SOAP) XML hin-und zurückzuwandeln, da es ja in gewisser weise dasselbe ist.
marvin42x
24.11.2006, 16:37
Ja, die Kleinen müssen wir vor so einer Art Datenverkehr abschirmen.
Die laufen ja auf Level 0 mit kurzen Messages.
Maybe das die noch so eine Art Schutzsystem bekommen damit sie nicht an solchen TCP- Brocken versterben.
Aber mit logen sollen sie dürfen, die Kleinen :-)
Wo sie doch ein eigenes Teil Netz haben möchten sie bestimmt auch mal was sagen dürfen.
Exel:
Ich mach im ersten Anlauf mal Key=Value.
Für das Umformen der Daten in ein Exelformat schreibe ich dann lieber eine extra Routine.
Die muss ja nicht besonders Schlau sein. KeyVal in Semikolongetrennte Form zu bringen stelle ich mir nicht schwer vor.
Am liebsten wüde ich jetzt mal über SOAP und XML lesen aber das verkneife ich mir für später im Liegestuhl.
Netter Gruß
Ja, die Soap-Opera lassen wir mal, es ist auch so schwer genug.
Gut, alles klar. Ich schau mal, wieweit sich die Server-Funktionen in die DLL reinstopfen lassen
Als kommunikations-Hook Wizard/Server bietet sich die Config an. Viel mehr wird er garnicht brauchen.
EDIT: weil die Frage mal aufgetaucht ist: Die DLL muß mit allen Programmen (z.B. VB6) zurechtkommen, ist ja standard.
Wenn es irgendwo dampft, dann bei der Stringbehandlung, da müßt man mal gucken.
marvin42x
27.11.2006, 08:47
@PicNick:
Zwischenfrage:
Callback.
Ichhabe meinen ganzen Schrums jetzt von Fensterelementen getrennt und in eine Klasse gepackt.
Das bedeutet auch den Umzug der Callback Routine in die Klasse.
Das nimmt sie mir übel, ist ja klar, wo sie sich doch auf die Form beruft.
Ich habe ihr mal vorsichtig bei me. Die Haupt Form untergeschoben. Da mault sie aber das irgendwas nicht die selbe Signatur hat.
Lange rede gar kein Sinn.
Entweder ich studiere das jetzt ganz genau und habe nach einer Woche die Lösung oder ich frage PicNick.
Was würdest Du empfehlen?
Netter Gruß
Morjen !
Ich würd' ja PicNick fragen, der hat das Zeugs ja auch geschrieben, also soll er sehen, wie er hinkommt.
Vielleicht am zweckmäßigsten, die RARst das Projekt und stellt es in den Thread.
Nicht mailen, das frißt mir der Spam weg, das Ferkel, das.
Geht darum von wo die Klasse abgeleitet ist. Da is eben besser, ich probier das am konkretem Code.
WE gut überstanden ?
marvin42x
27.11.2006, 10:05
Danke der Nachfrage, war am Sonntag schön Laufen und Schwimmen im See.
das alles bei schönstem Sonnenschein.
Ansonsten habe ich halt den Wizard gepflegt und weniger meine sozialen Kontakte.
Nun Gut denn.
Das ist aber jetzt die volle Baustelle und keine Ahnung ob das Ding so überhaupt schon losläuft. Bin halt am suchen welches am Ende der beste Weg ist.
Das Ziel ist aber, dass es eine Ausführung ohne Formabhängigkeit wird.
Netter Gruß
uiuiui.
Was die invokerei betrifft:
In der RnEngine sehen die Calls nun so aus
Public Sub Form1_Cb(ByVal FForm As System.Windows.Forms.Form, ByVal MyIp As Integer, ByVal Arg As Integer, ByVal Status As Integer)
Dim datacb As RnIpEvent
datacb = New RnIpEvent(AddressOf RnWizard.IpDataCall) NEW NAME NEW NAME NEW NAME
FForm.Invoke(datacb, MyIp, Arg, Status) ' Arg: see below
End Sub '(Autor:PicNick) 16.11.2006 21:09 GG
'-------------------------------------------------------------------------------------------------
' Build Connection
'-------------------------------------------------------------------------------------------------
Public Function Connect(ByVal MyRNServerIP As String, ByVal MyRNServerPort As String) As String
Dim ResultValue As String = ""
If IpRef = 0 Then
RnIpCB = New CallBack(AddressOf Form1_Cb)
IpRef = RnIpConnect(MyRNServerIP, MyRNServerPort, RnIpCB, RnWizard, 38)
und in Form (RnWizard) eine neue sub
Public Sub IpDataCall(ByVal MyIp As Integer, ByVal Arg As Integer, ByVal Status As Integer)
RnE.IpData(MyIp, Arg, Status)
End Sub
Diese eine Ecke muß sein, da es für RnEngine klarerweise kein invoke gibt.
Allgemein: Beim Starten ist noch ein durcheinander, weil beim ersten DisplaySetting einige werte noch auf "Nothing" stehen, das mag er ncht so.
marvin42x
27.11.2006, 16:20
Cool.
Läuft.
Danke fürs Umbauen.
Das übersteigt -noch meine Möglichkeiten.
Dann kann ich mich jetzt auf die Jagt nach den Unzulänglichkeiten machen die ich durch den Umbau provoziert habe.
Da hast Du mir eine Menge Zeit gespart.
Ich bin froh, wenn es so laufen kann.
Der Rest ist Fleißarbeit.
Netter Gruß
Das freut mich.
Btw: Als Fossil noch aus der ersten Hälfte des vorigen Jahrhunderts bin ich gerne altmodisch und zeichne mir Programm strukturen und die Zusammenhänge von Klassen (wer called wen ?) oft auf Papier auf.
Btw2: die sache mit der Level-0 COm1-DLL geht schon recht gut, muß noch konfektionieren.
marvin42x
28.11.2006, 03:35
Diese Fossilien waren ja immer nur durch Meteoriteneinschläge oder ähnliche globale Katastrophen zu stoppen, besonders die aus dem frühen Velur.
Es lohnt sich also vermutlich die Ratschläge solcher Unkaputtbaren nicht in den Wind zu schlagen.
Apropos Wind. Nach dem die Hürde mit den Invoken Delegaten genommen war, schritt die Genesung des Patienten zügig voran.
Es geht dem Patienten inzwischen ausgezeichnet und er zeigt bereits wieder Appetit.
Womit nun wieder der Fahrtwind des Fortschritts durch meine Haare zaust.
Wie ich denn vernehme ist auch anderweit nicht gerostet worden.
Fein fein.
Netter Gruß
..nicht gerostet worden..
Unserereiner rostet sowieso nicht, er kompostiert vor sich hin.
NumberFive
28.11.2006, 08:11
was heist hier Veteranen Club ?
Eurer dot net frame work hat mich gezungen ne neue platte in den rechner zu bauen. auf dem Robi habe ich nicht so ein riesen platte.
OK ich könnte mal VC8 um stellen aber mit sicherheit icht auf net das viel zu langsam *g*
@marvin42x die Ipadresse für den RN_server ein gestellt im Serialserver mal connect gedrückt ?
marvin42x
28.11.2006, 08:16
Musst Du aufpassen, dass Du nicht von Greenpeace als Inovationsschub gefeiert wirst und jemand versucht Dich frühzeitig über den Beeten zu verteilen :-)
Netter Gruß
Edit: Das ist an PicNick
marvin42x
28.11.2006, 08:30
Alle sagen immer das Framework wäre von mir?
Stimmt aber gar nicht.
Ist von Bill.
@NumberFive:
Ich werde das mal machen.
Netter Gruß
VB8 heisst Framework. Da kannst du hüpfen wie Rumpelstilzchen.
Mit ist es mit C genauso gegangen (auch beruflich). Mit VC++6 geht's nicht weiter, genausowenig wie VB6.
Privat könnt' ich ja bleiben, aber VC++6 spinnt auf XP und W2K
Da gibt's nur den sauren Apfel, vor allem, wenn man sich mit anderen
austauschen will.
NumberFive
29.11.2006, 03:00
ich denke mal das war für mich. Ich habe mit VC6 und Xp noch keine probs bei dem rest hast du sicher recht aber ich habe keine platte mehr du weiß ja wie groß das ganze ist.
Jetzt hat man mal Zeit (Hotel nächte sind langweilig und schlafen kann man eh nicht) da muß man nach so ein blöden tool tipp fehler suchen an stand was fürs Roboternetz was zu Programieren so ein käse. aber naja so kann ich die stunden auf schreiben.
Gruß
marvin42x
29.11.2006, 03:14
Nun aber besser ab ins Bett :-)
Wer weis wer sich noch so alles rumtreibt.
Netter Gruß
marvin42x
02.12.2006, 15:58
@PicNick:
Wie schnell ist nichts passiert!
Darum:
Ich habe mich nicht um die Sachen gekümmert um die ich mich hätte kümmern müssen.
Dafür habe ich aber mal eine Variation des Themas Generic in den Raum gestellt.
Das alles ist noch nicht richtig in Klassen verpackt und noch sehr Luftig und Löchrig.
Es soll nur mal als Hingucker dienen.
Und so wird’s gemacht:
Im bin Release findest du einen rn_serve
Den starten und auf 127.0.0.1 port 42 connecten
Dazu einen seriellen Port anmachen.
Das geht leider noch nicht automatisch aber ich erwarte da eine Lieferung mit der auch das automatisiert werden kann.
Danach RnWizard aus bin starten
Danach "please press the Button "Show" "
Wenn genug ist "please press the same Button "Stop" "
Im Betrieb kann man am Server die Anmeldungen sehen
Die Komponenten haben einen Close Button und eine Enlarge.
Enlarge zeigt dir das Motorinnere.
Es ist immer nur ein und dasselbe Programm was gestartet wird.
Je nach Anweisung übernimmt es aber einen anderen Job.
Netter Gruß
Und schon mal sicherheitshalber einen schönen ersten Advent.
.
.. einen schönen ersten Advent.
Ja, danke. Das gleiche Dir und den Deinen.
Ein bißchen viel um die Ohren, dadurch war ich diese Woche auch ein wenig ruhiger im Netz.
Ich lad mir das gleich runter und guck mal.
Toll, geht auf Anhieb
"Marvin's Screen-Show"
Jetzt sind aber schon viele Knöpfe da, ursprünglich ja für gezielte Test notwendig waren.
Die Funktionalität "CONN" und. "Send-ID" könnte wohl z.B. zusammenlegen, nachdem die IP-Sache ja jetzt recht sicher flutscht.
marvin42x
03.12.2006, 15:54
Freut mich das es auch anderswo geht.
Ja, wenn wir der Testphase entwachsen können wir noch deutlich schlichter werden.
Auch die CPU-Auslastung ist durch ungünstige Grafikbefehle noch zu hoch.
Ich habe jetzt nachträglich noch MyDisplayLevel auf 0 gesetzt solange er nur seine Grafik anzeigt erst wenn er seine Message -Kontrollfelder zeigt geht Display automatisch auf 3.
So ähnlich wie bei Dir Zuhause im Kühlschrank :-)
Die Kernfrage die ich in den Raum stelle:
Wollen wir das Konzept der Standardfunktion auf Zuruf des Namens erstmal weiterverfolgen?
Hier denke ich aber erstmal nur an ein paar Standardfunktionen:
Levelmeter
Trackbar
Radar
Graph(Schreiber)
8 Port –Anzeige
Kleines Steuer Pannel (für Maus oder Tastatur)
Die verbrauchen wenig Code und sollen eher schlicht bleiben.
Sonderanwendungen:
Sonderanwendungen sollen zwar den Wizard als Engine haben, aber dann doch spezielle Aufgaben mit eigenem Code ausführen.
Ausblick:
Ab jetzt stellen sich bestimmt noch viele Fragen die erst im Zusammenspiel der Komponenten auftauchen.
ToDo:
Die ganze Configseite habe ich noch gar nicht angegangen.
Auch die innere Struktur des Programms werde ich noch mal eingehend überdenken.
Pseudo Devices stehen auch noch auf dem Programm.
Damit einhergehend das Zentrale Loggen.
Jetzt in der Vorweihnachtszeit nehmen andere Dinge mehr Raum ein. Darum sehe ich den Fortgang der Sache gelassen. Zumal bereits ein kleiner Wizard auf krummen Kinderbeinen durch die Gegend wackelt.
Netter Gruß
Hi, zum Darüberstreuen, zwischendurch, zum Zeitvertreib:
Leicht suggestiv habe ich eine DOC begonnen, wo die Kommandos aufgelistet sind, da wären, (wohl am besten vom Author), jeweils in kurzer Form, bei jedem ein paar erläuternde Worte gefragt.
Für Dich als Schreiber ist das wohl alles sonnenklar, für andere heißt es doch immer kurz nachdenken, auch wenn ich als Beobachter der Genesis mir Einiges denken kann.
In devotester Form würde ich ventilieren wollen, die Key-Words etwas zu straffen oder "streamlinen"
Was meinst Du zu Folgendem:
<PARAM><GET/SET/START/STOP> oder auch umgekehrt
<GET/SET....><PARAM>
als konsequent:
PIDGET / PIDSET
NAMEGET / NAMESET
etc. oder eben
GETPID SETPID
GETNAME SETNAME
dabei können natürlich jeweils Teile von GET/SET/START/STOP entffallen, wenn unsinnig.
Man soll zwar sprechende Namen nehmen, aber zu lang fördert Schreibfehler. (die man dann lange sucht)
Konzept der Keyword-Steuerung:
Ich würd mal auf dem Pferd sitzenbleiben. Keinesfalls eine Parallel-Welt anfangen.
Ich denke, es werden sich genug Dinge als letztlich unzweckmäßig herausstellen, auch wenn die Ideen dazu eigentlich gut und sogar naheliegend war.
Da wird es ja dann eh' weniger. (siehe->Ausblick)
So. Wir werden den aktuellen heidnischen Riten wohl nicht ganz auskommen, also sehen wir das locker.
Manchmal ist es ohnehin ganz gut, sein Hirn etwas abhängen zu lassen.
marvin42x
03.12.2006, 17:19
Ich fühle mit einem Mal das innere Bedürfnis eine Dokumentation zu beginnen.
Ich habe auch schon eine Idee wie die aussehen soll.
Da werde ich mich an den Stil Deiner Dokumentationen halten. Die sind optimal und wir haben alles in einem Guss.
Auch eine Kürzung und Vereinheitlichung der Key-Words ist mir in den Sinn gekommen.
Das verspricht Vorteile.
Falls Du das für überflüssig halten solltest müsstest Du mir da noch Bescheid sagen.
Ich habe bereits zwei Dokumentationen weggeschmissen weil sich immer alles geändert hat. Aber ab jetzt wird das ja anders :-)
Mit der Weiterentwicklung halten wir das wie immer offen. Keine Ahnung wie das am Ende aussehen wird. Gut wird es allemal.
Nebenher:
Wir sind mit unseren parallelen asynchronen Komponenten für Intel Core Duo oder Quadro oder was weis ich bestens gerüstet.
Beim Festtagsumzug macht es am meisten Spaß vorne, da wo die Musik spielt ;-)
Abhängen:
Am 6. ist Nikolaus.
Ob der eine Spezial Edition des RnSevers für Marvin42x im Rucksack hat?
Oder vielleicht der Weihnachtsmann?
Oder eher der Osterhase…?
Netter Gruß
marvin42x
03.12.2006, 23:26
Jetzt habe ich die Docu etwas mit Wörtern gefüllt.
Sei mal so lieb und mach an einer Stelle eine Formatierung wie Du Dir das vorstellst.
Ich habe mit Docus keine Erfahrung, würde aber gerne dafür sorgen, dass es recht einheitlich zu lesen ist.
Weiter habe ich begonnen ein Handbuch zu schreiben.
Auch da würde ich gerne Vorschläge haben.
Das mit den kürzeren Key-Words beschäftigt mich noch.
Ich könnte auch kurze Alias anbieten. Das ist Programmtechnisch keine Höhe.
Ich bin halt einer aus der Juniorenklasse.
Eine der Besonderheiten dieser Gattung ist halt das ihr eben nicht über die Jahre ein Simultan- Abkürzungs- Vor- und- Zurück- Übersetzer gewachsen ist. So ein Trans- O- Mat.
Darum lese ich kurze Variablen- Namen leider nicht so wie sie eigentlich heißen.
Wenn ich nicht weis wie sie eigentlich heißen sollten weis ich auch nicht was das alles bedeutet.
Am Anfang habe ich mit suchen und Ersetzen die Variablen- Namen in Deinen Programmen umbenannt damit ich das Programm überhaupt verstehe.
Das erzähle ich jetzt damit Du Die Sache weiterhin mit etwas Milde, Humor und Fürsorge siehst.
Da sich das Programm auch an die Anfänger wendet sollten wir eine Balance zwischen Professionalität und Anfängergeist suchen.
Dein Vorschlag wie GETPID, SETPID ist erstmal meine erste Wahl.
Die lassen keinen Zweifel daran was Sie vorhaben und scheinen beim Lesen meinen Gehirnwindungen zu entsprechen.
Netter Gruß
NumberFive
04.12.2006, 08:21
Muss es wirklich winword zu dokumentieren sein ?
Dokumente sind riesig und nicht jeder hast drauf. RTF währe mir lieber.
Als zeites frage ich mich wie ihr immer alles hier reistellen könnt mein Upload ist immer noch erschöpft.
Gruß
marvin42x
05.12.2006, 15:59
@PicNick:
Key-Words:
Über die Sache mit den Key-Words habe ich noch mal nachgedacht.
In der Windows Programmierung funktioniert ein Befehl oft in zwei Richtungen.
Entweder man weist dem einen Wert zu oder ohne Zuweisung liefert er seinen aktuellen Wert zurück.
Wenn wir das auch weitgehend so halten würden könnte man z.B. sagen „NAME“ dann würde man den Namen des Angesprochenen zurückbekommen.
Wenn man sagt „NAME=Trackbar“ würde der Angesprochene diesen Namen übernehmen.
Als Antwort würde man dann den gesetzten Namen in diesem Fall „Trackbar“ zurückbekommen.
POSX oder SIZE wären ähnliche Kandidaten.
Von der Programmierung wäre das leicht umzusetzen.
Wie Du siehst ist meine Ausdrucksweise dann schon recht kärglich. Wir hätten dann aber zu den Befehlen noch die Doku.
Die meisten der Key-Word Handhabungen laufen vermutlich eh maschinell ab.
Weiter verringern wir auf unschädliche Art die Anzahl der Befehle.
Meinung?
@NumberFive:
Ich habe mal mit RTF probiert. Das war aber nicht deutlich kleiner.
Von der Zugänglichkeit her ist RTF vermutlich die bessere Wahl.
Ich bin da offen. Mal hören was PicNick meint.
Netter Gruß
Hallo, Leute !
Bin leider etwas zugeschüttet, bringe im Moment nix weiter.
Keywords: Es kommt auf die Programmlogik an.
PROPERTY=VALUE setzen auf Value
PROPERTY="" löschen auf null-string
PROPERTY abfragen
Für den, der die Commandline liest, ist das klar.
Aber wie rufe ich eine Funktion damit auf ?
result = Property(Value)
result = Property("")
result = Property() das wird VB nicht zulassen. oder doch ?
RTF Ich mein, ich bin gewohnt, mit Word zu schreiben. darüber hinaus hab' ich eigentlich keine Meinung.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.