PiFace - SPIInitError

  • Hallo,

    ich habe hier ein offenbar generelles Problem mit dem PiFace und dessen Initialisierung.

    Folgender Fehler erscheint gelegentlich welcher dann zum Abbruch des python-Scripts führt:

    Die Meldung bzgl. Zeile 405 bezieht sich auf das "pfio.init()" innerhalb der while-Schleife. Hier der entsprechende Auszug vom Script:

    Das Script prüft alle 100ms ob Eingang 4 anliegt, ist dies der Fall werden alle Eingänge abgefragt und entsprechend dann das supProgramm für die eigentliche Arbeit aufgerufen. Abschließend erfolgt das betreffende Init des PiFace. Grund dafür ist dass gelegentlich Eingänge hängenbleiben, sprich, Eingang auf High (=Status 1) und nimmt man den Eingang wieder auf Low blieb, ohne das erneute init, der Status gelegentlich auf 1 statt auf 0 zu wechseln - fatal bei einer SPS-Steuerung.

    Das Script arbeitet grundsätzlich tadellos nur dass gelegentlich (1-2mal täglich) der Abbruch des Scripts an besagter Stelle erfolgt. Bislang wird mittels "nohub"-Befehl in einem Shellscript das py-Script wieder neu gestartet wenn es abbricht - nicht schön aber mein derzeitiger work-around.

    Hat jemand eine Idee wie der Fehler zu beheben wäre?
    Wie gesagt, grundsätzlich funktioniert es, das Script samt Initialisierung läuft mehrmals die Stunde sauber durch... nur gelegentlich kommt der Abbruch.

    ---
    Raspberry Pi B Rev.2 (512MB) mit Raspbian und PiFace

    Einmal editiert, zuletzt von svblue (21. Januar 2015 um 07:39)

    • Offizieller Beitrag

    Machst die Verbindung auch wieder zu bevor du sie neu initalisierst? (deinit()). Ich hatte so einen ähnlichen Fall mal mit mysqldb und hab immer wieder neue connections aufgemacht. Das lief ne Weile gut (2-6 Tage) dann so ähnlicher Fehler....Ich hatte an einer Stelle vergessen die connection auch wieder zu schliessen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Ich hab' die PiFace-Reference gefühlte 100mal durchgesehen... aber erst jetzt nach deinem Tipp das deinit() gefunden. *confused*

    Danke dir vielmals.
    Das klingt mehr als logisch. Ich werd's in der Schleife vor dem init() einfügen und beobachten.
    Rückmeldung folgt nächste Woche...

  • So sieht's nun aus:
    Auszug

    Code
    subProg(Trigger)
    sleep(0.2)
    pfio.deinit()
    sleep(0.2)
    pfio.init()
    sleep(0.5)


    Leider dann doch wie gehabt, das "pfio.init()" führt dennoch gelegentlich zum gleichen Fehler. :s

    Einmal editiert, zuletzt von svblue (23. Januar 2015 um 06:31)

  • Hallo,

    ist das Problem gelöst?

    darf ich mal vorsichtig fragen, warum Du es in der Schleife immer wieder initialisierst?
    Ich kenn jetzt die API und Deine Überlegungen nicht, aber ich kenne es so, daß man nur am Anfang des Programms eine initialisierung vornimmt.
    Hast Du mal versucht auf das Init innerhalb der Schleife komplett zu verzichten. Würde mich interessieren, ob das Programmm so tut wie Du es Dir vorstellst.

    Grüße,
    Thomas

  • Gelöst leider nicht.
    Wie oben beschrieben bleiben manchmal Eingänge stehen (high) obwohl kein Signal mehr anliegt. Mit dem init() in der Schleife habe ich das Problem nicht... dafür jedoch dieses hier.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!