Deutsch
Forum

Processe mit Settext/Gettext$ ...läuft wunderbar.

 

funkheld
Hallo, mit den Processen läuft es jetzt wunderbar.
Ich habe hier ein Beispiel mit Daten zum Process über Settext/Gettext$, also ohne Filmap usw.

Ein Hauptfenster für den Roboter, wo die Entfernungen die er über WLan schickt von XProfan dargestellt werden. Die WLan-Daten werden über 1 Process empfangen und gesendet. 1 Process habe ich eine serielle Datenübertragung und 1 Process werden Pixel ausgegeben.

Also ein tolle Sache mit den Processen, wunderbar.
Ich wollte mal das Verhalten prüfen.

Wann wird das Hauptprogramm mal ins holpern kommen mit den vielen Processen?

Gruss
 {$cle}
 {$PUSHKEYWORD pExec}
declare b_vor&,b_zur&,zielfenster&
declare b_links&,b_hlinks&,b_mitte&,b_hrechts&,b_rechts&
declare b_v0&,b_v1&,b_v2&
declare b_ser0&,b_ser1&,b_sharp&,b_ton&,b_cls&
declare ende&,text$,bpic&,bpich&,wert&,hw&,ht&,hx&,hy&,p&,p1&,p2&,htext&,hd1&
declare x!,y!,wtest&,color&
windowtitle "send"
Window 20,20-700,650
color&=rgb(160,160,160)
cls color&
bpic& = create("hNewPic", 400,400,rgb(255,255,255))
bpich& = create("hNewPic", 400,400,rgb(255,255,255))
b_vor& = Create("Button",%HWnd,"vor", 10, 20, 80, 24)
b_zur& = Create("Button",%HWnd,"zurück", 10, 45, 80, 24)
b_links& = Create("Button",%HWnd,"links", 10, 70, 80, 24)
b_hlinks& = Create("Button",%HWnd,"hlinks", 10, 95, 80, 24)
b_mitte& = Create("Button",%HWnd,"mitte", 10, 120, 80, 24)
b_hrechts& = Create("Button",%HWnd,"hrechts", 10, 145, 80, 24)
b_rechts& = Create("Button",%HWnd,"rechts", 10, 170, 80, 24)
b_v0& = Create("Button",%HWnd,"v0", 10, 195, 80, 24)
b_v1& = Create("Button",%HWnd,"v1", 10, 220, 80, 24)
b_v2& = Create("Button",%HWnd,"v2", 10, 245, 80, 24)
b_ser0& = Create("Button",%HWnd,"ser0", 10, 270, 80, 24)
b_ser1& = Create("Button",%HWnd,"ser1", 10, 295, 80, 24)
b_sharp& = Create("Button",%HWnd,"sharp", 10, 320, 80, 24)
b_ton& = Create("Button",%HWnd,"ton", 10, 345, 80, 24)
b_cls& = Create("Button",%HWnd,"cls", 120, 20, 40, 24)
hw& = create("Edit", %HWnd, "", 100,500,60,20)
ht& = create("Edit", %HWnd, "", 100,525,60,20)
hx& = create("Edit", %HWnd, "", 100,550,90,20)
hy& = create("Edit", %HWnd, "",100,575,90,20)
htext& = create("Edit", %HWnd, "",0,0,0,0)
hd1& = create("Edit", %HWnd, "",300,500,90,20)
startpaint bpic&
UsePen 0,1,$ff0000
EndPaint
startpaint %HWnd
drawpic bpic&,200,20;0
DrawText 20, 500, "Entfernung"
DrawText 20, 525, "Status"
DrawText 20, 550, "XPosition"
DrawText 20, 575, "YPosition"
DrawText 245, 500, "seriell"
EndPaint
p& = pExec("|Prozess",hw&,ht&,hx&,hy&,htext&)
sleep 200
p1&=pExec("|Prozess1",%HWnd, hd1&)
sleep 200
p2&=pExec("|Prozess2")
sleep 200
ZielFenster& = FindWindow("roboter")
ende&=1

