Abgefragt wird hier die Nr 1 (Geschwindigkeit) und die Nr 9 (Motordrehzahl). Dann damit die einfache Grafik aufgebaut. Programm ist sehr kurz.
Zuerst starte ich das Display-Programm und dann klinke ich das Zusi 2 ein.
Code: Alles auswählen
Procedure sprite_neu(Sprite, x, y, xx, yy, w.f, dx, dy, h)
w = w * (#PI/180)
r.f = Sqr(Pow(xx,2)+Pow(yy,2))/2
t.f = ATan(xx/yy)
w1.f = w - t : w2.f = w + t : w3.f = w + #PI - t : w4.f = w + #PI + t
TransformSprite3D(Sprite, Cos(w1)*r, Sin(w1)*r, Cos(w2)*r, Sin(w2)*r, Cos(w3)*r, Sin(w3)*r, Cos(w4)*r, Sin(w4)*r)
Start3D()
DisplaySprite3D(Sprite, x-Cos(w)*dy+Sin(w)*dx, y-Sin(w)*dy-Cos(w)*dx, h)
Stop3D()
EndProcedure
Enumeration
#Window_0
#Button_1
#Button_2
#String_0
#String_1
#String_2
#zeiger1
#anzeiger1
#zeiger2
#anzeiger2
#disk1
#disk2
EndEnumeration
Global EventID.l,ClientID.l,rData.l,anz_id.l
Global text.s,wert.l,z.l,offs.l,geschw.l, motor.l
Declare zusi_verbinden()
Declare auswerten()
Declare zeige_daten()
Global *sbuffer = AllocateMemory(256)
Global *rbuffer = AllocateMemory(256)
Global *buffer = AllocateMemory(256)
InitSprite()
InitSprite3D()
InitNetwork()
CreateNetworkServer(1, 1435)
OpenWindow(#Window_0, 10, 10, 900,600, "Tcp-Server-Pult", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window_0),5,140,800,400,0,0,0)
StringGadget(#String_0, 10, 10, 120, 20, "")
StringGadget(#String_1, 170, 90, 80, 30, "")
StringGadget(#String_2, 570, 90, 80, 30, "")
CreateSprite(#zeiger1,10,200, #PB_Sprite_Texture)
CreateSprite3D(#zeiger1, #zeiger1)
CreateSprite(#anzeiger1, 400,400, #PB_Sprite_Texture)
CreateSprite3D(#anzeiger1, #anzeiger1)
CreateSprite(#zeiger2,10,200, #PB_Sprite_Texture)
CreateSprite3D(#zeiger2, #zeiger2)
CreateSprite(#anzeiger2, 400,400, #PB_Sprite_Texture)
CreateSprite3D(#anzeiger2, #anzeiger2)
CreateSprite(#disk1, 30,30, #PB_Sprite_Texture)
CreateSprite3D(#disk1,#disk1)
CreateSprite(#disk2, 30,30, #PB_Sprite_Texture)
CreateSprite3D(#disk2,#disk2)
LoadSprite(#anzeiger1,"tacho_111.bmp")
LoadSprite(#anzeiger2,"tacho_11.bmp")
StartDrawing(SpriteOutput(#zeiger1))
Box(0,0,10,200,RGB(255,0,255))
Box(0,0,10,120,RGB(0,0,150))
Box(4,0,3,160,RGB(0,0,150))
StopDrawing()
StartDrawing(SpriteOutput(#zeiger2))
Box(0,0,10,200,RGB(255,0,255))
Box(0,0,10,120,RGB(0,0,150))
Box(4,0,3,160,RGB(0,0,150))
StopDrawing()
StartDrawing(SpriteOutput(#disk1))
Box(0,0,30,30,RGB(255,0,255))
Circle(15,15,15,RGB(0,128,128))
StopDrawing()
StartDrawing(SpriteOutput(#disk2))
Box(0,0,30,30,RGB(255,0,255))
Circle(15,15,15,RGB(0,128,128))
StopDrawing()
TransparentSpriteColor(#zeiger1, RGB(255, 0, 255))
TransparentSpriteColor(#anzeiger1, RGB(255, 0, 255))
TransparentSpriteColor(#zeiger2, RGB(255, 0, 255))
TransparentSpriteColor(#anzeiger2, RGB(255, 0, 255))
TransparentSpriteColor(#disk1, RGB(255, 0, 255))
TransparentSpriteColor(#disk2, RGB(255, 0, 255))
Sprite3DQuality(#PB_Sprite3D_BilinearFiltering )
sprite_neu(#anzeiger1,200,200,400,400,-90,0,0,255)
sprite_neu(#zeiger1,200,200,10,200,geschw-23,0,100,255)
sprite_neu(#disk1,200,200,30,30,0,0,0,255)
sprite_neu(#anzeiger2,600,200,400,400,-90,0,0,255)
sprite_neu(#zeiger2,600,200,10,200,motor/5-90,0,100,255)
sprite_neu(#disk2,600,200,30,30,0,0,0,255)
Repeat
EventID = WaitWindowEvent(3)
Select EventID
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
EndSelect
Select NetworkServerEvent()
Case 1
anz_id=anz_id+1
ClientID = EventClient()
If anz_id=1
text+Str(ClientID)+Chr(10)
SetGadgetText(#string_0, text)
zusi_verbinden()
EndIf
Case 2
rdata=ReceiveNetworkData(ClientID, *rbuffer, 255)
auswerten()
EndSelect
FlipBuffers()
Until EventID = #PB_Event_CloseWindow
Procedure zeige_daten()
sprite_neu(#anzeiger1,200,200,400,400,-90,0,0,255)
sprite_neu(#zeiger1,200,200,10,200,geschw-23,0,100,255)
sprite_neu(#disk1,200,200,30,30,0,0,0,255)
sprite_neu(#anzeiger2,600,200,400,400,-90,0,0,255)
sprite_neu(#zeiger2,600,200,10,200,motor/5-90,0,100,255)
sprite_neu(#disk2,600,200,30,30,0,0,0,255)
SetGadgetText(#String_1,Str(geschw))
SetGadgetText(#String_2,Str(motor))
EndProcedure
Procedure auswerten()
For z=6 To rData Step 5
If z > rData
Break
EndIf
wert=PeekB(*rbuffer+z)
If wert=1
PokeL(*buffer + 0, PeekL(*rbuffer+z+1))
geschw=Int(PeekF(*buffer))
ElseIf wert=9
PokeL(*buffer + 0, PeekL(*rbuffer+z+1))
motor=Int(PeekF(*buffer))
EndIf
Next
zeige_daten()
EndProcedure
Procedure zusi_verbinden()
offs = 0
PokeL(*sbuffer + 0, $03) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $02) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)
offs = 0
PokeL(*sbuffer + 0, $06) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $03) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
PokeL(*sbuffer + 7, $0A) : offs + 1
PokeA(*sbuffer + 8, $01) : offs + 1
PokeA(*sbuffer + 9, $09) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
Delay(100)
offs = 0
PokeL(*sbuffer + 0, $04) : offs + 4
PokeA(*sbuffer + 4, $00) : offs + 1
PokeA(*sbuffer + 5, $03) : offs + 1
PokeA(*sbuffer + 6, $00) : offs + 1
PokeA(*sbuffer + 7, $00) : offs + 1
SendNetworkData(ClientID, *sbuffer, offs)
EndProcedure