- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: Diagrammkurve korrekt darstellen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2008
    Ort
    Pohlheim
    Alter
    34
    Beiträge
    240

    Diagrammkurve korrekt darstellen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,

    ich habe vor an meine jetzige Zimmersteuerung noch ein Diagramm zu machen über den modulstrom meiner solaranlage über den ganzen Tag aufgenommen. So lese ich die Daten über meinen ADC ein. Das klappt auch wunderbar. Jetzt habe ich eingestellt, dass er alle 15 minuten diesen wert nehmen soll und in einer extra variable abspeichert. Wenn ich in das Menu des Diagramms gehe soll es dargestellt werden.

    hier nun die entsprechenden Ausschnitte aus dem Programm:


    Modulstrom = Getadc(6)
    Modulstrom2 = Modulstrom * 30
    Modulstrom2 = Modulstrom2 / 1024

    Modulstrom ist hierbei eine integer, modulstrom2 eine single. Den wert bekomme ich einem anderen Menu passend angezeigt.


    anschließend einer der vielen Bauteile mit denen der aktuelle wert gespeichert wird:


    If _hour = 7 And _min = 0 and _sec = 0 Then
    Modulstrom2 = Modulstrom2 * 5
    Modulstrom7uhr = 110 - Modulstrom2
    Else
    End If


    Mein Diagramm fängt bei pixel 110 in y richtung an. Deswegen wird die variable modulstrom7uhr auf den wert 110 als erstes geschrieben. Anschließend ziehe ich von den 110 den aktuellen Wert, multipliziert mit 5, ab.

    Dadurch wird die y richtung kleiner, sprich mein entsprechender balken oder was ich verwende müsste im display mit größer werdendem ADC Input nach oben gehen. Modulstrom7uhr ist übrigens eine integer.



    Zum ausgeben verwende ich den line befehl.

    Line(14 , Modulstrom7uhr) -(18 , Modulstrom7uhr15) , 255
    Line(18 , Modulstrom7uhr15) -(22 , Modulstrom7uhr30) , 255

    usw.

    Sobald ich aber nun eine zahl einlese während der entsprechenden uhrzeit, gehen die striche nach unten aus dem display raus?!?! und oben am ende aller linien in x richtung kommt die linie scheinbar in form von @-zeichen wieder rein und geht bis in die mitte. Je nach größe im ADC mal mehr mal weniger. Hab ich irgendwo einen denkfehler drin oder vertragen sich die vielen verschiedenen variablen nicht? wenn ich am anfang des programms z.b. die "modulstrom7uhr" variable und auch die anderen mit einem festen wert progge, funzt das diagramm prima.

    hilfe! =P

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Du musst immer vorsichtig sein, wenn du Berechnungen und Typumwandlungen in einen Befehl bringst. Z.B. hier
    Modulstrom2 = Modulstrom * 30 und hier
    Modulstrom7uhr = 110 - Modulstrom2

    Deine Y-Werte auf dem Display können doch bestimmt nur Byte Werte annehmen, also 0-255. Dann nimm auch keine Integer.

    Das hier
    If _hour = 7 And _min = 0 and _sec = 0 Then
    Modulstrom2 = Modulstrom2 * 5
    Modulstrom7uhr = 110 - Modulstrom2
    Else
    End If

    sieht mir so aus, als ob du für jeden 15-Minuten Wert eine Variable hast. Das geht mit Arrays viel einfacher und kompakter. Hast du mit Arrays schon mal gearbeitet?

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2008
    Ort
    Pohlheim
    Alter
    34
    Beiträge
    240
    hi,

    ich habe in der Tat für jede zeit (insgesamt 48 ) eine eigenen Variable. Arrays habe ich mir ehrlich gesagt noch nicht angeschaut.

    Modulstrom2 = Modulstrom * 30 funktioniert, da dieser wert wo anders ausgegeben wird, der passt.

    Bei den anderen bin ich mir wie gesagt unsicher.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Es mag zwar lästig zu schreiben sein, aber ich würde dies
    Modulstrom2 = Modulstrom * 30
    grundsätzlich immer so schreiben

    Modulstrom2 = Modulstrom
    Modulstrom2 = Modulstrom2 * 30

    um die Typwandlung und die Berechnung zu trennen. Es können sonst die tollsten Effekte auftreten.


    Array funktionieren so:

    Dim Modulstrom_array(48) as byte

    Dies erzeugt dir 48 Werte vom Type Byte, die hintereinander im SRAM liegen.
    Mit Modulstrom_array(1) sprichst du den ersten Wert, mit Modulstrom_array(2) den zweiten Wert usw. an.
    Wenn du jetzt genau zu den glatten 1/4-Stunden abspeichern willst, kannst du das so machen:

    Code:
    If _sec = 0 Then                                            'nur zu vollen Minute prüfen
       Viertel = _min Mod 15
       If Viertel = 0 Then                                      'nur wenn Minute glatt durch 15 teilbar
          Viertel = _hour * 60                                  '
          Viertel = Viertel + _min                              'dies berechnet die wievielte Minute am Tag ist
          Viertel = Viertel / 15                                'dies berechnet die wievielte Viertelstunde am Tag ist
          Viertel = Viertel + 1                                 'um 0.00 Uhr käme 0 heraus, Array Indexe beginnen aber bei 1
          Modulstrom_array(viertel) = Modulstrom                'aktuellen Wert von Modulstrom in Array an der entsprechenden Stelle abspeichern
       End If
    End If
    Anzeigen kannst du das ganze Diagramm mit einer kleinen Schleife:
    Code:
    Offset = 0                                                  'oder einen anderen Wert, wenn du nicht beim ersten Pixel ganz links anfängst
    I = 1
    Do
       X1 = I + Offset
       X2 = X1 + 4                                              'du gehst immer 4 Pixel weiter, richtig?
       Y1 = Modulstrom_array(i)                                 'dies ist der Anfangspunkt der Linie
       Incr I                                                   'nächstes Array Element
       Y2 = Modulstrom_array(i)                                 'dies ist dann der Endpunkt der Linie
       Line(x1 , Y1) -(x2 , Y2) , 255
    Loop Until I = 48
    Fertig.


    Edit: Ich habe noch einen Fehler behoben (das geht nicht: If _min Mod 15 = 0 Then...)

    Gruß

    Rolf

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2008
    Ort
    Pohlheim
    Alter
    34
    Beiträge
    240
    hi,

    danke erstmal. ich werde das mal testen.

    Gruß

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests