Ankündigung

Einklappen
Keine Ankündigung bisher.

ERR_LOG Fehlercode: 2

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Leider reichen meine PHP-Kenntnisse hierfür nicht.
    - die Funktion war bei Entwicklung des Bausteins nicht vorhanden
    - Der Connect ist in die while Schleife gewandert, weil eben nach 8 Stunden die Verbindung gekappt wird.
    - der Befehl socket_recvfrom() in der while-Schleife wartet bis Daten auf dem Port eintreffen (auch mehr als 8 Stunden), ein logic_dbKeepalive kann ich deshalb nicht absetzen, er hilft ja nach einem Verlust der Verbindung nicht mehr (oder irre ich?)

    Ich bräuchte also eine Überprüfung, ob die Verbindung noch besteht,evtl. einfach einen SQL-Befehl absetzen und nur im Fehlerfall einen Connect auslösen?

    Kommentar


      #17
      Du kannst sql_connect() ruhig verwenden - nur dann eben auch sql_disconnect() nicht vergessen...

      BTW: Blockierende Sockets mag ich persönlich nicht - Du siehst ja selbst, dass dies u.U. "unvorhersehbares" produziert. Letztlich gibt man ja nur die Kontrolle an eine PHP-Funktion ab, statt sich selbst drum zu kümmern (und reagieren zu können).
      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

      Kommentar


        #18
        Meinst Du, man sollte den LBS vielleicht neu aufziehen, damit beim Empfang das System nicht blockiert ist? Dann arbeitet man mit einer Ende-Kennung? Hast du schon eine Funktion im Sinn? Wäre schön, Christian, wenn du für einen Anfänger vielleicht kurz eine Funktion oder gar einen LBS nennen könntest, wo man sich dran orientieren könnte.

        Kommentar


          #19
          Ich denke entweder das socket_receive sollte auf non-blocking umgestellt werden, denn das usleep() ist ja schon drin. Oder nach dem socket_receive könnte man auch ein sql_disonnect() und sql_connect() machen. Ich denke ein sql_disconnect() sollte nichts ausmachen, wenn die Verbindung schon in den timeout gelaufen ist.

          Kommentar


            #20
            Ich habe gestern Abend noch ein bißchen getestet. Ich glaube bei mir sind 2 Probleme zusammengekommen, die zu dem von mir bereits beschrieben Verhalten geführt haben.
            Das erste Problem war wohl, dass zu wenig MySQL Connections erlaubt waren. Das zweite war, dass dann dein Baustein vorzeitig mit return beendet wurde ohne die Verbindung zu schließen. Das führte dann dazu, dass Edomi nicht mehr erreichbar war.
            Ich habe Dank jonofe Hilfe die Anzahl der mysql-Connections auf 200 erhöht und die beiden Stellen inm LBS geändert, bevor er aus dem LBS wieder rausgeht.
            Bis jetzt läuft alles ohne Fehlermeldung. Das Feld "PHP" auf der Performance Seite von Edomi steht auf rot. Was bedeutet konkret?
            Eine non-blocking Lösung habe ich noch nicht hinbekommen. Ist die Funktion usleep() bockigkeit?

            Kommentar


              #21
              Ich denke dsa PHP auf rot steht liegt daran, dass für jeden UDP Receiver ein PHP Prozess läuft und Christian hier eine Schwelle definiert hat, ab der der rot signalisiert wird. Grundsätzlich ist der Ansatz mit 100 UDP Receivern nicht wirklich der richtige. Du hast immer noch nicht geschrieben, was du da genau machst, d.h. welche 100 Verbindungen das sind und welche Daten da ankommen. Aus meiner Sicht sollte hier nach einer anderen Lösung suchen, die dann z.B. mit einem einzigen LBS abgebildet werden kann.

              Kommentar


                #22
                Oh ja, das hatte ich noch immer nicht geschrieben. Die Daten kommen ursprünglich von einem Device, das Daten von einem Stromnetz (Strom, Spannung, Leistung, cosphi ect.) über eine RS232 Verbindung nach aussen gibt. An der RS232 Schnittstelle sitzt ein Umsetzer auf IP. Der Umsetzer gibt per UDP die Daten auf IP, wobei jedes Datum auf einem eigenen Port übertragenen wird.
                Natürlich gefällt mir die Lösung mit den 100 LBS auch nicht. Am liebsten wäre mir die RS232 Schnittstelle direkt anzuzapfen. Das habe ich mit einem kleinen AVR in C bereits realisiert, aber da fehlt mir die IP Anbindung.
                Wie man in PHP eine RS232 bedient, weiß ich leider nicht und wie man C-Code in PHP einbindet leider auch nicht. Wäre das ein Ansatz? Der LBS müsste dann aber ständig die RS232 Schnittstelle bedienen.

                Kommentar


                  #23
                  ein RS232 TCP/IP Konverter gibt doch normalerweise alle Daten ungefiltert weiter. Ist das ein spezieller Konverter? kan man den nicht durch einen Moxa ersetzen?
                  Und du brauchst 100 Parameter zu deinem Stromanschluss?

                  Kommentar


                    #24
                    Ich glaube, ich habe mich nicht richtig ausgedrückt. Der Umsetzer, den ich erwähnt habe, fährt RS232 seitig ein spezielles Protokoll. Jedenfalls musste ich in meinem C-Code ein spezielles Protokoll fahren. Wenn ich den C-Code auf Linux portiere, wie bekomme ich die Daten in Edomi?

                    Kommentar


                      #25
                      Keine Ahnung was genau spezielles Protokoll bedeutet. Ich weiss nur, dass man i.d.R. einen Moxa dranhängt und der gibt alles was an RS232 rauskommt auf einen IP Port. Auf den Port kann man sich dann verbinden und kann alles lesen was da ankommt. Den Inhalt muss man dann natürlich entsprechend parsen.

                      Kommentar


                        #26
                        Mit Protokoll meine ich einen Frame bestehend aus 16 Byte + CRC der gesendet werden muss. Als Antwort bekommt man ebenfalls einen Frame den man dann, wie du schon gesagt hast, zerpflücken muss. Habe mal einen Teil meines C-Code auf Linux portiert. Kann nun über die serielle Schnittstelle einen Frame senden, Daten auslesen und auf der Konsole ausgeben. Aber wie bekomme ich sie nun in Edomi? Welche Möglichkeit gibts da?

                        Kommentar


                          #27
                          Direkt per RS232 kann ich nichts zu sagen.

                          Wie gesagt, ich würde einen RS232/IP Wandler einsetzen, dann kann man das alles per TCP/IP machen. Genauso ist es auch im LG RS232 LBS gemacht.

                          Kommentar


                            #28
                            Den werde ich mir mal ansehen. Danke

                            Kommentar

                            Lädt...
                            X