Author Topic: RS485 Bricklet Lazarus-API RS485.write(...  (Read 251 times)

NoCee

  • Newbie
  • *
  • Posts: 8
    • View Profile
RS485 Bricklet Lazarus-API RS485.write(...
« on: October 18, 2018, 16:55:16 »
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

borg

  • Administrator
  • Hero Member
  • *****
  • Posts: 2.856
    • View Profile
Re: RS485 Bricklet Lazarus-API RS485.write(...
« Reply #1 on: October 18, 2018, 17:36:22 »
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.
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!

NoCee

  • Newbie
  • *
  • Posts: 8
    • View Profile
Re: RS485 Bricklet Lazarus-API RS485.write(...
« Reply #2 on: October 19, 2018, 10:03:18 »
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

borg

  • Administrator
  • Hero Member
  • *****
  • Posts: 2.856
    • View Profile
Re: RS485 Bricklet Lazarus-API RS485.write(...
« Reply #3 on: October 22, 2018, 17:57:30 »
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.
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!

NoCee

  • Newbie
  • *
  • Posts: 8
    • View Profile
Re: RS485 Bricklet Lazarus-API RS485.write(...
« Reply #4 on: October 22, 2018, 22:22:03 »
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

borg

  • Administrator
  • Hero Member
  • *****
  • Posts: 2.856
    • View Profile
Re: RS485 Bricklet Lazarus-API RS485.write(...
« Reply #5 on: October 23, 2018, 10:25:39 »
Bei 1200 baud kannst du Problemlos die Daten Buchstabe für Buchstabe bekommen (auch per USB). Da bin ich zuversichtlich das du die Master-Anfragen vor den Slave-Antworten siehst.
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!