Ordne dir (aktueller User) DIALOUT zu, sollte reichen
sudo gpasswd --add [USERNAME] dialout
Kennung Serielle Schnittstelle unter Linux
Re: Kennung Serielle Schnittstelle unter Linux
Gruß, Michael
-
- 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
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.
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.