• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javascript program dobirający przewód zasilający

VPS Starter Arubacloud
0 głosów
261 wizyt
pytanie zadane 21 sierpnia 2018 w JavaScript przez jaco Początkujący (290 p.)

Cześć,
chciałbym zrobić taki prosty programik i rozwijać go powoli aby się czegoś nauczyć. na razie wygląda tak:
 




<html>
<body>
Moc <input type="text" id="P"><br><hr>
Cos fi <input type="text" id="cosfi"><br><hr>
Odległość <input type="text" id="l"><br><hr>

<button onclick="I3F()">Oblicz 3f</button>
<button onclick="I1F()">Oblicz 1f</button>
<p id="demo"></p> 
<p id="przekroj"></p> 

<script>
var I, U, P, cosfi, l, s;  // Declare 3 variables

P = document.getElementById("P").value; 
cosfi= document.getElementById("cosfi").value; 

function I3F(){
var I, U, P, cosfi;  // Declare 3 variables
U = 400; 
P = document.getElementById("P").value; 
cosfi= document.getElementById("cosfi").value;
I = P/(1.73205080757*U*cosfi);    // Assign the sum of x and y to z
document.getElementById("demo").innerHTML =
"Prąd = " + I + " A";


l = document.getElementById("l").value; 
s = (1.73205080757*I*l*cosfi*100)/(58*U*5);

document.getElementById("przekroj").innerHTML =
"Przekroj = " + s + " mm2";
}
function I1F(){
var I, U, P, cosfi, s;  // Declare 3 variables
U = 230; 
P = document.getElementById("P").value; 
cosfi= document.getElementById("cosfi").value;
I = P/(U*cosfi);    // Assign the sum of x and y to z
document.getElementById("demo").innerHTML =
"Prąd = " + I + " A";

l = document.getElementById("l").value; 
s = (2*I*l*cosfi*100)/(58*U*5);

document.getElementById("przekroj").innerHTML =
"Przekroj = " + s + " mm2";


}




</script>


</form>
</form>

</body>
</html>

Zamiast 2 guzików oblicz chciałbym 1 i listę albo radiobutton wybierający czy jest to obwód 1 fazowy czy 3 fazowy. Nie wiem dlaczego ale if else nie chciało mi zadziałać :/
 

Trudniejsza część jest taka. Mam obliczony przekrój minimalny S. Teraz musiał bym wybrać z tabeli najmniejszy przekrój większy od tego który wyszedł i który dodatkowo spełnia warunek prądu dopuszczalnego długotrwale.

Tablica wygląda tak jak niżej, na początek wystarczy mi przekrój + 1 wartość np kolumna A1;2. Jako że jestem zielony proszę o podpowiedzi z której strony ugryźć problem.
http://www.elektryk.kdi.pl/wp-content/uploads/2014/01/obciazenie_przewodow.jpg

1 odpowiedź

+1 głos
odpowiedź 21 sierpnia 2018 przez rafal.budzis Szeryf (85,260 p.)

Na początek warto zrobić porządek w kodzie ;)

Zmienne które tworzysz na początku w większości są nie używane ponieważ deklarujesz te same zmienne w funkcji jako lokalne. Powinieneś pozbyć się zmiennych globalnych. Czasem nie warto pisać komentarzy komentarze w stylu deklaracja zmiennych potrafią skutecznie zaciemnić kod i powodują trudniejsze czytanie kodu. Bardzo ważne są też wcięcia ;)

Kolejną fajną praktyką jest odpowiednia kolejność wykonywanych działań. Na samym początku deklarujemy zmienne i to jest ok. Następnie pobieramy dane. Potem dokonujemy obliczeń a na samym końcu wyświetlamy. Te dwa kroki u ciebie w funkcji się przeplatają wygląda to trochę mniej estetycznie dlatego tez warto to zmienić.

Po proponowanych zmianach kod powinien wyglądać mniej więcej tak :