While ende&

    WaitInput

    If Clicked(b_vor&)

        text$="1,0,vor"
        WriteStr(text$)

    elseIf Clicked(b_zur&)

        text$="1,0,zur"
        WriteStr(text$)

    elseIf Clicked(b_links&)

        text$="1,0,links"
        WriteStr(text$)

    elseIf Clicked(b_hlinks&)

        text$="1,0,hlinks"
        WriteStr(text$)

    elseIf Clicked(b_mitte&)

        text$="1,0,mitte"
        WriteStr(text$)

    elseIf Clicked(b_hrechts&)

        text$="1,0,hrechts"
        WriteStr(text$)

    elseIf Clicked(b_rechts&)

        text$="1,0,rechts"
        WriteStr(text$)

    elseIf Clicked(b_v0&)

        text$="1,0,v0"
        WriteStr(text$)

    elseIf Clicked(b_v1&)

        text$="1,0,v1"
        WriteStr(text$)

    elseIf Clicked(b_v2&)

        text$="1,0,v2"
        WriteStr(text$)

    elseIf Clicked(b_ser0&)

        text$="1,0,ser0"
        WriteStr(text$)

    elseIf Clicked(b_ser1&)

        text$="1,1,ser1"
        WriteStr(text$)

    elseIf Clicked(b_sharp&)

        text$="1,2,sharp"
        WriteStr(text$)

    elseIf Clicked(b_ton&)

        text$="1,0,ton"
        WriteStr(text$)

    EndIf

    If Clicked(b_cls&)

        startpaint bpic&
        drawpic bpich&,0,0;0
        EndPaint
        startpaint %HWnd
        drawpic bpic&,200,20;0
        EndPaint

    EndIf

    wtest&=val(gettext$(ht&))
    x!=val(gettext$(hx&))
    y!=val(gettext$(hy&))

    if wtest& = 1

        startpaint bpic&
        UsePen 0,1,$0000ff
        Line 200,200-200+x!,200+y!
        EndPaint
        startpaint %HWnd
        drawpic bpic&,200,20;0
        EndPaint

    endif

    if wtest& = 2

        startpaint bpic&
        UsePen 0,1,$ff00
        Line 200,200-200+x!,200+y!
        EndPaint
        startpaint %HWnd
        drawpic bpic&,200,20;0
        EndPaint

    endif

endwhile

end

Proc WriteStr

    Parameters Text$
    settext htext&,text$
    PostMessage(ZielFenster&, $1000, 0, 0)

EndProc

Proc Prozess

    Parameters hw&,ht&,hx&,hy&,htext&
    Declare ende&,text$,test&,test1&,wtest&,wert&,x!,y!,winkel!,urlpart$
    Declare HandleMap&, ViewPointer&, Buffer#
    windowtitle "roboter"
    window 720,20 - 200, 200
    Ende& = 0
    UserMessages $1000

    WhileNot ende&

        waitinput 100

        If %UMessage = $1000

            text$ = gettext$(htext&)
            test1&=val(substr$(text$,1,","))

            if test1& > 0

                test&=1
                wtest&=val(substr$(text$,2,","))
                urlpart$=substr$(text$,3,",")
                print text$
                text$=""

            endif

        endif

        if test&=1

            downloadfile("https://192.168.2.101/?pin="+urlpart$)
            test&=0

        else

            downloadfile("https://192.168.2.101/?pin=leer")

        endif

        while %Loading

            sleep 10

        endwhile

        wert&=str$(ord($download))

        if wtest&=1

            winkel!=winkel!+1.6

            if winkel! > 180.0

                wtest&=0
                winkel!=0

            endif

            x!=Sin(winkel!*0.0174532925199433)*wert&
            y!=Cos(winkel!*0.0174532925199433)*wert&

        endif

        if wtest&=2

            winkel!=winkel!+1.6

            if winkel! > 180.0

                wtest&=0
                winkel!=0

            endif

            x!=Sin((winkel!+180)*0.0174532925199433)*wert&
            y!=Cos((winkel!+180)*0.0174532925199433)*wert&

        endif

        setText hw&,str$(wert&)
        setText ht&,str$(wtest&)
        setText hx&,str$(x!)
        setText hy&,str$(y!)

    EndWhile

endProc

