TCP-Verbindung habe ich noch nicht verstanden

Erste Ansprechstelle für technische Fragen der Add-On Bastler, Fragen/Umgang mit den Zusi 2-Editoren
Nachricht
Autor
Bernhard
Beiträge: 22
Registriert: 11.09.2009 15:44:19

Re: TCP-Verbindung habe ich noch nicht verstanden

#21 Beitrag von Bernhard »

funkheld hat geschrieben:Wo ist diese ausführlichen Doku, wo erklärt wird wie jetzt aus der Single eine Bytefolge wird ?
Die Dokumentation enthält den Abschnitt Programmierbeispiele | Single-Konvertierung, in dem die Problematik am Beispiel von Delphi erklärt wird.
Zusi überträgt den Großteil der verfügbaren Daten im 32 Bit langen IEEE-754-single-precision-Gleitkommaformat (little endian), mit dem jede ernstzunehmende Programmiersprache umgehen können sollte.
Einer kurzen Recherche zufolge trifft das auch auf PureBasic zu, das dazu den Datentyp Float kennt.
Herauszufinden, wie ein 4 Byte langer String in dieser Sprache in eine Gleitkommazahl umgewandelt wird, bleibt allerdings Dir überlassen.

Auch Boolsche und von Natur aus ganzzahlige Werte (z. B. Fahrstufe) werden bis auf wenige Ausnahmen als Gleitkommazahl codiert.
Zur Interpretation der decodierten Werte siehe das in diesem Beitrag verlinkte PDF-Dokument.
funkheld hat geschrieben:01:E7:75:03:40 hier die Geschwindigkeik ?
09:00:40:93:44 hier die Motordrehzahl ?
10:00:00:A0:40 hier die Fahrstufe ?
Geschwindigkeit = 2,05407118797
Motordrehzahl = 1178,0
Fahrstufe = 5,0

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#22 Beitrag von funkheld »

Jup, Bernhard, danke für dein Beispiel. Daran habe ich mich orientiert beim Purebasic, damit das Ergebnis der Byte-umwandlung in Single auch stimmt.

Habe jetzt mal ein kleines Fenster programmiert in Purebasic, welches die Geschwindigkeit, Motordrehzahl und Fahrstellung ausgibt als Text in einem Gadget. Funktioniert wunderbar.

Irgendwie bin ich zufrieden damit, das ich als Anfänger diese Netzwerkwerkverbindung mit Ausgabe hinbekommen habe zum ZusiTCP. Da ich überhaupt kein "C" kann, glaubte ich nicht daran, das es auch mit Purebasic klappt.
Als erstes sollte es bei mir funktionieren.

Danke.

Gruss

Code: Alles auswählen

Global Quit.l, Port.l, conID.l, status.l, cEvent.l, Result.l, *DataBuffer.l
Global sData.l,rData.l,conID.l,offs.l,CEvent.l,t1.l,t2.l,zeile.s, geschw.l, motor.l , fahrst.l
Global *buffer.l, *sbuffer.l, *rbuffer.l

Declare daten_send_empf()
Declare daten_empf()
Declare zusi_hello()

Enumeration
#Window_0
#Button_0
#Button_1
#Button_2
#String_0
#String_1
#String_2
#String_3
EndEnumeration

*buffer = AllocateMemory(256)
*sbuffer = AllocateMemory(1024)
*rbuffer = AllocateMemory(1024)

If OpenWindow(#Window_0, 10, 10, 400, 320, "Client", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
   ButtonGadget(#Button_0,5, 10,60, 20, "Ende")
   ButtonGadget(#Button_1,70, 10, 60, 20, "verbinden")
   ButtonGadget(#Button_2,135, 10, 60, 20, "trennen")
   StringGadget(#String_0, 200, 10, 100, 20, "")
   StringGadget(#String_1, 5, 80, 80, 30, "")
   StringGadget(#String_2, 100, 80, 80, 30, "")
   StringGadget(#String_3, 5, 150, 80, 30, "")
   
   Quit = 0
   Port = 1435
   status = 0
   
   If InitNetwork() = 0
      MessageRequester("Info", "Kein Netzwerk !", #PB_MessageRequester_Ok)
      End
   EndIf
   
   Repeat
      EventID.l = WaitWindowEvent(5)
     
      Select EventID
         Case #PB_Event_CloseWindow
            Quit = 1
         Case #PB_Event_Gadget
            Select EventGadget()   
               Case #Button_0           
                  Quit = 1
               Case #Button_1           
                  If Not status
                     conID = OpenNetworkConnection("127.0.0.1", Port)
                     If conID
                       status = 1
                       zusi_hello()
                       SetGadgetText(#String_0,"verbunden")
                     EndIf
                  EndIf
               Case #Button_2
                  If status <> 0
                     CloseNetworkConnection(conID)
                     status = 0
                     SetGadgetText(#String_0,"getrennt")
                  EndIf
            EndSelect
      EndSelect
     
      If status       
         cEvent = NetworkClientEvent(conID)
         
         Select cEvent         
            Case #PB_NetworkEvent_Data            
               daten_empf()       
         EndSelect       
      EndIf
     
   Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
FreeMemory(*sbuffer)
FreeMemory(*rbuffer)
FreeMemory(*buffer)
End

Procedure daten_send_empf()
  sData = SendNetworkData(conID, *sbuffer, offs)
  rData = ReceiveNetworkData(conID, *rbuffer, 1024) 
EndProcedure

Procedure daten_empf() 
    rData = ReceiveNetworkData(conID, *rbuffer, 256)
    
    If PeekA(*rbuffer+6) = 1
      PokeA(*buffer + 0, PeekA(*rbuffer+7))
      PokeA(*buffer + 1, PeekA(*rbuffer+8))
      PokeA(*buffer + 2, PeekA(*rbuffer+9))
      PokeA(*buffer + 3, PeekA(*rbuffer+10))
      geschw=Int(PeekF(*buffer))
      SetGadgetText(#String_3,Str(geschw))
    EndIf  
    If PeekA(*rbuffer+11) = 9
      PokeA(*buffer + 0, PeekA(*rbuffer+12))
      PokeA(*buffer + 1, PeekA(*rbuffer+13))
      PokeA(*buffer + 2, PeekA(*rbuffer+14))
      PokeA(*buffer + 3, PeekA(*rbuffer+15))
      motor=Int(PeekF(*buffer))
      SetGadgetText(#String_2,Str(motor))
    EndIf   
    If PeekA(*rbuffer+11) = 16 
      PokeA(*buffer + 0, PeekA(*rbuffer+12))
      PokeA(*buffer + 1, PeekA(*rbuffer+13))
      PokeA(*buffer + 2, PeekA(*rbuffer+14))
      PokeA(*buffer + 3, PeekA(*rbuffer+15))
      fahrst=Int(PeekF(*buffer))
      SetGadgetText(#String_1,Str(fahrst))
    ElseIf PeekA(*rbuffer+16) = 16 
      PokeA(*buffer + 0, PeekA(*rbuffer+17))
      PokeA(*buffer + 1, PeekA(*rbuffer+18))
      PokeA(*buffer + 2, PeekA(*rbuffer+19))
      PokeA(*buffer + 3, PeekA(*rbuffer+20))
      fahrst=Int(PeekF(*buffer))
      SetGadgetText(#String_1,Str(fahrst))
    EndIf  
EndProcedure

Procedure zusi_hello()
  offs = 0 ; HELLO-Befehl
  PokeL(*sbuffer + 0, $0D) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $01) : offs + 1
  PokeA(*sbuffer + 6, $01) : offs + 1
  PokeA(*sbuffer + 7, $02) : offs + 1
  client$ = "Fahrpult"   
  PokeA(*sbuffer + 8, Len(client$)) : offs + 1
  PokeS(*sbuffer + 9, client$,-1, #PB_Ascii) : offs + Len(client$)
  daten_send_empf()
  
  offs=0 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 0A Geschwindigkeit/Motordrehzahl/Fahrstufe
  PokeL(*sbuffer + 0, $07) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $03) : offs + 1
  PokeA(*sbuffer + 6, $00) : offs + 1
  PokeA(*sbuffer + 7, $0A) : offs + 1
  PokeA(*sbuffer + 8, $01) : offs + 1
  PokeA(*sbuffer + 9, $09) : offs + 1
  PokeA(*sbuffer + 10, $10) : offs + 1
  daten_send_empf()
  
  offs=0 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 00
  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
  daten_send_empf()
EndProcedure  
Zuletzt geändert von funkheld am 09.02.2012 13:17:51, insgesamt 1-mal geändert.

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

Re: TCP-Verbindung habe ich noch nicht verstanden

#23 Beitrag von Stephan/Taschi »

Nachdem TCP ein ziemlich allgemeiner Standard für Netzwerkverbindungen ist, dürfte das in so ziemlich jeder Sprache, die mit TCP umgehen kann, funktionieren (eigentlich ja eher eine Frage der API als der Sprache) - und dieses Minimalkriterium sollte eigentlich so ziemlich jede Sprache außer vielleicht C64-BASIC können. (Ja - ich überspitze. Aber bei modernen Sprachen ist das absoluter Standard.)
Zuletzt geändert von Stephan/Taschi am 09.02.2012 15:02:57, insgesamt 1-mal geändert.

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#24 Beitrag von funkheld »

Na dann versuch das mal in Freebasic oder GFA32-Basic, da brichst du dir einen Ast ab....,da musste bei Null anfangen. :rolleyes:

Wenn ich die Diskkussion hier lese über das Infofenster...ja..nein...ja...nein, da kann ich nur schmunzeln.
Ohne zu diskutieren habe ich mich als alter Pensionär hingesetzt und durch viele Fragen im Forum mein eigenes Infofenster über Zusi-TCP erstellt.
Klappt..doch... :]

Wenn es so einfach wär , wie du es jetzt als Profi behauptest, dann wäre die Diskussion glaube ich garnicht entbrannt, dann hätten sich die Diskutierer hingesetzt und so etwas schnell selber programmiert was ihnen selber gefällt :] statt hier "wenn und aber" zu reden.


Gruss
Zuletzt geändert von funkheld am 09.02.2012 15:20:39, insgesamt 4-mal geändert.

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Was bedeuten folgende Werte aus der TCP-Befehlsliste...

#25 Beitrag von funkheld »

Hallo, was bedeuten diese Werte aus der TCP-Befehlslliste:

2 = HLL
3 = C-Druck
4 = HBL

Danke.

Gruss
Zuletzt geändert von funkheld am 10.02.2012 13:01:30, insgesamt 1-mal geändert.

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

Re: Was bedeuten folgende Werte aus der TCP-Befehlsliste...

#26 Beitrag von Stephan/Taschi »

HLL=Hauptluftleitung, HBL=Hauptluftbehälterleitung.

Christopher Spies
Beiträge: 775
Registriert: 26.01.2005 16:10:18
Wohnort: Darmstadt

Re: TCP-Verbindung habe ich noch nicht verstanden

#27 Beitrag von Christopher Spies »

Hallo "Funkheld",

in dem von Dir gezeigten Programmcode sind viele Werte "hartcodiert", was einer späteren Erweiterung möglicherweise abträglich ist.

Eigene TCP-Clients zur Kommunikation mit Zusi haben schon einige geschrieben. Ich fand Roland Zieglers Beitrag vom 9. Dezember 2009 und die sich daran anschließende Diskussion sehr informativ. Vielleicht hilft dieser Beitrag auch Dir weiter. Das Dokument, auf welches Bernhard verwiesen hat, sollte eigentlich keine Fragen hinsichtlich der Interpretation der von Zusi gelieferten Größen offen lassen.

Gruß
- Christopher

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#28 Beitrag von funkheld »

in dem von Dir gezeigten Programmcode sind viele Werte "hartcodiert", was einer späteren Erweiterung möglicherweise abträglich ist.
Soll nicht übernommen werden, sondern war ein Test ob und wie es funktioniert mit Purebasic.
Es funktioniert bei mir mit Purebasic, das war ein lerneffekt....

Jetzt ist es nur eine Sache des Ausschmückens nach Phantasie...natürlich mit Variablen , Grafik und Buttons zum Auswählen.

Danke.

Gruss
Zuletzt geändert von funkheld am 10.02.2012 20:05:38, insgesamt 1-mal geändert.

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#29 Beitrag von funkheld »

Hallo, die PDF-Datei ist Gold wert.
Danke.

Frage aus der PDF:
Was ist der Unterschied zwischen Nr. 16 Fahrstufe und Nr.51 Schalter Fahrstufen ?

Danke.

Gruss

Christopher Spies
Beiträge: 775
Registriert: 26.01.2005 16:10:18
Wohnort: Darmstadt

Re: TCP-Verbindung habe ich noch nicht verstanden

#30 Beitrag von Christopher Spies »

Hallo Funkheld,
funkheld hat geschrieben:Was ist der Unterschied zwischen Nr. 16 Fahrstufe und Nr.51 Schalter Fahrstufen ?
Größe Nr. 16 ist der Ist-Wert, also die tatsächlich eingestellte Fahrstufe. Das Schaltwerk benötigt eine gewisse Zeit, um von einer Fahrstufe zur nächsthöheren oder -niedrigeren zu schalten. Größe Nr. 51 dagegen ist die Position des Fahrschalters. Hat die Lokomotive einen Stufenschalter, dann entspricht Größe Nr. 51 der Soll-Fahrstufe, bei Auf-Ab-Steuerung gibt es nur die 4 Positionen "Aus", "Ab", "Fahren" und "Auf".

Gruß
- Christopher

Bernhard Raschke
Beiträge: 657
Registriert: 18.02.2003 18:32:49
Wohnort: 72655 Altdorf

Re: TCP-Verbindung habe ich noch nicht verstanden

#31 Beitrag von Bernhard Raschke »

Hallo Christopher,

gibt die Größe 51 eigentlich auch negative Werte aus, beispielsweise die Bremsstufen eines Kombihebels? Das würde mir einige Verbesserungen beim Soundthesizer-Paket für den Regioshuttle erlauben. Von Nr. 16 erhalte ich die anscheinend nicht.

@ Funkheld:

wahrscheinlich muss Dein Gadget noch kompiliert werden, dass man es benutzen kann. Wie geht denn das? Brauche ich da noch ein extra Stück Software? Ich würde das gerne selber machen, damit ich in Deinem Code noch etwas rumpfuschen kann.
Grüssle Bernhard

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#32 Beitrag von funkheld »

Bernhard , hast ein PN.

Gruss

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#33 Beitrag von funkheld »

Hier ein Beispiel zum zerflücken, mit Grafik und Text der TCP-ID 1, 9 und 51.
Die Bewegung der Instrumente wird dargestellt mit Sprite in Purebasic.
Ist einfach gehalten, es geht wie immer bei mir am Anfang nur um die Funktion.
Die Schaltbewegung verzögert immer wenn der Zug vom Stand anfahren soll, während der Fahrt geht er normal, weiss nicht woran das liegt, vielleicht am Event...

Mit der Purebasicdemo kann man es compilieren.
Da ich kein "C" kann hatte ich mir das Purebasic schon vor 4 Jahren angeschafft.
Hat sich bei mir schon bewährt, ich hatte viele Sprachen ausprobiert, aber nichts entsprach meinen Stand über Programmiersprachen.

Code: Alles auswählen

 ; Sprite - Nummer des Anzuzeigenen Sprite
  ; x      - X-Positon des Mittelpunks bzw. Rotationspunkts vom Sprite
  ; y      - Y-Positon des Mittelpunks bzw. Rotationspunkts vom Sprite
  ; xx     - Breite des Sprite
  ; yy     - Höhe des Sprite
  ; w      - Rotationswinkel des Sprite (in Grad, wobei 0° Richtung Osten ist)
  ; dx     - Verschiebt den Mittelpunkt und damit auch den Rotationspunkt
  ;          auf dem Sprite in X-Richtung
  ; dy     - Verschiebt den Mittelpunkt und damit auch den Rotationspunkt
  ;          auf dem Sprite in Y-Richtung
  ; h      - Transparenz des Sprite (0 Transparent, 255 voll sichtbar)
 
  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

Global Quit.l, Port.l, conID.l, status.l, cEvent.l, EventID.l
Global sData.l,rData.l,offs.l,geschw.l, motor.l , fahrst.l,fahrst_n.l
Global *buffer.l, *sbuffer.l, *rbuffer.l

Declare daten_send_empf()
Declare daten_empf()
Declare zusi_hello()
Declare zeige_daten()

Enumeration
  #Window_0
  #Button_0
  #Button_1
  #Button_2
  #String_0
  #String_1
  #String_2
  #String_3
  #zeiger1
  #anzeiger1
  #zeiger2
  #anzeiger2
  #platte1
  #hebel1
EndEnumeration

*buffer = AllocateMemory(256)
*sbuffer = AllocateMemory(256)
*rbuffer = AllocateMemory(256)

InitSprite()
InitSprite3D()
 
   OpenWindow(#Window_0,0,0,420,780,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
   OpenWindowedScreen(WindowID(#Window_0),5,200,400,560,0,0,0)
   SetCurrentDirectory("d:\purebasic\pebi-pure\data\")

   CreateSprite(#zeiger1,200,200, #PB_Sprite_Texture)
   CreateSprite3D(#zeiger1, #zeiger1)
   CreateSprite(#anzeiger1, 200,200, #PB_Sprite_Texture)
   CreateSprite3D(#anzeiger1, #anzeiger1)
   
   CreateSprite(#zeiger2,200,200, #PB_Sprite_Texture)
   CreateSprite3D(#zeiger2, #zeiger2)
   CreateSprite(#anzeiger2, 200,200, #PB_Sprite_Texture)
   CreateSprite3D(#anzeiger2, #anzeiger2)
   
   CreateSprite(#platte1,150,100, #PB_Sprite_Texture)
   CreateSprite3D(#platte1, #platte1)
   CreateSprite(#hebel1, 150,100, #PB_Sprite_Texture)
   CreateSprite3D(#hebel1, #hebel1)
   
   StartDrawing(SpriteOutput(#anzeiger1))
     Box(0,0,200,200,RGB(255,0,255))
     Circle(100,100,90,RGB(180,180,180))
   StopDrawing()
   StartDrawing(SpriteOutput(#zeiger1))
     Box(0,0,200,200,RGB(255,0,255))
     RoundBox(100,100,85,6,3,3,RGB(0,255,0))
   StopDrawing()
     
   StartDrawing(SpriteOutput(#anzeiger2))
     Box(0,0,200,200,RGB(255,0,255))
     Circle(100,100,90,RGB(180,180,180))
   StopDrawing()
   StartDrawing(SpriteOutput(#zeiger2))
     Box(0,0,200,200,RGB(255,0,255))
     RoundBox(100,100,85,6,3,3,RGB(255,0,0))
   StopDrawing()
     
   StartDrawing(SpriteOutput(#platte1))
     Box(0,0,150,100,RGB(255,0,255))
     Box(0,0,150,100,RGB(90,90,90))
   StopDrawing()
   StartDrawing(SpriteOutput(#hebel1))
     Box(0,0,150,100,RGB(255,0,255))
     RoundBox(20,50,100,10,5,5,RGB(0,0,0))
   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(#platte1, RGB(255, 0, 255))
   TransparentSpriteColor(#hebel1, RGB(255, 0, 255))
   
   Sprite3DQuality(#PB_Sprite3D_BilinearFiltering )
  
   ButtonGadget(#Button_0,5, 10,60, 20, "Ende")
   ButtonGadget(#Button_1,70, 10, 60, 20, "verbinden")
   ButtonGadget(#Button_2,135, 10, 60, 20, "trennen")
   StringGadget(#String_0, 200, 10, 100, 20, "")
   StringGadget(#String_1, 5, 80, 80, 30, "")
   StringGadget(#String_2, 100, 80, 80, 30, "")
   StringGadget(#String_3, 5, 150, 80, 30, "")
   
   Quit = 0
   Port = 1435
   status = 0
   
   ClearScreen(RGB(140,140,140))
   
   If InitNetwork() = 0
     MessageRequester("Info", "Kein Netzwerk !", #PB_MessageRequester_Ok)
     End
   EndIf
   
   sprite_neu(#anzeiger1,100,100,200,200,0,0,0,255)
   sprite_neu(#zeiger1,100,100,200,200,geschw+45,0,-3,255)
    
   sprite_neu(#anzeiger2,300,100,200,200,0,0,0,255)
   sprite_neu(#zeiger2,300,100,200,200,motor/10,0,-3,255)
    
   sprite_neu(#platte1,100,260,150,100,90,0,0,255)
   sprite_neu(#hebel1,150,260,150,100,fahrst*6-115,45,-5,255)   
   
  Repeat  
    EventID = WaitWindowEvent(5)
    
    Select EventID
         Case #PB_Event_CloseWindow
            Quit = 1
         Case #PB_Event_Gadget
            Select EventGadget()   
               Case #Button_0           
                  Quit = 1
               Case #Button_1           
                  If Not status
                     conID = OpenNetworkConnection("127.0.0.1", Port)
                     If conID
                       status = 1
                       zusi_hello()
                       SetGadgetText(#String_0,"verbunden")
                     EndIf
                  EndIf
               Case #Button_2
                  If status <> 0
                     CloseNetworkConnection(conID)
                     status = 0
                     SetGadgetText(#String_0,"getrennt")
                  EndIf
            EndSelect
    EndSelect
     
    If status       
      cEvent = NetworkClientEvent(conID)
         
      Select cEvent         
         Case #PB_NetworkEvent_Data            
           daten_empf() 
      EndSelect       
    EndIf
    
    FlipBuffers()
    
  Until Quit = 1 Or EventID = #PB_Event_CloseWindow
  FreeMemory(*sbuffer)
  FreeMemory(*rbuffer)
  FreeMemory(*buffer)
  End 
  
  Procedure zeige_daten()
    sprite_neu(#anzeiger1,100,100,200,200,0,0,0,255)
    sprite_neu(#zeiger1,100,100,200,200,geschw+45,0,-3,255)
    
    sprite_neu(#anzeiger2,300,100,200,200,0,0,0,255)
    sprite_neu(#zeiger2,300,100,200,200,motor/10,0,-3,255)
    
    sprite_neu(#platte1,100,260,150,100,90,0,0,255)
    sprite_neu(#hebel1,150,260,150,100,fahrst_n*6-115,45,-5,255)
    
    FlipBuffers()
    
    SetGadgetText(#String_3,Str(geschw))
    SetGadgetText(#String_2,Str(motor))
    SetGadgetText(#String_1,Str(fahrst_n))
  EndProcedure
  
  Procedure daten_send_empf()
    sData = SendNetworkData(conID, *sbuffer, offs)
    rData = ReceiveNetworkData(conID, *rbuffer, 256) 
  EndProcedure

  Procedure daten_empf() 
    rData = ReceiveNetworkData(conID, *rbuffer, 256)
    
    If PeekA(*rbuffer+6) = 1
      PokeA(*buffer + 0, PeekA(*rbuffer+7))
      PokeA(*buffer + 1, PeekA(*rbuffer+8))
      PokeA(*buffer + 2, PeekA(*rbuffer+9))
      PokeA(*buffer + 3, PeekA(*rbuffer+10))
      geschw=Int(PeekF(*buffer))
      Goto weiter
    EndIf  
    If PeekA(*rbuffer+6) = 9
      PokeA(*buffer + 0, PeekA(*rbuffer+7))
      PokeA(*buffer + 1, PeekA(*rbuffer+8))
      PokeA(*buffer + 2, PeekA(*rbuffer+9))
      PokeA(*buffer + 3, PeekA(*rbuffer+10))
      motor=Int(PeekF(*buffer))  
      Goto weiter
    EndIf   
    If PeekA(*rbuffer+6) = 51
      PokeA(*buffer + 0, PeekA(*rbuffer+7))
      PokeA(*buffer + 1, PeekA(*rbuffer+8))
      PokeA(*buffer + 2, PeekA(*rbuffer+9))
      PokeA(*buffer + 3, PeekA(*rbuffer+10))
      fahrst_n=Int(PeekF(*buffer))
    EndIf  
    
    weiter:
    If PeekA(*rbuffer+11) = 1
      PokeA(*buffer + 0, PeekA(*rbuffer+12))
      PokeA(*buffer + 1, PeekA(*rbuffer+13))
      PokeA(*buffer + 2, PeekA(*rbuffer+14))
      PokeA(*buffer + 3, PeekA(*rbuffer+15))
      geschw=Int(PeekF(*buffer))  
      Goto weiter1
    EndIf  
    If PeekA(*rbuffer+11) = 9
      PokeA(*buffer + 0, PeekA(*rbuffer+12))
      PokeA(*buffer + 1, PeekA(*rbuffer+13))
      PokeA(*buffer + 2, PeekA(*rbuffer+14))
      PokeA(*buffer + 3, PeekA(*rbuffer+15))
      motor=Int(PeekF(*buffer)) 
      Goto weiter1
    EndIf  
    If PeekA(*rbuffer+11) = 51
      PokeA(*buffer + 0, PeekA(*rbuffer+12))
      PokeA(*buffer + 1, PeekA(*rbuffer+13))
      PokeA(*buffer + 2, PeekA(*rbuffer+14))
      PokeA(*buffer + 3, PeekA(*rbuffer+15))
      fahrst_n=Int(PeekF(*buffer))
    EndIf  
    
    weiter1:
    If PeekA(*rbuffer+16) = 1
      PokeA(*buffer + 0, PeekA(*rbuffer+17))
      PokeA(*buffer + 1, PeekA(*rbuffer+18))
      PokeA(*buffer + 2, PeekA(*rbuffer+19))
      PokeA(*buffer + 3, PeekA(*rbuffer+20))
      geschw=Int(PeekF(*buffer)) 
      Goto weiter2
    EndIf  
    If PeekA(*rbuffer+16) = 9
      PokeA(*buffer + 0, PeekA(*rbuffer+17))
      PokeA(*buffer + 1, PeekA(*rbuffer+18))
      PokeA(*buffer + 2, PeekA(*rbuffer+19))
      PokeA(*buffer + 3, PeekA(*rbuffer+20))
      motor=Int(PeekF(*buffer)) 
      Goto weiter2
    EndIf  
    If PeekA(*rbuffer+16) = 51
      PokeA(*buffer + 0, PeekA(*rbuffer+17))
      PokeA(*buffer + 1, PeekA(*rbuffer+18))
      PokeA(*buffer + 2, PeekA(*rbuffer+19))
      PokeA(*buffer + 3, PeekA(*rbuffer+20))
      fahrst_n=Int(PeekF(*buffer))
    EndIf  
    
    weiter2:
    zeige_daten()
  EndProcedure

  Procedure zusi_hello()
    offs = 0 ; HELLO-Befehl
    PokeL(*sbuffer + 0, $0D) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $01) : offs + 1
    PokeA(*sbuffer + 6, $01) : offs + 1
    PokeA(*sbuffer + 7, $02) : offs + 1
    client$ = "Fahrpult"   
    PokeA(*sbuffer + 8, Len(client$)) : offs + 1
    PokeS(*sbuffer + 9, client$,-1, #PB_Ascii) : offs + Len(client$)
    daten_send_empf()
  
    offs=0 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 0A Geschwindigkeit/Motordrehzahl/Fahrstufe
    PokeL(*sbuffer + 0, $07) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $03) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    PokeA(*sbuffer + 7, $0A) : offs + 1
    PokeA(*sbuffer + 8, $01) : offs + 1
    PokeA(*sbuffer + 9, $09) : offs + 1
    PokeA(*sbuffer + 10, $33) : offs + 1
    daten_send_empf()
  
    offs=0 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 00
    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
    daten_send_empf()
  EndProcedure  
Zuletzt geändert von funkheld am 11.02.2012 17:14:09, insgesamt 1-mal geändert.

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

Re: TCP-Verbindung habe ich noch nicht verstanden

#34 Beitrag von Stephan/Taschi »

Für Code-Listings in dieser Länge empfiehlt sich http://pastebin.com/" target="_blank oder das Hosten auf eigenem Webspace (so vorhanden).

(Andere Foren haben die Möglichkeit, Teile eines Beitrags per default "eingeklappt" anzuzeigen und erst nach einem Klick vollständig zu zeigen - wäre auch ne Lösung, würde aber erstmal Gebastel an der Forensoftware erfordern.)

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#35 Beitrag von funkheld »

Ich glaube das wird sich in Zukunft hier gut machen...
Mit Zusi3 fängt eine neue jahrelange Ära an. Es lohnt sich.

Auch finde ich es schade , dass man hier den Code nicht Speichern kann als Text oder Exe usw.
oder habe ich das Übersehen ?

Gruss

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33450
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP-Verbindung habe ich noch nicht verstanden

#36 Beitrag von Carsten Hölscher »

Vielleicht den Code hier ganz weglassen und auf Anfrage zuschicken? Wer liest sich das schon im Forum durch...
Wäre ganz nett, die alten Beiträge dann auch vom Code zu befreien.
Carsten

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#37 Beitrag von funkheld »

Moin...
Wer liest sich das schon im Forum durch...
...natürlich nur die Menschen, die auch lesen können ... :] , die anderen schauen sich nur die Bilder an.

Darum ein Laderoutine hier im Forum hinterlassen, ist sehr nützlich oder eine Routine, wo sich die Programme einklappen.

Danke.

Gruss
Zuletzt geändert von funkheld am 12.02.2012 09:22:18, insgesamt 2-mal geändert.

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: TCP-Verbindung habe ich noch nicht verstanden

#38 Beitrag von Andreas Karg »

funkheld hat geschrieben:...natürlich nur die Menschen, die auch lesen können ...
Sorry, Funkheld, aber das ist Quark. Wir können hier alle lesen. Trotzdem wird sich nur ein Bruchteil der Leute tatsächlich für deinen Programmcode interessieren. Und die können dann auch auf einen Link klicken, der sie zu deinem Programm bringt.

Bernhard Raschke
Beiträge: 657
Registriert: 18.02.2003 18:32:49
Wohnort: 72655 Altdorf

Re: TCP-Verbindung habe ich noch nicht verstanden

#39 Beitrag von Bernhard Raschke »

Hallo miteinander, :O

Asche auf mein Haupt, denn ich hatte "funkheld" praktisch dazu animiert, seine Fortschritte auch hier zu zeigen. Sein erster Code hat mir viel Furcht vor einem Einstieg genommen, da er recht ordentlich aufgebaut erscheint und zum Weitermachen animiert. Aber wahrscheinlich ist ein Screenshot des (neuen) Ergebnisses und ein Link zur Downloadmöglichkeit eleganter und platzsparender. Meist findet man hier auch jemanden, der einem etwas hostet, wenn man nett fragt (auch wenn ich keinen Webspace eingerichtet habe, weil nicht gebraucht). ;D
Grüssle Bernhard

funkheld
Beiträge: 305
Registriert: 15.09.2010 11:52:44

Re: TCP-Verbindung habe ich noch nicht verstanden

#40 Beitrag von funkheld »

Hallo,Bernhard, wenn du Hilfe brauchst eine PN.

Ich werde hier nichts mehr reinstellen.
Es sind zuviele Quarköpfe hier, die nur rein schauen und den Oberlehrer spielen möchten.
Eigentlich gibt es da in der Politik mehr als genug und nun auch hier.... :]
Aber was soll's, ich stehe als Pensionär über diese Jungs.

Danke.

Gruss

Antworten