Kennung Serielle Schnittstelle unter Linux

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Kennung Serielle Schnittstelle unter Linux

Beitrag von six1 »

Ordne dir (aktueller User) DIALOUT zu, sollte reichen

sudo gpasswd --add [USERNAME] dialout
Gruß, Michael

Matze66
Beiträge: 29
Registriert: Mo 15. Mär 2021, 14:09
OS, Lazarus, FPC: Lazarus-Ide 2.0.0 auf Debian Raspberry Pi3
CPU-Target: Msp430, Raspberry
Wohnort: bei Itzehoe

Re: Kennung Serielle Schnittstelle unter Linux

Beitrag von Matze66 »

Danke.

Matze66
Beiträge: 29
Registriert: Mo 15. Mär 2021, 14:09
OS, Lazarus, FPC: Lazarus-Ide 2.0.0 auf Debian Raspberry Pi3
CPU-Target: Msp430, Raspberry
Wohnort: bei Itzehoe

Re: Kennung Serielle Schnittstelle unter Linux

Beitrag von Matze66 »

Meine Lösung für den Raspberry Pi, Wechselrichter Steca Solarix und Batterien 48100R auslesen:

1. Man werfe den Rs485-Adapter für die Batterieschnittstelle in die Tonne und nehme stattdessen die Schnittstelle "console" und einen RS232-Adapter.
2. Kein Usb-Kabel direkt an den WR hängen, der Raspi erkennt zwar den eingebauten Wandler, der kann aber bei meinem Pi nicht direkt angesprochen werden, auch nicht mit den eingeräumten Rechten. Stattdessen einen Adapter seriell-Usb nehmen, der wird aber nicht unter /dev/serial/by-id, sondern nur unter /dev/serial/by-path abgelegt.

---Quelltext Lazarus----------------------
implementation:
Seriell2 := TBlockserial.Create;
Seriell2.LinuxLock := False; // vermeidet Fehlermeldung Zeile 2220-2223
Seriell2.Connect('/dev/serial/by-path/hier kompletten Dateinamen einstellen);
Delay(100); // der Adapter braucht etwas Zeit
Seriell2.config(2400, 8, 'N', SB1, False, False);

procedure:
Label1.Caption := 'Wechselrichter: '+Seriell2.LastErrorDesc; // offen?
Seriell2.ConvertLineEnd := True; // Ohne klappt es nicht
Seriell2.SendString(#$51#$50#$49#$47#$53#$B7#$A9#$0d); // QPIGSB7A9CR
Delay(80); // ohne Pause wird nur ein Teil ausgegeben
Label2.Caption := Seriell2.Recvstring(400); //

Ein Problem war, dass laut Datenblatt das hier gesendet werden soll:
"Während QPIGS die Abfrage darstellt, steht <CRC> für den cyclic redundancy check Code und <cr>
für das Sonderzeichen Carriage-Return (Zeilenumbruch). Bei dieser Abfrage entspricht der CRC zwei
Zeichen im Hexadezimal System (jedoch als Bytes gesendet): B7A9"

Zusammengefasst: Alle Anfragen an den Wechselrichter nur als Hex senden.

Vielen Dank für die Tipps, hat geholfen.

Antworten