Probleme mit Synapse - USB Serial

Rund um die LCL und andere Komponenten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Probleme mit Synapse - USB Serial

Beitrag von pluto »

Hallo

Bei meiner Anwendung handelt es sich um einen etwas komplizierten Aufbau:
Es gibt eine Server/Client Struktur. Darunter ist ein Client, der sich komplett um Arduino kümmert.
Nun habe ich 5 Arduino Platinen, wo ich je ein Arduino Nano verwende an einem USB HUB der wiederum am Banana PI angeschlossen ist.
Die Platinen haben unter anderem Verschiedene Sensoren einige haben LCD'S und Tasten.

Der Arduino Client zeigt nun auf den LCD Informationen an. Es gibt eine Art Beschreibungs Sprache. Es gibt mehrer Seiten pro LCD.
D.H. wenn ich auf eine Taste drücke, wird z.b. die nächste Seite Angezeigt oder die vorherige.
Genau das Funktioniert nach einigen Tagen/Wochen nicht mehr.

Seit Wochen suche ich nun die Ursache. Inzwischen habe ich alle Relevanten Code Teile in tray/except Blöcken gepackt.
Ich log zwar einiges, aber noch habe ich die Ursache nicht gefunden.

hier noch zwei Code Auszüge, die mir Relevant erscheinen:
Hier Installisiere ich das ganze. Jede Arduino Platine ist ein eigener Thread.

Code: Alles auswählen

 
//  ThreadTimer.SynMod:=false;
  if (not FileExists(Device)) or (not Enabled) then begin
    if Assigned(BlockSerial) then begin
  //    writeln('Socket Closed!!!');
      FreeAndNil(BlockSerial);
      BlockSerial:=nil;
    end;
  end
  else begin
    if not Assigned(BlockSerial) then begin
//      writeln('Verbunden mit "',Device,'"');
 
      if Assigned(BlockSerial) then begin
        BlockSerial.Free;
        BlockSerial:=nil;
      end;
 
      BlockSerial:=TBlockSerial.Create;
      BlockSerial.LinuxLock:=False;
      BlockSerial.RaiseExcept:=False;
//      BlockSerial.ConvertLineEnd:=True;
      BlockSerial.Connect(Device);
      sleep(1000);
      BlockSerial.Config(9600,8,'N',SB1,false,false);
      sleep(500);
 
      TimerEvent1;
    end;
  end;
 

Das Sleep ist wichtig, weil es sonst nicht geht.

Code: Alles auswählen

 
var
  signal:string;
begin
  if (Assigned(BlockSerial)) then begin
//    if BlockSerial.CanRead(1) then begin
      signal := BlockSerial.Recvstring(1);
      if BlockSerial.LastError <> 0 then exit;
//      writeln('signal:',signal);
      DoOnData(Trim(signal),DeviceIndex);
      sleep(100);
  //  end;
  end;
 


Nun meine Frage:
Wer hat schon ähnliche Erfahrungen gemacht mit USB bzw. Synapse?
Sieht jemand auf Anhieb einen Fehler in den gezeigtem Code?

Falls nicht, muss ich eine kleine Test Anwendung schreiben und ca 1 oder 2 Wochen Warten.

Edit01: Ich weiß nicht warum das FORUM mit Google Chrome Probleme hat oder Google-Chrome Probleme mit dem Forum hat.
Ich hatte eine schöne Frage Formuliert.... und der letzte Teil wurde offenbar verschluckt.
Zuletzt geändert von pluto am Mi 25. Jan 2017, 23:07, insgesamt 6-mal geändert.
MFG
Michael Springwald

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

Kann es sein, das bei deinem Post etwas verloren gegangen ist ?

:wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Das ist wieder Google-Chrome.... Ich hasse es.
MFG
Michael Springwald

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

Das ist wieder Google-Chrome.... Ich hasse es.

Das Problem ist bei mir zum Glück seit etwas 2 Monaten verschwunden.
Hast du auch Mint 18.1 64Bit und den neusten Chrome ?

Code: Alles auswählen

signal := BlockSerial.Recvstring(1);