Proc Prozess1

    parameters win&,hd1&
    declare ende&,f&,wert&
    declare text$
    f& = OpenCom("COM1",1024,1024)
    SetCom("COM1:19200,N,8,1")
    windowtitle "seriell"
    window 920,20 - 200,200
    print "Process Seriell"
    ende& = 0

    whilenot ende&

        Case GetText$(win&) = "" : ende& = 1
        GetComInput f&

    endwhile

    Proc GetComInput

        text$ = ReadCom$(f&,128,128)
        wert&=Ord(text$)

        if wert& > 0

            setText hd1&, str$(wert&)

        endif

    EndProc

endproc

Proc Prozess2

    declare ende&,bild&
    windowtitle "pixel"
    Window 1120,20-200,200
    erzeugebild()
    ende&=1

    WHILE ende&

        waitkey

    ENDWHILE

    proc erzeugebild()

        Declare x&,y&

        whileloop 1,199

            y&=&loop

            WhileLoop 1,199

                startpaint %HWnd
                x&=&loop
                sleep 1
                SetPixel x&,y&,rgb(255,0,0)

            EndWhile

        EndWhile

    endproc

endproc


96 kB
Hochgeladen:17.04.2016
Ladeanzahl148
Herunterladen
96 kB
Hochgeladen:17.04.2016
Ladeanzahl123
Herunterladen
 
17.04.2016  
 



funkheld (17.04.2016)
Wann wird das Hauptprogramm mal ins holpern kommen mit den vielen Processen?


Die Abarbeitung:
If %UMessage = $1000

    text$ = gettext$(htext&)
    test1&=val(substr$(text$,1,","))
scheint mir nicht konsistent da die UserMessages asynchron einflattern und in dieser Zeit htext& "längst" neu beschrieben werden könnte. Der jeweils andere Prozess sollte aktiv auf ein Gegenzeichen warten.
 
17.04.2016  
 




H.Brill
Die anderen Parameter wparam und lparam
bei SendMessage / Postmessage kannst du ja
auch noch nutzen. Damit kannst du z.B. signalisieren,
ob sich im Hauptprogramm etwas geändert hat.

Der Prozess, dem die Message gilt, kann dann
über &uwParam oder &ulParam das erkennen
und entsprechend reagieren.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
17.04.2016  
 




funkheld
Danke für die Antworten.

Wie kann man diese Aussage dann bitte umsetzen in einem Process:
......Der jeweils andere Prozess sollte aktiv auf ein Gegenzeichen warten....

Gruss
 
17.04.2016  
 




H.Brill
Was macht denn dein Programm genau ?

Wie ich das sehe, empfängt Prozess die
WLAN-Daten, Prozess1 empfängt was über
die serielle Schnittstelle und Prozess2 malt
mit SetPixel was aufs Fenster.

Was IF wahrscheinlich meint, ist, daß die
Prozesse Messages schicken, wenn was
bereit/fertig ist.

Also, wenn das Datenpaket über WLAN gesendet
und die Daten berechnet wurden, informiert Prozess
den Prozess2, daß er malen kann. Dafür kann man
wunderbar die Parameter wParam und lParam von
SendMessage benutzen, um mit 0 oder 1 anzuzeigen,
daß Prozess fertig ist und Prozess2 beginnen kann.

Was die serielle Schnittstelle jetzt macht, habe ich
noch nicht rausbekommen.

Was mir noch auffiel :
Ich würde die Procs nicht unbedingt ineinander
verschachteln, also eine Proc in einer anderen Proc.

Das mag vielleicht immer gutgehen, aber verlassen
würde ich mich da nicht.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
18.04.2016  
 




funkheld
Ja danke für die Info.

Die RS232 ist erst nur zum Test in Betrieb und ist dann für Daten zuständig die parallel empfangen werden für das Hauptprogramm von eine Steuerplatine (Arduino). Zum Hauptprogramm sollen alle DatenFäden laufen und dann kommt eine Aktion darauf.

Also :
- Process-WLan zum Hauptprogramm
- Process-serielle Daten zum Hauptprogramm
- zuständige Daten zum Process Grafikfenster

so stelle ich mir das vor.

Danke.
Gruss
 
18.04.2016  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.028 Betrachtungen

Unbenanntvor 0 min.
RudiB.08.01.2022
iF31.10.2020
Wilfried12.06.2016
Torsten Rümker10.05.2016
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

funkheld (3x)
H.Brill (2x)
iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie