Jump to content

[Java] Wie kann ich die Stabilität des MasterBricks verbessern?


Recommended Posts

Moinsen.

 

ich habe ein Problem mit der Stabilität meines Programms oder des MasterBricks.

 

Zunächst mein Aufbau:

1x RaspberryPi steuert ein MasterBrick mit  1x Dualrelay, 1x LCD 20x4, 1x Temperatursensor, 1x Analog In

Alles versorgt über ein Step-down-Power Supply mit 12V 2A Netzteil.

Das dual Relay ist mit je einem Varistor 360V geschützt und dient eigentlich nur als Zeitschaltuhr. Mit dem Analog in habe ich mir ein Wasserthermometer gebaut. d.h. das Programm muss die Umrechnung durchführen. Und das ganze soll dann auf dem LCD angezeigt werden.

Nun funktioniert mein Programm zwar nur ab und zu reagiert die Masterbrick nicht mehr.

 

Ich habe mittlerweile folgende Massnahmen ergriffen:

- Raspberry hängt jetzt am Kabel und nicht mehr am Wlan-Stick

- die Anlage läuft hinter einem Trenntrafo (ich hatte Störungen im Stromnetz: kurzes Brummen meiner Hifi Anlage, Funkgesteuerte Steckdosen gingen an bzw. aus, gedimmte Lampen sprangen aus usw.) Daher hatte ich das Teil eh noch rumstehen.

- Im Programm habe ich nahezu jede Abfrage des Masterbricks mit Thread.sleep(100) zeitlich getrennt.

 

Naja da ich die letzten Änderungen erst heute vorgenommen habe kann ich nicht sagen ob es besser geworden ist.

Aber habt Ihr noch Erfahrungswerte? Bzw. gibt es Tipps zur Verbesserung der Stabilität?

 

 

 

Link zu diesem Kommentar
Share on other sites

Die letzte Maßnahme klingt sinnvoll. Leider sind Dual Relay und LCD leider die beiden Problemkindchen von TF (wage ich einfach mal zu behaupten).

Glaube beim LCD ist es inzwischen besser geworden, aber das Dual Relay sorgt öfter mal für Probleme.

 

Kannst du einschränken wann dein Brick abschmiert? Also z.B. nur beim Schalten des Dual Relay oder nur beim Aktualisieren des LCD?

Link zu diesem Kommentar
Share on other sites

Hast du denn schon ein LCD mit dem zusätzlichen Kondensator: http://de.blog.tinkerforge.com/2012/9/10/problems-with-lcd-20x4-bricklet ?

 

Falls nicht tauschen wir es aus. Wie AuronX schon sagt, hält das LCD leider häufig die kurzzeitigen Peaks im Stromverbrauch nicht aus, die das Dual Relay erzeugen kann. Diese Probleme sollte mit einem gefixten LCD Bricklet allerdings eigentlich nicht mehr auftreten :).

Link zu diesem Kommentar
Share on other sites

Also beim testen ist mir aufgefallen, dass man nicht gleichzeitig ins LCD schreiben und das Relay schalten sollte. Das passiert nun nicht mehr.

Die Ausfälle traten aber nicht während des Schaltens auf. Sondern irgendwann ohne erkennbaren Zusammenhang. Mal nach 10 minuten mal nach 18 Stunden. Aber bisher hat es keinen Tag ausgehalten. Das mit den Pausen ist noch neu, vielleicht hilft es ja wirklich. War nur ein Idee.

 

 

@Die Borg ;)

Das mit dem Kondensator hatte ich schon in einem anderen Thread geklärt und den Fix selber durchgeführt. Das LCD läuft nun super. Das Ausfallen des LCD hatte keine Folgen für das Program, es lief weiter.

 

Aktualisierung:

Also die Änderungen haben nichts gebracht. Heute Morgen war es wieder vorbei.

Ich werde mal nun nach jeder einzelnen LCD Schreibanweisung eine Pause setzen.

 

 

Link zu diesem Kommentar
Share on other sites

Noch ein Nachtrag.

Ich habe letzte Nacht mal eine reduzierte Version meines Programms laufen lassen und es funktioniert dennoch nicht.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package tinker_neu;

import com.tinkerforge.BrickletDualRelay;
import com.tinkerforge.IPConnection;
import com.tinkerforge.IPConnection.TimeoutException;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
*
* @author adrianbernhard
*/
public class Zeitschaltung {
    public static final String host = "192.168.2.114";
//    public static final String host = "localhost";
    public static final int port = 4223;
    public static final String UID4 = "7FJ";   // Doppel Relay //
    public static final double AnschaltzeitBeleuchtung1 = 9;
    public static final double AusschaltzeitBeleuchtung1 = 14;
    public static final double AnschaltzeitBeleuchtung2 = 17;
    public static final double AusschaltzeitBeleuchtung2 = 22.25;
    public static final double AnschaltzeitSekundär = 1.30;
    public static final double AusschaltzeitSekundär = 8.30;
public static void main (String args[]) throws IOException, TimeoutException, InterruptedException {
int a = 10;
while(a<15)
    {
        try{
            Zeitschaltung.schalten();
            }
        catch (TimeoutException e){
            System.out.println("Verbindungs Fehler/Tinker eingeschlafen");
            }
        Thread.sleep(60000);
    }

}
    
public static void schalten () throws IOException, TimeoutException {
    IPConnection ipcon = new IPConnection(host, port);
    BrickletDualRelay dr = new BrickletDualRelay (UID4);

    ipcon.addDevice(dr); 
    
    Calendar.getInstance();
    Date jetzt;
        jetzt = Calendar.getInstance(Locale.GERMAN).getTime();
        
    java.text.SimpleDateFormat sdf1;
        sdf1 = new java.text.SimpleDateFormat("HH.mm");
    
    double aktuelleZeit;
        aktuelleZeit = Double.parseDouble(sdf1.format(jetzt));
    
    boolean relay2;
        relay2 = dr.getState().relay2;     
        
    if (aktuelleZeit >= AnschaltzeitBeleuchtung1 & aktuelleZeit <= AusschaltzeitBeleuchtung1) 
            {
        dr.setState(true,relay2);
            }

    else if (aktuelleZeit >= AnschaltzeitBeleuchtung2 & aktuelleZeit <= AusschaltzeitBeleuchtung2) 
            {
        dr.setState(true,relay2);
            } 
                
    else 
            {
        dr.setState(false,relay2);
            }
                   
    boolean relay1;
        relay1 = dr.getState().relay1;
               
    if (aktuelleZeit > AnschaltzeitSekundär & aktuelleZeit < AusschaltzeitSekundär) 
            {
            dr.setState(relay1,true);
            }
    
    else 
            {
            dr.setState(relay1,false); 
            }      
}

}

Link zu diesem Kommentar
Share on other sites

Du hattest geschrieben, dass es nicht mit dem Schalten des Dual Relays zusammenhängt. Stimmt dies so?

 

Beim Schalten von Lasten können Störspitzen auftreten für die vll. auch der Varistor zu langsam ist. Befindet sich der Master in der nähe können die dort Probleme verursachen. Allerdings sollte dies sofort passieren. Dies ist leider ein bekanntes Problem, wir arbeiten an einer Lösung.

 

Falls dies wirklich nicht im Zusammenhang steht, dann wäre ich jetzt erstmal Ratlos. Sagt der Kernel-Log irgendetwas? Irgendwelche verschwindenen USB Geräte oder EMI Meldungen?

Link zu diesem Kommentar
Share on other sites

Moinsen.

 

also bei der ersten Softwareversion war ein file logger implementiert worin ich sehen konnte bis wann die Temperaturwerte gespeichert wurden. Dadurch konnte ich sehen, dass der Ausfall zeitlich nicht mit den Schalten der Lasten zusammen hing.

 

Daraufhin hab eine reduzierte Version nur zum Schalten geschrieben ohne den restlichen Schnickschnack. Um bzw. das LCD Modul auszuschließen.

 

Bei der Kontrolle der syslog ist mir jedoch aufgefallen, dass diesmal der Pi um 6.25 nicht mehr auf die Netzwerkschnittstelle zugreifen konnte.

 

Oct 12 06:25:53 raspberrypi kernel: [128068.549829] smsc95xx 1-1.1:1.0: eth0: Failed to read register index 0x00000114

 

Keine Ahnung ob das nun dazu führte, dass der Pi nicht mehr reagierte . D.h. nochmals laufen lass und abwarten.

 

Nachtrag 31.10:

Zur Zeit hängt es am Raspberry. Er verliert irgendwann die Netzwerkverbindung, ab da geht dann gar nichts mehr. Stundenlanges recherchieren hat mich nicht wirklich schlauer gemacht. Da immer davon die Rede ist dass die Geräte am USB zu viel Saft ziehen. Was ich aber ausschließe.

Nun habe ich mal den Fedora Remix RC2 (Vorher Rasbian) drauf gezogen und brickd, screen, und java installiert.

Schade, das es nicht stabil läuft.

Achja und ich benutze nicht mehr das DualRelay, stattdessen zwei Halbleiterrelais mit IO4.

 

 

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...