Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Mein Programm zählt falsch Kategorie: Programmierung Basic (von Verzweiflung - 12.09.2004 16:13)
Servus an die C-control Gemeinde.
Wie so viele möchte ich hier mein Problem beschreiben und hoffe auf eine Hilfe von Euch.
Ich möchte mit meiner C-control Impulse zÀhlen und zwar zwei die auf die A/D ports reinkommen. Diese Impulse will ich dann zusammenzÀhlen und daraus den gewonnenen Solarstrom auf einem Display anzeigen.
dazu habe ich mir ein Display gebaut mit 10 LED Ziffern.
So nun zu meinem Problem: Mein Programm zĂ€hlt die Impulse, rechnet sie um in die Kilowattstunden (kwh) und gibt sie aus, einmal als Gesamtertrag (Kwh werden nur zusammengezĂ€hlt) und einmal den taeglichen Ertrag ( hier werden die Kwh jeden Tag gelöscht), mit einer Zehntel grĂ¶ĂŸeren Genauigkeit.
Im Simulator lÀuft das Programm immer genau ab.
In Zusammenhang mit der C-Control aber sind diese zwei Ausgaben unterschiedlich. Irgendwie verhaspelt sich der taegliche Ertrag immer mehr . obwohl er mit dem Gesamtertrag synchron laufen mĂŒĂŸte.

Das komische an der Sache ist, wenn ich die Ausgabe an das Display im Steuerteil laufen lasse und nicht ĂŒber output die Ausgabe mache, dann funzt es.

Ich möchte aber noch mehr dazu machen, was aber auch nicht mehr geht.

Kann mir jemand sagen was hier falsch lÀuft (hat es was mit dem gosub zu tun) oder was ich falsch mache.

Habe mein Programm zwar etwas zusammengefasst aber trotzdem komplett abgebildet, bei dem der Fehler auftritt
Jetzt mein Programm:

'ImpulszÀhler C-Control
'Allgemeine Vorgaben

' *** Variablen ***
define KWh word[1]
define MWh word[2]
define Impulse_GbR    word[3]
define tagertold word[5]
define Taegl_Ertrag      word[6]

define value_GbR byte[13] 'Hilfsvalue ist ein Zehntel der Impulse wegen
define lastminute byte[15]
define GbR byte[17]
define Kinz byte[18]

' *** Vorgabe Daten fĂŒr die Anzeige ***
KWh = 1000 '1xxx um Nullen am Display fĂŒr die KWh anzuzeigen
MWh = 60
Impulse_GbR =      0
value_GbR     = 0
GbR =   0
Tagertold =  0
Taegl_Ertrag  = 0 'wird jeden Tag neu gezĂ€hlt
hour =  19

' ***Konstanten ***
define ImpG 20  '20 Impulse pro KWh ZĂ€hler 1
define ImpK 40  '40 Impulse pro KWh ZĂ€hler 2;

' ***alternativ Application Board ***
define led_clk  port[14]
define led_en   port[15]
define led_data port[10]

' *** Systemadressen ***
define LEDVAL1 &H101 ' Ausgabe eines Wertes
define LEDVAL2 &H101 ' Ausgabe eines Wertes
define LEDVAL3 &H101 ' Ausgabe eines Wertes

' *** Initialisierungen  fĂŒr Ausgabe LED Display***
led_clk = 0
led_en = 0
led_data = 0

'*** Dateneinlese vor dem Start***
gosub Read_Data

'---------------------------------------
' *** zaehlen aller 0>1 Uebergaenge ***
'---------------------------------------

' *** Eingabe-Schalter *** Habe zwei Impulse die ich zÀhlen will
define GBR_Imp port[4] 'Impulse von GBR als 0 oder 1
define Kinz_Imp port[8] 'Impulse von Kinz als 0 oder 1

' *** Steuerteil ***
#zaehlbeginn

if GbR =0 then gosub zaehlen_a else gosub nicht_zaehlen_a

' *** Programm fĂŒr tĂ€glichen Ertrag ***
if value_GbR =ImpG/10  then gosub Taegl_Ertrag_Erhoehen_GbR

' *** Programm fĂŒr Gesamtertrag ***
if Impulse_GbR =Impg then gosub KWhImpulseErhoehen_GbR
if KWh >=2000  then gosub MWhImpulseErhoehen

'sind die nÀchsten Zeilen bis LED_En = off deaktiviert lÀuft die synchrone 'ZÀhlung schief

' *** LED Display Ausgabe ***
'led_en = on
'sys LEDVAL1 KWh, 0, 3
'sys LEDVAL2 mwh, 0, 3
'sys LEDVAL3 Taegl_Ertrag, 2, 4
'led_en = OFF

' *** Ausgabekriterium ***
If changed2 then gosub output
tagertold = Taegl_Ertrag

'*** Tageswechselreset***
If hour > 22 then taegl_Ertrag =0

goto zaehlbeginn
end

' *** Sprungadressen ***
#changed2
return tagertold <> Taegl_Ertrag

#Taegl_Ertrag_Erhoehen_GbR
Taegl_Ertrag = Taegl_Ertrag +1
value_GbR = value_GbR mod impg/10
return 'from subroutine Taegl_Ertrag_Erhoehen_GbR

#KWhImpulseErhoehen_GbR
KWh = KWh + 1
Impulse_GbR = Impulse_GbR mod impg
Return 'from subroutine KWhImpulseErhoehen

#MWhImpulseErhoehen
MWh = MWh + 1
KWh = KWh - 1000
return 'from subroutine MWhImpulseErhoehen

#zaehlen_a
if GBR_Imp = on then value_GbR = value_GbR +1
if GBR_Imp = on then gbr = 1
if GBR_Imp = on then impulse_GbR = impulse_GbR +1
return 'from subroutine zaehlen_a

#nicht_zaehlen_a
if GBR_Imp = off then gbr = 0
return 'from subroutine nicht_zaehlen_a


#output
' *** LED Display Ausgabe ***
led_en = on
sys LEDVAL1 KWh, 0, 3
sys LEDVAL2 mwh,        0, 3
sys LEDVAL3 Taegl_Ertrag,       2, 4
led_en = OFF
return

#Read_Data
open# for read
if eof then return
input# MWh ' Wert MWh aus EEprom holen
input# KWh ' Wert KWh aus EEprom holen
input# Impulse_Gbr ' Wert Impulse aus EEprom holen
close#
return 'from subroutine Read_Data

#Write_Data
if filefree then open# for write'wenn EEPROM voll Aufzeichnung stoppen sonst stĂŒrzt C-Control ab!
print# MWh ' Wert MWh ins EEprom schreiben
print# KWh ' Wert KWh ins EEprom schreiben
print# Impulse_GbR ' Wert Impulse ins EEprom schreiben
close#
return 'from subroutine Write_Data

' *** Applikations File laden ***
'syscode  "ledapbrd.s19"




 Antwort schreiben

Bisherige Antworten:

Re: Mein Programm zählt falsch (von Topmail - 13.09.2004 18:17)
Re: Mein Programm zählt falsch (von Achim - 12.09.2004 21:47)
    Re: Mein Programm zählt falsch (von Verzweiflung - 13.09.2004 18:17)
        Re: Mein Programm zählt falsch (von Achim - 14.09.2004 0:14)
            Re: Mein Programm zählt falsch (von Verzweiflung - 14.09.2004 11:16)