Die 1 finde ich etwas knapp bemessen, da nehme ich meistens 100.
Was mich verwirrt, du hast sehr viele Assigned.

Was ich noch Schade finde, synaser.pas wurde schon lange nicht mehr Updatet.
Auch sind verschiedene Versionen im Umlauf.
Hast du auch die Version 007.006.000 von synaser ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Das Problem ist bei mir zum Glück seit etwas 2 Monaten verschwunden.
Hast du auch Mint 18.1 64Bit und den neusten Chrome ?

Nur auf mein Laptop habe ich glaube ich 18.0 oder so.... Mein PC muss ich noch updaten, da läuft ein Linux Mint 17.3

Die 1 finde ich etwas knapp bemessen, da nehme ich meistens 100.
Was mich verwirrt, du hast sehr viele Assigned.

Ich meine das mit der 1 hatte sein Grund aber ich könnte es ja test Weise mal auf 100 Stellen. Mal sehen.
Aber das ist doch nur ein TimeOut(soweit ich weiß).... gut könnte daran liegen, aber warum erst nach z.b. 10 Tagen(ob die Zeit immer gleich ist weiß ich nicht)
Assigned überprüft ja nur ob es Blockserial schon erstellt wurde(ich möchte es ja nicht Doppelt erstellen) und beim Create der Klasse stelle ich es auf nil.

Hast du auch die Version 007.006.000 von synaser ?

Guter hinweis.... ich müsste mal schauen ob ich das herraus findenkann.

Erst mal danke für die zwei Hinweise.
MFG
Michael Springwald

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

Ich meine das mit der 1 hatte sein Grund aber ich könnte es ja test Weise mal auf 100 Stellen. Mal sehen.

Mit 100 hast du noch Reserve. Wen du nur eine 1 hast, wird sofort abgebrochen, wen die Daten mal nicht das sind.

Aber das ist doch nur ein TimeOut(soweit ich weiß).... gut könnte daran liegen, aber warum erst nach z.b. 10 Tagen(ob die Zeit immer gleich ist weiß ich nicht)

Verstehe ich dich richtig, wen dein Sketch ca. 10 Tage am Stück arbeitet, dann macht der COM-Port Probleme ?
Das könnte dann evtl. auch Arduino-Seitig sein.

Nur auf mein Laptop habe ich glaube ich 18.0 oder so.... Mein PC muss ich noch updaten, da läuft ein Linux Mint 17.3

Da würde ich unbedingt Updaten, vor allem die 17er hat sehr viele veraltete Pakete. ZB. Java-Bibliotheken.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Probleme mit Synapse - USB Serial

Beitrag von Timm Thaler »

Mathias hat geschrieben:Mit 100 hast du noch Reserve. Wen du nur eine 1 hast, wird sofort abgebrochen, wen die Daten mal nicht das sind.


Was umgekehrt auch den Effekt haben könnte, dass ohne Timeout das Programm an der Stelle hängt, wenn nicht genug Daten kommen. Ist das bei Synase so?

Mathias hat geschrieben:Verstehe ich dich richtig, wen dein Sketch ca. 10 Tage am Stück arbeitet, dann macht der COM-Port Probleme ?
Das könnte dann evtl. auch Arduino-Seitig sein.


Ich hatte auch schon USB-seriell-Wandler, die nach einiger Zeit abgeschaltet haben. Die musste man dann immer neu anstecken. Und Windows im Energiesparmodus auf dem Laptop klemmt auch mal eben einen laufenden USB-seriell-Wandler ab.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

Was umgekehrt auch den Effekt haben könnte, dass ohne Timeout das Programm an der Stelle hängt, wenn nicht genug Daten kommen. Ist das bei Synase so?

Das stimmt natürlich, wen man in einer Schleife Daten empfangt.
Aus diesem Grund mache ich ein Application.Processmessage in einer Schleife.

Ich hatte auch schon USB-seriell-Wandler, die nach einiger Zeit abgeschaltet haben. Die musste man dann immer neu anstecken. Und Windows im Energiesparmodus auf dem Laptop klemmt auch mal eben einen laufenden USB-seriell-Wandler ab.

Aber erst nach 10 Tagen, wäre dann auch komisch.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Probleme mit Synapse - USB Serial

Beitrag von Timm Thaler »

Mathias hat geschrieben:Aber erst nach 10 Tagen, wäre dann auch komisch.


Du weisst doch nicht, was für komische Counter da jemand mitlaufen hat. Nach 25 Tagen läuft ein mit 1msec inkrementierter signed int32 über. Bei irgendeinem Windows gab es mal Probleme mit einem Timer, der nach 7 Tagen übergelaufen ist. Oder ein Counter läuft nach einer bestimmten Anzahl empfangener Zeichen über, und die kommen zufällig in Deinen 10 Tagen zusammen.

Das Problem ist doch, dass viele Programme, die auf den ersten Blick laufen, nicht langzeitstabil sind. Ein altes Atmel AVR Studio ist regelmäßig abgeschmiert, wenn man den Rechner aus dem Ruhezustand geholt hat. Die Serielle unter Purebasic war regelmäßig nach dem Ruhezustand tot, mit den gleichen Wandlern und Treibern geht es unter Lazarus und der serial.pp problemlos, wie ich vorhin unfreiwillig feststellen durfte.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Verstehe ich dich richtig, wen dein Sketch ca. 10 Tage am Stück arbeitet, dann macht der COM-Port Probleme ?
Das könnte dann evtl. auch Arduino-Seitig sein.

Diese Vermutung habe ich.

Erst wenn ich den USB Hub abklemme und eine Zeit lang warte und wieder rein stecke läuft es wieder.
Die 10 Tage sind einfach geraten. Es können 15 Sein, es können 5 sein.

Da würde ich unbedingt Updaten, vor allem die 17er hat sehr viele veraltete Pakete. ZB. Java-Bibliotheken.

Ja, habe ich vor, nur am PC hängt noch eine USB TV Box, dort musste ich immer die Treiber selbst Kompilieren... das dauerte in der Regel vielleicht 30 Minuten.

Was umgekehrt auch den Effekt haben könnte, dass ohne Timeout das Programm an der Stelle hängt, wenn nicht genug Daten kommen. Ist das bei Synase so?

Naja, jeder Port ist in einem eigenen Thread.
Wenn ich z.b. das TimeOut erhöhe, kann ich nicht mehr schreiben. Ich werde da zu aber noch mal einige Tests machen mit einer Test Aufbau...

Ich hatte auch schon USB-seriell-Wandler, die nach einiger Zeit abgeschaltet haben. Die musste man dann immer neu anstecken. Und Windows im Energiesparmodus auf dem Laptop klemmt auch mal eben einen laufenden USB-seriell-Wandler ab.

Sowas in der Richtung denke ich auch.... wie könnte man das verhindern? Ohne großen Aufwand?
Einfach ein Ping Senden alle 60 Minuten?

Das stimmt natürlich, wen man in einer Schleife Daten empfangt.
Aus diesem Grund mache ich ein Application.Processmessage in einer Schleife.

Mein Programm ist keine Grafische Anwendung, sondern eine Konsolen Anwendung.
Gibt es da was vergleichbares? Aus meiner Sicht ist das doch nur bei Grafischen Anwendungen Nötig oder?

Aber erst nach 10 Tagen, wäre dann auch komisch.

Naja, es ist komisch... ich weiß halt im Moment nicht wo ich suchen könnte... Es könnte ein Uart Fehler sein(Wäre irgendwie Logisch) Es könnte aber auch ein Software Fehler sein.

Z.B. ich weiß nicht genau ob der Uart ein Buffer hat. Ich habe schon mal sehr viele Daten innerhalb weniger Minuten empfangen mit einem anderen Projekt über Arduino da trat das Problem deutlich früher auf.

Du weisst doch nicht, was für komische Counter da jemand mitlaufen hat. Nach 25 Tagen läuft ein mit 1msec inkrementierter signed int32 über. Bei irgendeinem Windows gab es mal Probleme mit einem Timer, der nach 7 Tagen übergelaufen ist. Oder ein Counter läuft nach einer bestimmten Anzahl empfangener Zeichen über, und die kommen zufällig in Deinen 10 Tagen zusammen.

