- 12V Akku mit 280 Ah bauen         
Seite 68 von 98 ErsteErste ... 1858666768697078 ... LetzteLetzte
Ergebnis 671 bis 680 von 975

Thema: Rnbfra Multi-Thread und Netzwerkfähig mit GUI im www, jetzt

  1. #671
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    76
    Beiträge
    703
    Anzeige

    Praxistest und DIY Projekte
    oh oh,

    Bei den Rohrlegern hieß das:
    Kinder betet
    Vater lötet

    Netter Gruß aus dem unterirdischen Schutzraum
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  2. #672
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.
    Angehängte Dateien Angehängte Dateien
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #673
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    76
    Beiträge
    703
    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ß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  4. #674
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Es gibt mehrere Möglichkeiten: Eine davon
    Mehrere Values:
    FORMPOS=264=128,...
    Sowas schreiben:
    Code:
    RnCsvWrSep(csvref, "FORMPOS")
    RnCsvWrVal(csvref, "264")
    RnCsvWrVal(csvref, "128")
    Sowas Lesen
    Code:
    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

    Code:
    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
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #675
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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"
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #676
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    76
    Beiträge
    703
    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ß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  7. #677
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    76
    Beiträge
    703
    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)
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  8. #678
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    76
    Beiträge
    703
    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ß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  9. #679
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Tagchen !
    Ok, um das trimmen etc. kümmere ich mich, schau nur erstmal, ob du bis dahin irgendwie überlebst.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #680
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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:
    Code:
            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
    Angehängte Dateien Angehängte Dateien
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 68 von 98 ErsteErste ... 1858666768697078 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen