• 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
269 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,340 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,101 wizyt
+3 głosów
4 odpowiedzi 153 wizyt
pytanie zadane 7 lipca w Sprzęt komputerowy przez Glutsa Nowicjusz (150 p.)

92,845 zapytań

141,787 odpowiedzi

320,861 komentarzy

62,178 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...