Die Arduino's laufen soweit ich weiß ca 30 Tage oder so, dann werden sie resetet... weil irgendein Zähler überläuft.

Das Problem ist doch, dass viele Programme, die auf den ersten Blick laufen, nicht langzeitstabil sind.

Ja.... dass habe ich jetzt bei zwei Projekten....

Ich könnte es mal mit einem Original Arduino versuchen, dort läuft ja ein atMega32 irgendwas.....
Ich verwende halt Arduino Clone, da läuft halt auch nur ein Billiger Uart mit.

Erst mal vielen Dank für eure Infos.... ich werde wohl noch einige Tests machen müssen und mir eine einfachere kleinere Test Umgebung erstellen müssen. Vielleicht komme ich nur so auf die Spure.

Ich habe auch schon versucht per Cronjob einmal am Tag die Programme zu Beenden und nach 15 Minuten neu zu Starten(dabei werden die Nanos ja resetet) klappte aber nicht.... gleiche verhalten.

Ich werde das aber noch mal wiederhohlen um ganz sicher zu sein.
MFG
Michael Springwald

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Synapse - USB Serial

Beitrag von Mathias »

Ein Ardunio pro micro Clone waere eine Alternative, dort ist der USB direkt im Atmega verbaut und ist auch relativ guenstig.
Vieleicht hat auch dein Sketch ein Fehler.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Ein Ardunio pro micro Clone waere eine Alternative, dort ist der USB direkt im Atmega verbaut und ist auch relativ guenstig.

Danke für den Hinweis, ich habe mir jetzt halt noch 10 weitere Nanos gekauft. Beim "Ardunio pro micro Clone"
ist soweit ich weiß, leider keine 3,3 Volt, jeden falls bei den die ich habe... bin mir aber gerade nicht 100% sicher.

Vieleicht hat auch dein Sketch ein Fehler.

Wäre auch möglich...

Ich lade einfach mal ein Soruce-Code hoch.... mal sehen ob euch was auffällt.

Ich weiß,das es hier ein Lazarus Forum ist, aber es geht ja im Moment um beides...
ich habe jetzt die Endung von Ino nach txt geändert, weil sich das Forum etwas anstellt.
Dateianhänge
Nokia_5110_LCD_28.txt
(7.48 KiB) 75-mal heruntergeladen
MFG
Michael Springwald

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Probleme mit Synapse - USB Serial

Beitrag von kupferstecher »

pluto hat geschrieben:Z.B. ich weiß nicht genau ob der Uart ein Buffer hat. Ich habe schon mal sehr viele Daten innerhalb weniger Minuten empfangen mit einem anderen Projekt über Arduino da trat das Problem deutlich früher auf.


Zumindest in Synaser ist ein Puffer eingebaut. Du bekommst ja kein Interrupt oder Callback, sondern liest die "Schnittstelle" aus wann es in deinem Programm grad passt. Es kann also durchaus sein, dass sich Daten anstauen. Aus deinen Codefragmenten lässt sich das aber jetzt nicht beurteilen. Typischerweise hat man ja eine Schleife, in der man den Eingang zyklisch abfrägt, damit kanns dann nicht zum Pufferüberlauf kommen.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Aus deinen Codefragmenten lässt sich das aber jetzt nicht beurteilen. Typischerweise hat man ja eine Schleife, in der man den Eingang zyklisch abfrägt, damit kanns dann nicht zum Pufferüberlauf kommen.

Guter Hinweis...Das habe ich im Prinzip auch:
Wenn ich lese, prüfe ich ob es ein Fehler Code gibt, gibt es ein OK, geht es weiter und vorher nicht.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Probleme mit Synapse - USB Serial

Beitrag von pluto »

Ach ja: hier noch mal die ganze Unit um die es geht. Ich hatte mir dafür eine Extra Klasse erstellt die das verwaltet.
Dateianhänge
uplarduinopcinterface.pas
(8.1 KiB) 95-mal heruntergeladen
MFG
Michael Springwald

Antworten