function I3F() {
    var U = 400;
    var P = document.getElementById("P").value;
    var cosfi = document.getElementById("cosfi").value;
    var l = document.getElementById("l").value;

    var I = P / (1.73205080757 * U * cosfi);
    var s = (1.73205080757 * I * l * cosfi * 100) / (58 * U * 5);

    document.getElementById("demo").innerHTML = "Prąd = " + I + " A";
    document.getElementById("przekroj").innerHTML = "Przekroj = " + s + " mm2";
}
function I1F() {
    var U = 230;
    var P = document.getElementById("P").value;
    var cosfi = document.getElementById("cosfi").value;
    var l = document.getElementById("l").value;

    var I = P / (U * cosfi);
    var s = (2 * I * l * cosfi * 100) / (58 * U * 5);
    
    document.getElementById("demo").innerHTML = "Prąd = " + I + " A";
    document.getElementById("przekroj").innerHTML = "Przekroj = " + s + " mm2";
}

 

teraz możemy dodać do funkcji parametry które będziesz się zmieniały do określonych obliczeń. Przykładowo zrobiłem to z jednym parametrem ty możesz zrobić ich więcej.

function licz(U) {
    var P = document.getElementById("P").value;
    var cosfi = document.getElementById("cosfi").value;
    var I = P / (U * cosfi);
    var l = document.getElementById("l").value;
    var s = (2 * I * l * cosfi * 100) / (58 * U * 5);

    document.getElementById("demo").innerHTML = "Prąd = " + I + " A";
    document.getElementById("przekroj").innerHTML = "Przekroj = " + s + " mm2";
}

licz(400);//wywołanie dla 3 faz
licz(230);//wywołanie dla 1 fazy

 

 

komentarz 22 sierpnia 2018 przez jaco Początkujący (290 p.)
edycja 22 sierpnia 2018 przez jaco

Kurcze mega mi pomogłeś, dzięki!
ciągle mam z if problem :( poprawiłem wg twoich wskazówek kod. Jeszcze dodam komentarze.
ale totalnie nie radzę sobie z tym if :(

 


<html>
<meta charset="utf-8">
<body>
<select size="1"  id="U">
<option value="400">3f 400V</option>
<option value="230">1f 230V</option>
</select>


Moc <input type="text" id="P"><br><hr>
Cos fi <input type="text" id="cosfi"><br><hr>
Odległość <input type="text" id="l"><br><hr>
dU <input type="text" id="dU"><br><hr>
kj <input type="text" id="kj"><br><hr>

<button onclick="oblicz()">Oblicz </button>

<p id="demo"></p> 
<p id="przekroj"></p> 
<p id="Ib"></p> 

<script>



function oblicz() {
if (document.getElementById("U").value = 400){
    var U = 400;
    var P = document.getElementById("P").value;
    var cosfi = document.getElementById("cosfi").value;
    var l = document.getElementById("l").value;
 
    var I = P / (1.73205080757 * U * cosfi);
    var s = (1.73205080757 * I * l * cosfi * 100) / (58 * U * 5);
 
    document.getElementById("demo").innerHTML = "Prąd = " + I + " A";
    document.getElementById("przekroj").innerHTML = "Przekroj = " + s + " mm2";
	}
	else {
	var U = 230;
    var P = document.getElementById("P").value;
    var cosfi = document.getElementById("cosfi").value;
    var l = document.getElementById("l").value;
 
    var I = P / (U * cosfi);
    var s = (2 * I * l * cosfi * 100) / (58 * U * 5);
     
    document.getElementById("demo").innerHTML = "Prąd = " + I + " A";
    document.getElementById("przekroj").innerHTML = "Przekroj = " + s + " mm2";
	}
}

 

konsola nie pokazuje mi błędów :(

EDIT:
Znalazłem błąd! Ma być == a nie =  :) - jeszcze nie wiem dlaczego no ale działa :)
 

komentarz 22 sierpnia 2018 przez jaco Początkujący (290 p.)
Chciałbym teraz dodać tabelę.
Miało by to działać na zasadzie np.
prąd Ib wyliczony = 25A program musiał by z tabeli (dla uproszczenia tylko 1 kolumna na razie) wziąć pierwszy możliwy przekrój który może taki prąd przenieść w tym wypadku 4mm2 = 28A

Nie mam zielonego pojęcia jak się za to zabrać. Będę wdzięczny za wszelkie wskazówki.

Podobne pytania

0 głosów
1 odpowiedź 1,014 wizyt
0 głosów
1 odpowiedź 70 wizyt

92,453 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...