Zusi-Display ohne den zusätzlichen TCP-Server

Soundthesizer, Zusitool und andere Zusatzsoftware

Moderatoren: Andreas Damm, Jens Haupert

Antworten
Nachricht
Autor
funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Zusi-Display ohne den zusätzlichen TCP-Server

#1 Beitrag von funkheld »

Habe jetzt mal mit Purebasic eine Verbindung aufgebaut nach Zusi 2 ohne den zusätzlichen TCP-Server.
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
 
Bild
Zuletzt geändert von funkheld am 21.03.2013 10:37:57, insgesamt 5-mal geändert.

Stephan/Taschi
Beiträge: 1050
Registriert: 30.10.2009 11:40:27
Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein

Re: Zusi-Display ohne den zusätzlichen TCP-Server

#2 Beitrag von Stephan/Taschi »

Was soll's bringen, außer dass man nicht mehr den Soundthesizer nebenher laufen lassen kann?

Benutzeravatar
Tim Fehse
Beiträge: 256
Registriert: 27.06.2012 15:56:51
Wohnort: Braunschweig

Re: Zusi-Display ohne den zusätzlichen TCP-Server

#3 Beitrag von Tim Fehse »

Das sich der TCP-Server während des Betriebs nicht mehr verabschiedet vielleicht, habe ich oft genug gehabt als ich meinen Laptop für den Buchfahrplan verwendet habe.

Stephan/Taschi
Beiträge: 1050
Registriert: 30.10.2009 11:40:27
Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein

Re: Zusi-Display ohne den zusätzlichen TCP-Server

#4 Beitrag von Stephan/Taschi »

Das ist mir noch nie passiert.

edit: Und selbst wenn es da Probleme gibt - dann wäre der sinnvolle Weg, einen funktionierenden Ersatz des TCP-Servers zu schaffen, nicht gleich ZusiDisplay neu zu schreiben.
Zuletzt geändert von Stephan/Taschi am 22.03.2013 23:06:53, insgesamt 1-mal geändert.

Benutzeravatar
Hubert
Beiträge: 2358
Registriert: 15.07.2002 17:50:22
Aktuelle Projekte: Es war einmal: Führerpult im Bau
Wohnort: Baden bei Zürich
Kontaktdaten:

Re: Zusi-Display ohne den zusätzlichen TCP-Server

#5 Beitrag von Hubert »

Applaus, Applaus für funkheld.
Er wagt den Schritt zurück zur Nostalgie: So sah wahrscheinlich Zusi 1.0 mal aus :D
Gruss
Hubert
Greife nie in's Wespennest, doch wenn Du greifst, dann greife fest !

Antworten