Forum | | | | 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
|
| | | | |
| | | funkheld (17.04.2016)
Wann wird das Hauptprogramm mal ins holpern kommen mit den vielen Processen?
Die Abarbeitung: 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. |
| | | | |
| | 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 |
| | | | |
| | 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 |
| | | | |
|
AntwortenThemenoptionen | 5.028 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |