
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 |