Einschalten einer Gluehbirne
-
Hey Leute,
habe ein Programm für die Uni welches ich leider nicht mehr zum Laufen krieg.
Es geht um eine Glühbirne. Weder Dev++ noch Visual krieg ich nicht hin
Das Programm ist aber schon fertig, kann mal bitte eben jemand schauen was für ein Fehler angezeigt wird ? Danke schonmal im Vorraus.#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>// Anfang Definition der beteiligten Elemente
FILE *datei;
double// Eigenschaften des Drahtes
l = 0.45, // Länge des Drahtes in m
r = 0.00002, // Radius des Drahtes in m
Ob, // Oberfläche Draht
A, // Querschnittsfläche des Drahtes
V, // Volumen des Drahtes
Rspe = 0.0000000528,// Spezifischer Wiederstand Wolfram in Ohm*m
Rhod = 19300, // Dichte von Wolfram in kg/m3
md, // Masse des Drahtes
Rd, // Wiederstand des Drahtes
Rel, // Elektrischer Wiederstand des Drahtes bei T
Rt, // Spezifische-elektrische Wiederstand des Drahtes in Abhängigkeit von der Temperatur
Rhalte=3.5, // Widerstand des Haltedrahtes und des Gehäuses
Tschmelz = 3695.15, // Schmelztemperatur des Drahtes in °K// Temperaturkonstanten/variablen
Tr = 293.15, // Raumtemperatur in K / Temperatur des Drahtes bei t=0
T, // Temperatur des Drahtes in Abhängigkeit von der Zeit
Tc, // Temperatur des Drahtes in Celsius
Td, // Temperaturdifferenz Raum-Draht in °C
Ter, // Erwärmung des Drahtes
alpha = 0.0041, // Linearer Temperaturkoeffizient in 1/°C
beta = 0.000001, // Linearer Temperaturkoeffizient in 1/°C
lambda = 163, // Wärmeleitfähigkeit Wolfram
c = 134, // spezifische Wärmekapazität Wolfram in J/(kg*°C)// Allgemeine Variablen / Konstanten
iterationen = 100000000, // Anzahl der maximalen Iterationen der Simulation
lambdamax, // Maximum der Strahlungsintensität in Nanometern
Ug = 230, // Spannung
U, // Spannung die am Draht anliegt in V
I, // Stromstärke die am Draht anliegt in A
f = 50, // Frequenz der Wechselspannung in Hz
P, // Leistung im Draht
Pg, // Aufgenommene Leistung Pgesamt
C, // Wärmekapazität
Bk = 0.000000056704, // Stefan-Boltzmann-Konstante
Pstr, // Strahlungsleistung des Drahtes
deltat = 0.000001, // Zeitschritt pro Iteration in Sekunden
epsilon, // Näherung des Gesamtemmisionsgrades
quiet = 0, // Nur Daten ausgeben, keine weiteren Informationen
stat = 1, // Stationäre Werte erreicht falls stat==0
Im, // Memory der Werte für stat()
statvar = 1.00000001, // Faktor um den P variieren darf um als stat. zu gelten
k=10, // Zähler für Wellenlaenge(), Startwert der Spannung/10 für UI-Diagramm//Längenänderung Draht
deltal, // Länge
deltar, // Radius
deltaT, // Temperatur
ausdkoeff = 0.0000045, // Ausdehnungskoeffizient
la, // Länge nach Ausdehnung
ra, // Radius nach Audehnung
t, // Zeitpunkt in Sekunden nach dem einschalten
// Ausgabevariablen
custom=0, // Kündigt eigene Ausgabe an:
uout=0, // Spannung U wird ausgegeben
iout=0, // Stromstärke I wird ausgegeben
lambdamaxout=0, // Wellenlänge mit max. Strahlungsintensität wird ausgegeben
pout, // Aufgenommene Leistung ausgeben
tout=0, // Temperatur in C° wird ausgegeben
wechselstrom=0, // Wird der Wechselstorm beachtet?
freq = 50,
timeout=0; // Laufzeit in s wurd ausgegeben
int type;
// Ende Definition der beteiligten Elemente// Anfang Mem Anfang Mem Anfang Mem Anfang Mem Anfang Mem Anfang Mem Anfang Mem
void Mem()
{
if (wechselstrom==1) // Falls mit Wechselstrom simuliert wird:
{
if (Ug == 325 ); // Es wird die Stromstärke bei der Maximalspannung verglichen,
{ Im = I;}
}
if (wechselstrom ==0)
Im= I; //
}
// Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem// Anfang Stationar Anfang Stationar Anfang Stationar Anfang Stationar Anfang Stationar
void Stationaer() // Überprüfung auf Stationäre Werte{
if (wechselstrom==0) // Ohne Wechselstrom:
{
if (I >= Im){
if(I<=Imstatvar){ stat = 0;}} // Hier wird bei jeder Iteration verglichen
else if (I <= Im){
if(Istatvar>=Im){ stat = 0;}}
}
else // Mit Wechselstrom:
{ if (Ug==325) // Hier wird nur bei der <Maximalspannung verglichen
{
if (I >= Im){
if(I<=Imstatvar){ stat = 0;}}
else if (I <= Im){
if(Istatvar>=Im){ stat = 0;}}
}
}
}
// Ende Stationaer Ende Stationaer Ende Stationaer Ende Stationaer Ende Stationaer// Anfang Wechselstrom Anfang Wechselstrom Anfang Wechselstrom Anfang Wechselstrom
void Wechselstrom()
{
Ug=325*sin((M_PI*t)/((1/freq))); // Simmuliet eine Sinusförmige Wechselspannung
}
// Ende Wechselstrom Ende Wechselstrom Ende Wechselstrom Ende Wechselstrom Ende Wechselstrom// Anfang Laengenaenderung Anfang Laengenaenderung Anfang Laengenaenderung Anfang Laengenaenderung
void Laengenaenderung() // Simuliert die Temperaturanhängige Ausdehnung des Drahtes
{
deltaT = T - Tr; // Temperaturdifferenz Draht - Raum
deltal = l*ausdkoeff*deltaT; // Längenänderung des Drahtes
deltar = r*ausdkoeff*deltaT; // Änderung des Drahtradius
la = l + deltal; // Drahtlänge nach Ausdehnung
ra = r + deltar; // Drahtradius nach Ausdehnung
Ob = 2*ra*M_PI*la; // Neue Oberfläche des Drahtes
}
// Ende Laengenaenderung Ende Laengenaenderung Ende Laengenaenderung Ende Laengenaenderung// Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe
void Farbe() // Beschreibt die Farbe mit der max. Strahlungsleistung
{
if (lambdamax > 780 && lambdamax < 1000000) printf("Infrarot\n");
else if (lambdamax > 0 && lambdamax <380) printf("Ultraviolett\n");
else if (lambdamax > 380 && lambdamax <450) printf("der Farbe Pupurblau\n");
else if (lambdamax > 450 && lambdamax <482) printf("der Farbe Blau\n");
else if (lambdamax > 482 && lambdamax <487) printf("der Farbe Grünlich-Blau\n");
else if (lambdamax > 487 && lambdamax <492) printf("der Farbe Cyan\n");
else if (lambdamax > 492 && lambdamax <497) printf("der Farbe Bläulich-Grün\n");
else if (lambdamax > 497 && lambdamax <530) printf("der Farbe Grün\n");
else if (lambdamax > 530 && lambdamax <560) printf("der Farbe Gelblich-Grün\n");
else if (lambdamax > 560 && lambdamax <570) printf("der Farbe Gelb-Grün\n");
else if (lambdamax > 570 && lambdamax <575) printf("der Farbe Grünlich-Gelb\n");
else if (lambdamax > 575 && lambdamax <580) printf("der Farbe Gelb\n");
else if (lambdamax > 580 && lambdamax <585) printf("der Farbe Gelblich-Orange\n");
else if (lambdamax > 585 && lambdamax <595) printf("der Farbe Orange\n");
else if (lambdamax > 595 && lambdamax <620) printf("der Farbe Rötlich-Orange\n");
else if (lambdamax > 620 && lambdamax <780) printf("der Farbe Rot\n");
}
// Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe// Anfang Konstantenberechnung Anfang Konstantenberechnung Anfang Konstantenberechnung
void Konstantenberechnung()
{// Hier werden die im Laufe der Rechnung benoetigten Konstanten berechnet
T = Tr; // T Temperatur des Drahtes ist Raumtemperatur Tr
A = r*r*M_PI; // Querschnittflaeche des Drahtes
V = Al; // Volumen des Drahtes
Ob = 2*r*M_PIl; // Oberfläche des Drahtes
md = VRhod; // Masse des Drahtes
//Rel = (Rspel)/A; // elektrischer Widerstand des Drahtes
Rel = 58.5; // Widerstand laut Osram
C = c*md; // Wärmekapazität
t=0;
if (quiet == 0)printf(" Oberfläche %9.8fm² Gewicht %10.9fkg Rel %10.8fOhm C%10.9f\n" ,Ob,md,Rel,C);
}
// Ende Konstantenberechnung Anfang Konstantenberechnung Anfang Konstantenberechnung// Anfang Berechnung Anfang Berechnung Anfang Berechnung Anfang Berechnung
void Berechnung() // Anfang: Berechnung eines Zeitabschnittes
{
if (wechselstrom==1) Wechselstrom();
Laengenaenderung(); // Beachten der Temperaturabhängigen Ausdehnung des Glühdrahtes
Td = T - 293.15; // Temperaturdifferenz Draht-Raumtemperatur//Elektrische Eigenschaften-----------------
Rt = Rel*(1+alpha*(Td)+betapow(Td,2)); // Spezifische-elektrische Wiederstand des Drahtes
U = Ug - (Ug * Rhalte / (Rhalte + Rt)); // Spannung die am Glühdraht anliegt, //Haltedrahtwiderstand subtr.
P =0.98((U*U)/Rt); // Aufgenommene Leistung
I = U / Rt; // Stromstaerke I wird berechnet
Pg= U * I; // vom Draht aufgenommene Leistung//Gesamtemissionsgrad-----------------------------------
//epsilon = 0.05 + ((0.39/3300)*(T-273.153)); // Gesamtemissionsgrad linear
Tc = T - 273.15; // Temperatur von Kelvin in Celsius umrechnen
epsilon = -1*pow(10, -8)*Tc*Tc +0.0002*Tc + 0.0235; // Gesamtemissionsgrad polynomisch
if (epsilon > 0.39) // Lineare Naeherung mit 0.39 als Obergrenze
epsilon=0.39;//Strahlung----------------------------------------------
Pstr = (pow(T,4)*Bk*Obepsilon); // Strahlungsleistung nach Stefan-Boltzmann-Gesetz
P = P-Pstr; // Summe der Leistungsaufnahme/abgabe
lambdamax = 2897800 / T; // Wiensches Verschiebungsgesetz
Ter = (Pdeltat)/C; // Ter = Erwärmung des Drahtes
T = T + Ter; // Aktualisierung der Drahttemperatur
t = t + deltat; // Aktualisierung der Laufzeit}
// Ende Berechnung Ende Berechnung Ende Berechnung Ende Berechnung Ende Berechnung// Anfang Datenausgabe Anfang Datenausgabe Anfang Datenausgabe Anfang Datenausgabe
void DatenausgabeSim() // Für "Simulation()"
{
datei = fopen ("Simulation.dat", "a"); // Öffnen der Zeildatei
if (datei != NULL) // Falls fehlerfrei
if (quiet == 1) // Ausgabe ohne Einheiten
{
printf(" %8.3f %10.8f %10.9f %7.2f %8.6f\n"
,Pg,I,T-273.15,Pstr,t); // Ausgabe in der Console, ohne Einheiten
fprintf (datei," %8.3f %5.2f %10.9f %7.2f %8.6f\n"
,Pg,I,T-273.15,Pstr,t); // Hinzufügen einer Zeile, ohne Einheiten
}
else // Ausgabe mit Einheiten
{
printf(" P %15.10fW I %10.8fA T %8.2f°C Strahll. %7.2fW t %8.6fs\n"
,Pg,I,T-273.15,Pstr,t); // Ausgabe in der Console, mit Einheiten
fprintf (datei, " P %10.3fW I %5.2fA T %8.2f°C Strahll. %7.2fW t %8.6fs\n"
,Pg,I,T-273.15,Pstr,t);// Hinzufügen einer Zeile, mit Einheiten
}
fclose (datei); // Schließen der Zieldatei
}void DatenausgabeUID() // Für UIDiagramm
{
datei = fopen ("UIDiagramm.dat", "a"); // Öffnen der Zeildatei
if (datei != NULL) // Falls fehlerfrei
if (quiet == 1) // Falls keine Einheuten ausgegeben werden sollen
{
fprintf (datei, "%5.1f %6.5f\n" ,Ug,I); // Hinzufügen einer Zeile, ohne Einheiten
printf("%5.1f %6.5f\n" ,Ug,I); // Ausgabe in der Console, ohne Einheiten
}
else // Falls Einheiten mit ausgegeben werden sollen
{
fprintf (datei, "%5.1fV %6.5fA\n" ,Ug,I); // Hinzufügen einer Zeile, ohne Einheiten
printf("%5.1fV %6.5fA\n" ,Ug,I); // Ausgabe in der Console, ohne Einheiten
}
fclose (datei); // Schließen der Zieldatei
}
// Ende Datenausgabe Ende Datenausgabe Ende Datenausgabe Ende Datenausgabe Ende Datenausgabe// Anfang Customout Anfang Customout Anfang Customout Anfang Customout Anfang Customout
void Customout() // Falls eine eigene Ausgabe gewünscht ist, wird diese hier entsprechend den Parametern erstellt
{
if (quiet == 0) // Einheiten werden ausgegeben
{
if (timeout==1){ printf ("%8.6fs ",t); fprintf (datei, "%8.6fs " ,t);} // Laufzeit
if (uout==1){ printf ("%5.1fV ",Ug); fprintf (datei, "%5.1fV " ,Ug);} // Spannung
if (iout==1){ printf ("%6.4fA ",I); fprintf (datei, "%6.4fA " ,I);} // Stromstärke
if (pout==1){ printf ("%6.4fW ",Pg); fprintf (datei, "%6.4f " ,Pg);} // Aufgenommene
//Leistung gesamt
if (lambdamaxout==1){ printf ("%5.1fnm ",lambdamax); fprintf (datei, "%5.1fnm " ,lambdamax);} // Wellenlänge mit max. Strahlungsleistung
if (tout==1){ printf ("%6.2f°C ",T-273.15); fprintf (datei, "%5.1f°C " ,T-273.15);}
// Temperatur in °C
printf ("\n"); fprintf (datei, "\n"); // Zeilenumbruch
fclose (datei);
}
else // Einheiten werden nicht ausgegeben
{
if (timeout==1){ printf ("%8.6f ",t); fprintf (datei, "%8.6f " ,t);} // Laufzeit
if (uout==1){ printf ("%5.1f ",Ug); fprintf (datei, "%5.1f " ,Ug);} // Spannung
if (iout==1){ printf ("%6.4f ",I); fprintf (datei, "%6.4f " ,I);} // Stromstärke
if (pout==1){ printf ("%6.4f ",Pg); fprintf (datei, "%6.4f " ,Pg);} // Aufgenommene // Leistung gesamt
if (lambdamaxout==1){ printf ("%5.1f ",lambdamax); fprintf (datei, "%5.1f" ,lambdamax);} // Wellenlänge mit max. Strahlungsleistung
if (tout==1){ printf ("%6.2f",T-273.15); fprintf (datei, "%6.2f " ,T-273.15);}
// Temperatur in °C
printf ("\n"); fprintf (datei, "\n"); // Zeilenumbruch
fclose (datei);
}
}
// Ende Customout Ende Customout Ende Customout Ende Customout Ende Customout// Anfang Simulation Anfang Simulation Anfang Simulation Anfang Simulation Anfang Simulation
{
Konstantenberechnung();
int i;
for (i=0; i<iterationen*stat; i++) // Iteriert bis stationäre Werte erreicht sind
{
Mem(); // Speichert die Momentane Stromstärke um sie mit der nächsten zu vergleichen
Berechnung(); // Eigentliche Berechnung der Lampe
if (custom == 1) // Falls eigene Ausgabe gewünscht ist
{
datei = fopen ("Simulation.dat", "a");
Customout(); // Eigene Ausgabe
}
else if (custom == 0) // Ansonsten Standartausgabe
DatenausgabeSim(); // Gibt die Werte aus
Stationaer(); // Vergleicht die Werte aus Mem() mit den aktuellen
if (stat == 1 && i == iterationen-1) // Falls keine Stationären Werte erreicht werden und alle
// Schleifen durchgelaufen sind
printf(" Ende der Schleife\n Keine Stationären Werte erreicht\n");
}
if (quiet == 0)
{
if (T > Tschmelz) printf("Die Drahttemperatur überschreitet denn Schmelzpunkt. Der Draht versagt!\n");
printf ("Stationäre Werte erreicht bei %7.6fs, Änderung P < 0.01promille\n",t);
printf("Maximale Strahlungsleistung bei %8.6fnm, das entspricht " ,lambdamax);
Farbe(); printf("\n");}
}
// Ende Simulation Ende Simulation Ende Simulation Ende Simulation Ende Simulation Ende Simulation// Anfang UIDiagramm Anfang UIDiagramm Anfang UIDiagramm Anfang UIDiagramm Anfang UIDiagramm
void UIDiagramm()
{int i;
if(quiet == 0) printf("UIDiagramm Start\n");
Konstantenberechnung();
datei = fopen ("UIDiagramm.dat", "a");
if (datei != NULL)
for (k; k<2301; k++) // Intervall für das die stationären Werte berechnet werden{
Ug=k*0.1; // 0.1V Schritte
if (timeout==1) // Nur falls die Zeit bis zur Stationärität benötigt wird
{ // Andernfalls wird so die Rechenzeit verkürzt
T = Tr; // Widerherstellung der Ausgangswerte: Draht hat Raumtemperatur
Ob = 2*r*M_PIl; // Oberfläche des Drahtes, Längenänderung zurücknehmen
t = 0; // Laufzeit auf 0
}
for (i=0; i<iterationenstat; i++) // Widerholen bis stat. Werte erreicht sind
{
Mem(); // Speichert die Momentane Stromstärke um sie mit der nächsten zu vergleichen
Berechnung(); // Eigentliche Berechnung der Lampe
Stationaer(); // Vergleicht die Werte aus Mem() mit den aktuellen
}
stat=1; // stationär wider "unwahr" setzen{
if (custom == 1) // Eigene Ausgabe
{
datei = fopen ("UIDiagramm.dat", "a");
Customout();
}
else if (custom == 0) // Standart Ausgabe
{
DatenausgabeUID();}
}
}
if(quiet == 0) printf("UIDiagramm Ende\n" ); // Statusmeldung
}// Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm
// Anfang main Anfang main Anfang main Anfang main Anfang main Anfang main Anfang main
int main(int argc,char* argv[])
{
int gueltig=1; // Parameter für gültige Eingabe
int i = 1;
if (argc == 1) printf("Kein Parameter übergeben.\nDas Programm wurde beendet. \nSiehe Bericht: '5.Programmaufruf'."); // Falls kein Parameter übergeben wird
for(; i < argc*gueltig; ++i) // Überprüfung der Parameter, bis ein ungültiger auftritt
{
if (!strcmp( argv[i], "quiet" )) // Nur Daten werden ausgegeben,
quiet = 1; // Keine Einheiten/Statusmeldungelse if (!strcmp( argv[i], "U" )) // Spannung U ausgeben
{
custom = 1; // Benutzerdefienierte Ausgabe
uout = 1;
}
else if (!strcmp( argv[i], "I" )) // Stromstärke I ausgeben
{
custom = 1; // Benutzerdefienierte Ausgabe
iout = 1;
}
else if (!strcmp( argv[i], "L" )) // Gibt Wellenlänge mit maximaler
{ // Strahlungsleistung aus
custom = 1; // Benutzerdefienierte Ausgabe
lambdamaxout = 1;
}
else if (!strcmp( argv[i], "T" )) // Gibt die Temperatur in Grad Celsius aus
{
custom = 1; // Benutzerdefienierte Ausgabe
tout = 1;
}
else if (!strcmp( argv[i], "P" )) // GIbt die aufgenommene Leistung aus
{
custom = 1; // Benutzerdefienierte Ausgabe
pout = 1;
}
else if (!strcmp( argv[i], "speed" )) // Beschleunigt den Iterationsvorgang zu
{ // Lasten der Ergebnisse
statvar = ((statvar-1)*10)+1;
k = k+100; // Erhöht Anfang des UIDiagramms um 10V
}else if (!strcmp( argv[i], "Z" )) // Gibt die Laufzeit aus
{
timeout = 1;
custom = 1; // Benutzerdefienierte Ausgabe
}
else if (!strcmp( argv[i], "wechsel" ))// Simuliert mit Wechselspannung
{
wechselstrom = 1;
statvar = 1.0001; // Verringert nötige Genauiggkeit
}else if (!strcmp( argv[i], "S" ))
{
FILE *datei; // Erstellen bzw überschreiben des Textdokumentes
datei = fopen ("Simulation.dat", "w");
if (datei != NULL)
fprintf (datei, "");
fclose (datei);
Simulation(); // Eigentliche Berechnung
}else if (!strcmp( argv[i], "W" ))
{
FILE *datei; // Erstellen bzw überschreiben des Textdokumentes
datei = fopen ("UIDiagramm.dat", "w");
if (datei != NULL)
fprintf (datei, "");
fclose (datei);
UIDiagramm(); // Eigentliche Berechnung}
else // Ungültige Parameter abfangen
{
printf("Ungültiger Parameter '%s'\nDas Programm wurde beendet."
"\nBitte verwenden Sie nur gültige Parameter.",argv[i]);
gueltig=0; // Stoppt das Programm
}
}
return 0;
}
// Ende Main Ende Main Ende Main Ende Main Ende Main Ende Main Ende Main Ende Main
// Ende des Programms
-
Es fehlen die cpp-tags.
Was genau ist dein Problem?
Übersetzen lässt sich das Program so nicht...
-
agent60 schrieb:
// Ende Main Ende Main Ende Main Ende Main Ende Main Ende Main Ende Main Ende Main
LOL
-
Also ich hab das ganze nicht selber geschrieben. Könnte ich auch nicht, weil ich absoluter Anfänger bin.
Was genau muss ich denn machen um die Konsole hier jetzt anzubekommen
Weiss nämlich nicht was ich mit der Aussage über cpp.tags anfangen soll.Wäre echt nett wenn ihr mir eben helfen könnt.
-
Du sollst die cpp tags benutzen, damit dein Code halbwegs lesbar wird:
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <stdio.h> // Anfang Definition der beteiligten Elemente FILE *datei; double // Eigenschaften des Drahtes l = 0.45, // Länge des Drahtes in m r = 0.00002, // Radius des Drahtes in m Ob, // Oberfläche Draht A, // Querschnittsfläche des Drahtes V, // Volumen des Drahtes Rspe = 0.0000000528,// Spezifischer Wiederstand Wolfram in Ohm*m Rhod = 19300, // Dichte von Wolfram in kg/m3 md, // Masse des Drahtes Rd, // Wiederstand des Drahtes Rel, // Elektrischer Wiederstand des Drahtes bei T Rt, // Spezifische-elektrische Wiederstand des Drahtes in Abhängigkeit von der Temperatur Rhalte=3.5, // Widerstand des Haltedrahtes und des Gehäuses Tschmelz = 3695.15, // Schmelztemperatur des Drahtes in °K // Temperaturkonstanten/variablen Tr = 293.15, // Raumtemperatur in K / Temperatur des Drahtes bei t=0 T, // Temperatur des Drahtes in Abhängigkeit von der Zeit Tc, // Temperatur des Drahtes in Celsius Td, // Temperaturdifferenz Raum-Draht in °C Ter, // Erwärmung des Drahtes alpha = 0.0041, // Linearer Temperaturkoeffizient in 1/°C beta = 0.000001, // Linearer Temperaturkoeffizient in 1/°C lambda = 163, // Wärmeleitfähigkeit Wolfram c = 134, // spezifische Wärmekapazität Wolfram in J/(kg*°C) // Allgemeine Variablen / Konstanten iterationen = 100000000, // Anzahl der maximalen Iterationen der Simulation lambdamax, // Maximum der Strahlungsintensität in Nanometern Ug = 230, // Spannung U, // Spannung die am Draht anliegt in V I, // Stromstärke die am Draht anliegt in A f = 50, // Frequenz der Wechselspannung in Hz P, // Leistung im Draht Pg, // Aufgenommene Leistung Pgesamt C, // Wärmekapazität Bk = 0.000000056704, // Stefan-Boltzmann-Konstante Pstr, // Strahlungsleistung des Drahtes deltat = 0.000001, // Zeitschritt pro Iteration in Sekunden epsilon, // Näherung des Gesamtemmisionsgrades quiet = 0, // Nur Daten ausgeben, keine weiteren Informationen stat = 1, // Stationäre Werte erreicht falls stat==0 Im, // Memory der Werte für stat() statvar = 1.00000001, // Faktor um den P variieren darf um als stat. zu gelten k=10, // Zähler für Wellenlaenge(), Startwert der Spannung/10 für UI-Diagramm //Längenänderung Draht deltal, // Länge deltar, // Radius deltaT, // Temperatur ausdkoeff = 0.0000045, // Ausdehnungskoeffizient la, // Länge nach Ausdehnung ra, // Radius nach Audehnung t, // Zeitpunkt in Sekunden nach dem einschalten // Ausgabevariablen custom=0, // Kündigt eigene Ausgabe an: uout=0, // Spannung U wird ausgegeben iout=0, // Stromstärke I wird ausgegeben lambdamaxout=0, // Wellenlänge mit max. Strahlungsintensität wird ausgegeben pout, // Aufgenommene Leistung ausgeben tout=0, // Temperatur in C° wird ausgegeben wechselstrom=0, // Wird der Wechselstorm beachtet? freq = 50, timeout=0; // Laufzeit in s wurd ausgegeben int type; // Ende Definition der beteiligten Elemente // Anfang Mem Anfang Mem Anfang Mem Anfang Mem Anfang Mem Anfang Mem Anfang Mem void Mem() { if (wechselstrom==1) // Falls mit Wechselstrom simuliert wird: { if (Ug == 325 ); // Es wird die Stromstärke bei der Maximalspannung verglichen, { Im = I;} } if (wechselstrom ==0) Im= I; // } // Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem Ende Mem // Anfang Stationar Anfang Stationar Anfang Stationar Anfang Stationar Anfang Stationar void Stationaer() // Überprüfung auf Stationäre Werte { if (wechselstrom==0) // Ohne Wechselstrom: { if (I >= Im){ if(I<=Im*statvar){ stat = 0;}} // Hier wird bei jeder Iteration verglichen else if (I <= Im){ if(I*statvar>=Im){ stat = 0;}} } else // Mit Wechselstrom: { if (Ug==325) // Hier wird nur bei der <Maximalspannung verglichen { if (I >= Im){ if(I<=Im*statvar){ stat = 0;}} else if (I <= Im){ if(I*statvar>=Im){ stat = 0;}} } } } // Ende Stationaer Ende Stationaer Ende Stationaer Ende Stationaer Ende Stationaer // Anfang Wechselstrom Anfang Wechselstrom Anfang Wechselstrom Anfang Wechselstrom void Wechselstrom() { Ug=325*sin((M_PI*t)/((1/freq))); // Simmuliet eine Sinusförmige Wechselspannung } // Ende Wechselstrom Ende Wechselstrom Ende Wechselstrom Ende Wechselstrom Ende Wechselstrom // Anfang Laengenaenderung Anfang Laengenaenderung Anfang Laengenaenderung Anfang Laengenaenderung void Laengenaenderung() // Simuliert die Temperaturanhängige Ausdehnung des Drahtes { deltaT = T - Tr; // Temperaturdifferenz Draht - Raum deltal = l*ausdkoeff*deltaT; // Längenänderung des Drahtes deltar = r*ausdkoeff*deltaT; // Änderung des Drahtradius la = l + deltal; // Drahtlänge nach Ausdehnung ra = r + deltar; // Drahtradius nach Ausdehnung Ob = 2*ra*M_PI*la; // Neue Oberfläche des Drahtes } // Ende Laengenaenderung Ende Laengenaenderung Ende Laengenaenderung Ende Laengenaenderung // Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe Anfang Farbe void Farbe() // Beschreibt die Farbe mit der max. Strahlungsleistung { if (lambdamax > 780 && lambdamax < 1000000) printf("Infrarot\n"); else if (lambdamax > 0 && lambdamax <380) printf("Ultraviolett\n"); else if (lambdamax > 380 && lambdamax <450) printf("der Farbe Pupurblau\n"); else if (lambdamax > 450 && lambdamax <482) printf("der Farbe Blau\n"); else if (lambdamax > 482 && lambdamax <487) printf("der Farbe Grünlich-Blau\n"); else if (lambdamax > 487 && lambdamax <492) printf("der Farbe Cyan\n"); else if (lambdamax > 492 && lambdamax <497) printf("der Farbe Bläulich-Grün\n"); else if (lambdamax > 497 && lambdamax <530) printf("der Farbe Grün\n"); else if (lambdamax > 530 && lambdamax <560) printf("der Farbe Gelblich-Grün\n"); else if (lambdamax > 560 && lambdamax <570) printf("der Farbe Gelb-Grün\n"); else if (lambdamax > 570 && lambdamax <575) printf("der Farbe Grünlich-Gelb\n"); else if (lambdamax > 575 && lambdamax <580) printf("der Farbe Gelb\n"); else if (lambdamax > 580 && lambdamax <585) printf("der Farbe Gelblich-Orange\n"); else if (lambdamax > 585 && lambdamax <595) printf("der Farbe Orange\n"); else if (lambdamax > 595 && lambdamax <620) printf("der Farbe Rötlich-Orange\n"); else if (lambdamax > 620 && lambdamax <780) printf("der Farbe Rot\n"); } // Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe Ende Farbe // Anfang Konstantenberechnung Anfang Konstantenberechnung Anfang Konstantenberechnung void Konstantenberechnung() {// Hier werden die im Laufe der Rechnung benoetigten Konstanten berechnet T = Tr; // T Temperatur des Drahtes ist Raumtemperatur Tr A = r*r*M_PI; // Querschnittflaeche des Drahtes V = A*l; // Volumen des Drahtes Ob = 2*r*M_PI*l; // Oberfläche des Drahtes md = V*Rhod; // Masse des Drahtes //Rel = (Rspe*l)/A; // elektrischer Widerstand des Drahtes Rel = 58.5; // Widerstand laut Osram C = c*md; // Wärmekapazität t=0; if (quiet == 0)printf(" Oberfläche %9.8fm² Gewicht %10.9fkg Rel %10.8fOhm C%10.9f\n" ,Ob,md,Rel,C); } // Ende Konstantenberechnung Anfang Konstantenberechnung Anfang Konstantenberechnung // Anfang Berechnung Anfang Berechnung Anfang Berechnung Anfang Berechnung void Berechnung() // Anfang: Berechnung eines Zeitabschnittes { if (wechselstrom==1) Wechselstrom(); Laengenaenderung(); // Beachten der Temperaturabhängigen Ausdehnung des Glühdrahtes Td = T - 293.15; // Temperaturdifferenz Draht-Raumtemperatur //Elektrische Eigenschaften----------------- Rt = Rel*(1+alpha*(Td)+beta*pow(Td,2)); // Spezifische-elektrische Wiederstand des Drahtes U = Ug - (Ug * Rhalte / (Rhalte + Rt)); // Spannung die am Glühdraht anliegt, //Haltedrahtwiderstand subtr. P =0.98*((U*U)/Rt); // Aufgenommene Leistung I = U / Rt; // Stromstaerke I wird berechnet Pg= U * I; // vom Draht aufgenommene Leistung //Gesamtemissionsgrad----------------------------------- //epsilon = 0.05 + ((0.39/3300)*(T-273.153)); // Gesamtemissionsgrad linear Tc = T - 273.15; // Temperatur von Kelvin in Celsius umrechnen epsilon = -1*pow(10, -8)*Tc*Tc +0.0002*Tc + 0.0235; // Gesamtemissionsgrad polynomisch if (epsilon > 0.39) // Lineare Naeherung mit 0.39 als Obergrenze epsilon=0.39; //Strahlung---------------------------------------------- Pstr = (pow(T,4)*Bk*Ob*epsilon); // Strahlungsleistung nach Stefan-Boltzmann-Gesetz P = P-Pstr; // Summe der Leistungsaufnahme/abgabe lambdamax = 2897800 / T; // Wiensches Verschiebungsgesetz Ter = (P*deltat)/C; // Ter = Erwärmung des Drahtes T = T + Ter; // Aktualisierung der Drahttemperatur t = t + deltat; // Aktualisierung der Laufzeit } // Ende Berechnung Ende Berechnung Ende Berechnung Ende Berechnung Ende Berechnung // Anfang Datenausgabe Anfang Datenausgabe Anfang Datenausgabe Anfang Datenausgabe void DatenausgabeSim() // Für "Simulation()" { datei = fopen ("Simulation.dat", "a"); // Öffnen der Zeildatei if (datei != NULL) // Falls fehlerfrei if (quiet == 1) // Ausgabe ohne Einheiten { printf(" %8.3f %10.8f %10.9f %7.2f %8.6f\n" ,Pg,I,T-273.15,Pstr,t); // Ausgabe in der Console, ohne Einheiten fprintf (datei," %8.3f %5.2f %10.9f %7.2f %8.6f\n" ,Pg,I,T-273.15,Pstr,t); // Hinzufügen einer Zeile, ohne Einheiten } else // Ausgabe mit Einheiten { printf(" P %15.10fW I %10.8fA T %8.2f°C Strahll. %7.2fW t %8.6fs\n" ,Pg,I,T-273.15,Pstr,t); // Ausgabe in der Console, mit Einheiten fprintf (datei, " P %10.3fW I %5.2fA T %8.2f°C Strahll. %7.2fW t %8.6fs\n" ,Pg,I,T-273.15,Pstr,t);// Hinzufügen einer Zeile, mit Einheiten } fclose (datei); // Schließen der Zieldatei } void DatenausgabeUID() // Für UIDiagramm { datei = fopen ("UIDiagramm.dat", "a"); // Öffnen der Zeildatei if (datei != NULL) // Falls fehlerfrei if (quiet == 1) // Falls keine Einheuten ausgegeben werden sollen { fprintf (datei, "%5.1f %6.5f\n" ,Ug,I); // Hinzufügen einer Zeile, ohne Einheiten printf("%5.1f %6.5f\n" ,Ug,I); // Ausgabe in der Console, ohne Einheiten } else // Falls Einheiten mit ausgegeben werden sollen { fprintf (datei, "%5.1fV %6.5fA\n" ,Ug,I); // Hinzufügen einer Zeile, ohne Einheiten printf("%5.1fV %6.5fA\n" ,Ug,I); // Ausgabe in der Console, ohne Einheiten } fclose (datei); // Schließen der Zieldatei } // Ende Datenausgabe Ende Datenausgabe Ende Datenausgabe Ende Datenausgabe Ende Datenausgabe // Anfang Customout Anfang Customout Anfang Customout Anfang Customout Anfang Customout void Customout() // Falls eine eigene Ausgabe gewünscht ist, wird diese hier entsprechend den Parametern erstellt { if (quiet == 0) // Einheiten werden ausgegeben { if (timeout==1){ printf ("%8.6fs ",t); fprintf (datei, "%8.6fs " ,t);} // Laufzeit if (uout==1){ printf ("%5.1fV ",Ug); fprintf (datei, "%5.1fV " ,Ug);} // Spannung if (iout==1){ printf ("%6.4fA ",I); fprintf (datei, "%6.4fA " ,I);} // Stromstärke if (pout==1){ printf ("%6.4fW ",Pg); fprintf (datei, "%6.4f " ,Pg);} // Aufgenommene //Leistung gesamt if (lambdamaxout==1){ printf ("%5.1fnm ",lambdamax); fprintf (datei, "%5.1fnm " ,lambdamax);} // Wellenlänge mit max. Strahlungsleistung if (tout==1){ printf ("%6.2f°C ",T-273.15); fprintf (datei, "%5.1f°C " ,T-273.15);} // Temperatur in °C printf ("\n"); fprintf (datei, "\n"); // Zeilenumbruch fclose (datei); } else // Einheiten werden nicht ausgegeben { if (timeout==1){ printf ("%8.6f ",t); fprintf (datei, "%8.6f " ,t);} // Laufzeit if (uout==1){ printf ("%5.1f ",Ug); fprintf (datei, "%5.1f " ,Ug);} // Spannung if (iout==1){ printf ("%6.4f ",I); fprintf (datei, "%6.4f " ,I);} // Stromstärke if (pout==1){ printf ("%6.4f ",Pg); fprintf (datei, "%6.4f " ,Pg);} // Aufgenommene // Leistung gesamt if (lambdamaxout==1){ printf ("%5.1f ",lambdamax); fprintf (datei, "%5.1f" ,lambdamax);} // Wellenlänge mit max. Strahlungsleistung if (tout==1){ printf ("%6.2f",T-273.15); fprintf (datei, "%6.2f " ,T-273.15);} // Temperatur in °C printf ("\n"); fprintf (datei, "\n"); // Zeilenumbruch fclose (datei); } } // Ende Customout Ende Customout Ende Customout Ende Customout Ende Customout // Anfang Simulation Anfang Simulation Anfang Simulation Anfang Simulation Anfang Simulation { Konstantenberechnung(); int i; for (i=0; i<iterationen*stat; i++) // Iteriert bis stationäre Werte erreicht sind { Mem(); // Speichert die Momentane Stromstärke um sie mit der nächsten zu vergleichen Berechnung(); // Eigentliche Berechnung der Lampe if (custom == 1) // Falls eigene Ausgabe gewünscht ist { datei = fopen ("Simulation.dat", "a"); Customout(); // Eigene Ausgabe } else if (custom == 0) // Ansonsten Standartausgabe DatenausgabeSim(); // Gibt die Werte aus Stationaer(); // Vergleicht die Werte aus Mem() mit den aktuellen if (stat == 1 && i == iterationen-1) // Falls keine Stationären Werte erreicht werden und alle // Schleifen durchgelaufen sind printf(" Ende der Schleife\n Keine Stationären Werte erreicht\n"); } if (quiet == 0) { if (T > Tschmelz) printf("Die Drahttemperatur überschreitet denn Schmelzpunkt. Der Draht versagt!\n"); printf ("Stationäre Werte erreicht bei %7.6fs, Änderung P < 0.01promille\n",t); printf("Maximale Strahlungsleistung bei %8.6fnm, das entspricht " ,lambdamax); Farbe(); printf("\n"); } } // Ende Simulation Ende Simulation Ende Simulation Ende Simulation Ende Simulation Ende Simulation // Anfang UIDiagramm Anfang UIDiagramm Anfang UIDiagramm Anfang UIDiagramm Anfang UIDiagramm void UIDiagramm() { int i; if(quiet == 0) printf("UIDiagramm Start\n"); Konstantenberechnung(); datei = fopen ("UIDiagramm.dat", "a"); if (datei != NULL) for (k; k<2301; k++) // Intervall für das die stationären Werte berechnet werden { Ug=k*0.1; // 0.1V Schritte if (timeout==1) // Nur falls die Zeit bis zur Stationärität benötigt wird { // Andernfalls wird so die Rechenzeit verkürzt T = Tr; // Widerherstellung der Ausgangswerte: Draht hat Raumtemperatur Ob = 2*r*M_PI*l; // Oberfläche des Drahtes, Längenänderung zurücknehmen t = 0; // Laufzeit auf 0 } for (i=0; i<iterationen*stat; i++) // Widerholen bis stat. Werte erreicht sind { Mem(); // Speichert die Momentane Stromstärke um sie mit der nächsten zu vergleichen Berechnung(); // Eigentliche Berechnung der Lampe Stationaer(); // Vergleicht die Werte aus Mem() mit den aktuellen } stat=1; // stationär wider "unwahr" setzen { if (custom == 1) // Eigene Ausgabe { datei = fopen ("UIDiagramm.dat", "a"); Customout(); } else if (custom == 0) // stan**** Ausgabe { DatenausgabeUID(); } } } if(quiet == 0) printf("UIDiagramm Ende\n" ); // Statusmeldung } // Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm Ende UIDiagramm // Anfang main Anfang main Anfang main Anfang main Anfang main Anfang main Anfang main int main(int argc,char* argv[]) { int gueltig=1; // Parameter für gültige Eingabe int i = 1; if (argc == 1) printf("Kein Parameter übergeben.\nDas Programm wurde beendet. \nSiehe Bericht: '5.Programmaufruf'."); // Falls kein Parameter übergeben wird for(; i < argc*gueltig; ++i) // Überprüfung der Parameter, bis ein ungültiger auftritt { if (!strcmp( argv[i], "quiet" )) // Nur Daten werden ausgegeben, quiet = 1; // Keine Einheiten/Statusmeldung else if (!strcmp( argv[i], "U" )) // Spannung U ausgeben { custom = 1; // Benutzerdefienierte Ausgabe uout = 1; } else if (!strcmp( argv[i], "I" )) // Stromstärke I ausgeben { custom = 1; // Benutzerdefienierte Ausgabe iout = 1; } else if (!strcmp( argv[i], "L" )) // Gibt Wellenlänge mit maximaler { // Strahlungsleistung aus custom = 1; // Benutzerdefienierte Ausgabe lambdamaxout = 1; } else if (!strcmp( argv[i], "T" )) // Gibt die Temperatur in Grad Celsius aus { custom = 1; // Benutzerdefienierte Ausgabe tout = 1; } else if (!strcmp( argv[i], "P" )) // GIbt die aufgenommene Leistung aus { custom = 1; // Benutzerdefienierte Ausgabe pout = 1; } else if (!strcmp( argv[i], "speed" )) // Beschleunigt den Iterationsvorgang zu { // Lasten der Ergebnisse statvar = ((statvar-1)*10)+1; k = k+100; // Erhöht Anfang des UIDiagramms um 10V } else if (!strcmp( argv[i], "Z" )) // Gibt die Laufzeit aus { timeout = 1; custom = 1; // Benutzerdefienierte Ausgabe } else if (!strcmp( argv[i], "wechsel" ))// Simuliert mit Wechselspannung { wechselstrom = 1; statvar = 1.0001; // Verringert nötige Genauiggkeit } else if (!strcmp( argv[i], "S" )) { FILE *datei; // Erstellen bzw überschreiben des Textdokumentes datei = fopen ("Simulation.dat", "w"); if (datei != NULL) fprintf (datei, ""); fclose (datei); Simulation(); // Eigentliche Berechnung } else if (!strcmp( argv[i], "W" )) { FILE *datei; // Erstellen bzw überschreiben des Textdokumentes datei = fopen ("UIDiagramm.dat", "w"); if (datei != NULL) fprintf (datei, ""); fclose (datei); UIDiagramm(); // Eigentliche Berechnung } else // Ungültige Parameter abfangen { printf("Ungültiger Parameter '%s'\nDas Programm wurde beendet." "\nBitte verwenden Sie nur gültige Parameter.",argv[i]); gueltig=0; // Stoppt das Programm } } return 0; }
Aber ich glaub nicht, dass mit dem Code jemand was anfangen kann.
-
Ah danke, jetzt siehts echt besser aus.
Naja es geht ja nicht direkt um den Inhalt bzw. die elektrotechnischen Aspekte des Programms.
Ich erklärs mal so. Wenn ich diesen Quellquode jetzt sowie er da steht kopiere und ich MS Visual C++ in eine neue Konsolenanwendung einfüge. Dann müsste er sich doch kompilieren lassen ?
Aber stattdessen bekomme ich einige so Fehlermeldungen wie:
warning C4627: "#include <stdlib.h>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
1> "StdAfx.h" Direktive hinzufügen oder vorkompilierten Header erneut erstellenWie kann ich das beseitigen ?
-
Das ist ja erstmal nur eine Warnung und kein Fehler. Vorkompilierte Header kannst in den Projekteinstellungen deaktivieren, die sind in dem Fall glaub ich ziemlich egal.
Ansonsten musst halt schauen ob sich das kompilieren lässt und evlt. alle Compilerfehler beheben
-
Danke für die schnellen Antworten.
Auch ohne vorkompilierten Header funktioniert es leider nicht
Weiss jetzt leider auch nicht, was genau ich machen muss damit das Ganze läuft.Kann das denn jemand mal ändern wenns nicht soviel zu Tun ist ? Kann das leider nicht einschätzen.
-
Die vorkompilierten Header lassen sich beim Anlegen eines Projekts abschalten.
Die Fehler lassen darauf schliessen, das es eigentlich so nie gelaufen sein
kann.1>warning C4390: ';': Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
Bei if (Ug == 325 ); kann man sich alle if-Teile auch ganz sparen,
siehe Kommentar "Speichert die Momentane Stromstärke"1>error C2065: 'M_PI': nichtdeklarierter Bezeichner
es fehlt ganz oben
#define M_PI 3.14
1>error C2668: 'pow': Mehrdeutiger Aufruf einer überladenen Funktion
epsilon = -1*pow((double)10, -8)* ...
1> error C3861: "Simulation": Bezeichner wurde nicht gefunden.
1> error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?Es fehlt wohl (mindestes)
void Simulation()
vor Konstantenberechnung();
Danach lässt es sich kompilieren.
---Eine Hilfe wäre angebracht; z.B:
"U" Spannung U ausgeben "I" Stromstärke I ausgeben "L" Gibt Wellenlänge mit maximaler Strahlungsleistung aus "T" Gibt Temperatur in Grad Celsius aus "P" Gibt aufgenommene Leistung aus "S" Eigentliche Berechnung Erstellen bzw überschreiben des Textdokumentes "Simulation.dat"
----
Wenn man es jetzt startet z.B. mit
glbtst.exe U S
gibt es sehr viele 230.0V aus (Screen und Datei!)
PS: Ob es elektrotechnisch Sinn macht habe ich nicht geprüft ...
-
Kannst du (oder jmd anderes) mir das per Teamviewer eben machen bitte ?
Habe die Änderungen die du genannt hast vorgenommen, bekomme jetzt aber erneut ganz andere Meldungen.
-
Was ist eine Glühbirne?
-
Jaaa sorry Glühlampe, wollte es umschreiben damit es keiner googelt
Edit: Habe echt keine Grundlagen um das Programm zum Laufen zu bekommen. Aber für einen Kenner ist das doch nicht viel Arbeit oder ? Will nicht jemand 5 Minuten Hand anwerfen bitte ?
Edit: Auch nicht gegen eine kleine Belohnung ?
-
-
Jetzt startet zwar die Konsole, aber mit folgendem Inhalt
Kein Parameter übergeben.
Das Programm wurde beendet.Bei dir auch so ? Trotzdem danke erstmal für deine Mühe
-
agent60 schrieb:
Jetzt startet zwar die Konsole, aber mit folgendem Inhalt
Kein Parameter übergeben.
Das Programm wurde beendet.Bei dir auch so ? Trotzdem danke erstmal für deine Mühe
Es ist doch dein Programm ?
Ich hatte ja schon angemerkt, das es keine Aufrufhilfe gibt ...
Also (mindestens) zwei Parameter scheint es zu brauchen ->siehe meinen post
weiter oben - dann scheint es auch was zu machen.
-
Wie gesagt, habe es nicht selber geschrieben und kenne den Inhalt auch grötenteils nicht. Es ging nur darum, dass es einmal laufen sollte.
An welcher Stelle genau muss ich denn void Simulation () einfügen ?
-
-
Ich finde das nicht sooo witzig jetzt....
-
Also du hast keine AHnung was der Code macht oder was er machen soll. Dich interessiert nur der e-technische Aspekt?
Wenn du keine AHnung von dem Code hast, ists wohl besser du vergisst ihn ganz schnell.
-
Aber er soll doch laufen