Jump to content

RS485 Bricklet Lazarus-API RS485.write(...


NoCee

Recommended Posts

Hallo zusammen

 

Ich lese mich gerade durch die API vom RS485 Bricklet.

Im Beispiel finde ich rs485.Write(['t', 'e', 's', 't']);

In der Doku der API finde ich rs485.Write([... aber nicht.

Da gibt es nur ein RS485.WriteLowLevel...

Fehlt das hier?

 

Zweite Frage, warum schreibt man hier rs485.Write(['t', 'e', 's', 't']);

und nicht rs485.Write(['test']);

 

Danke schon mal im Vorraus für eine Antwort

Gruß

NoCee

Link to comment
Share on other sites

Oh, da ist die Dokumentation in der Tat noch unfertig. Wird gefixt.

 

Bei den neuen Bricklets gibt es "Streaming-Funktionen", diese sind nicht auf 64 Byte Größe beschränkt wie die normalen Funktionen, sondern können beliebige Datenmengen übertragen.

 

Wenn du "Write" aufrufst mit einem char-Array der Größe 128 Byte (z.B.) ruft das intern 2x WriteLowLevel mit je 64 Byte auf. Die LowLevel-Funktionen kannst du ignorieren, die sind eigentlich nur für die interne Nutzung.

 

Die Write/Read-Methoden verwenden ein char-Array und kein String, daher musst du ['t', 'e', 's', 't'] statt 'test' schreiben. Die Daten könnten ja auch Binärdaten sein mit Nullen dazwischen etc, dafür sind Strings nicht gut geeignet.

 

Du kannst aber in deinem Programm mit Strings arbeiten und den String einfach in ein Array umwandeln bevor du die Write-Funktion aufrufst.

Link to comment
Share on other sites

Ok, kapiert.

Danke für die Info.

 

Noch ne Frage zur internen Kommunikation.

Ich hab mal Daten einer relativ langsamen RS422

Busleitung mitloggen wollen. Auf einem Win-PC mit 2 echten Coms.

Da hat mich Windows aber so im Stich gelassen, daß ich die Daten

nicht in der richtigen Reihenfolge bekommen habe. Weil das Ganze halt nicht

echtzeitfähig ist. Noch nicht mal mit 1200bd.

Passiert mir das mit dem Red und 2 seriellen Schnittstellen auch, weil da ja

auch ein nicht echtzeitfähiges Linux drauf läuft?

Der Gedanke war einen Telegrammwandler für eine nicht mehr erhältliche Hardware

zu bauen. Mit einem Mikrokontroller wäre das kein Thema, kenn ich mich aber Null aus und würde das viel lieber mit TF und Lazarus realisieren.

 

Hab ich da eine Chance oder macht da der Red auch nicht mit?

 

Gruß

NoCee

Link to comment
Share on other sites

Deine Frage ist ob die Nachrichten von zwei RS485 Bricklets immer in der gleichen Reihenfolge beim PC/RED Brick ankommen wie sie beim Bricklet eintreffen, richtig?

 

Ich befürchte das muss nicht zwangsweise so sein. Die beiden Bricklets untereinander sind ja in dem Sinne nicht synchronisiert zueinander. Egal ob du einen RED Brick verwendest oder den Stapel am PC anschließt.

Link to comment
Share on other sites

Das ist ein Master Slave Netzwerk,

und das ziemlich lahm. 1200bd

Aber Windows bringt es fertig, mir die Hälfte der Antwort vom Slave

vor der ganzen Masteranfrage zu liefern.

 

Ich habe ein bischen gehofft, daß der Red bei so etwas so unterlastet und

so freundlich ist, mir die Reihenfolge einzuhalten wie es eingetroffen ist.

Ich kenn mich mit Linux noch nicht so dolle aus. Vielleicht ist ja euer Softwarepaket da irgendwie echtzeitfähiger.

Aber so wie es aussieht, muß ich da doch einen Arduino mit 3 seriellen Schnittstellen dazwischen klemmen. Aber das wäre C, nicht so mein Ding.

Da wäre der Red schon super, der versteht mein Pascal.

 

Trotzdem Danke für die Antwort

Gruß

NoCee

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...