Anfänger braucht Hilfe beim Rechnen mit Variabeln

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Eisbaer
Posts: 10
Joined: 22 Apr 2018, 07:38

Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 08:10

Hallo,

bisher hab ich Autohotkey dazu verwendet um nach einem Tastendruck etwas im geöffneten Programm unmittelbar auszugeben. ( F12:: Send {Down}{Left}{Left}{Right}{Left} )

Jetzt versuche ich mich seit einigen Tagen an einem Script welches mir die maximalen Schleifenwiderstände im TN-Netz, bei unterschiedlichen Spannungen (230 / 400V) bei verschiedenen Absicherungen der Stromkreise berechnen soll.

Es hakt momentan bei der Berechnung der "Rschl" und "RschlSI" bei 230V und der "Rschl" bei 400V.
Und bei den Ausgaben von "vAbschalt", "Rschl" und "RschlSI".

Zu Testzwecken habe ich je eine MsgBox, für den Abschaltstrom, "Rschl" und "RschlSI" eingebaut, welche mir nur bei "RschlSI" bei 400V und beim "Abschalt"strom ein vernünftiges / korrektes Ergebnis anzeigt.
Was ich nicht verstehe da die anderen Berechnungen den gleichen Aufbau haben.

Vielleicht kann ja mal einer von Euch über den Code schauen und einem Anfänger erklären welche Fehler er gemacht hat?

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#SingleInstance, force
; --------- Tool zum maximalen Schleifenwiderstand berechnen -------------------------

; ---------------------------Variabeln & Co ------------------------------------------

Transform, Prozent, Chr, 37
global Spannung := 0
global Volt := 0
global Charakteristik := 0
global Charakter := 0
global Ampere := 0
global Rschl := 0.00
global RschlSI := 0.00
global Abschalt := 0.00

; --------------------------- GUI ----------------------------------------------------

Gui, Show, w400 h400, Rschl max.

; -------- DropDown Spannung ------------------
Gui, Add, Text, x10 y10, % "Spannung:"
Gui, Add, Text, x195 y10, % "Volt"
Gui, Add, DropDownList, x130 y5 w55 vSpannung gSpannung, 230|400
 
Gui, Add, Text, x10 y205, % "Spannung:"
Gui, Add, Edit, x130 y200 w55 vVolt


; ---------- DropDown Ampere der Sicherung ----------
Gui, Add, Text, x10 y40, % "Absicherung:"
Gui, Add, Text, x195 y40, % "Ampere"
Gui, Add, DropDownList, x130 y35 w55 vAmpere gStrom, 1|2|4|6|10|13|16|20|25|32
 
Gui, Add, Text, x10 y235, % "Ampere:"
Gui, Add, Edit, x130 y230 w55 vStrom


; ----------- DropDown Sicherungs Charakteristik ---------------------------
Gui, Add, Text, x10 y70, % "Charakteristik:"
Gui, Add, DropDownList, x130 y65 w55 vCharakteristik gCharakter, B|C|D|E|K|Z
 
Gui, Add, Text, x10 y265, % "Faktor:"
Gui, Add, Edit, x130 y260 w55 vCharakter


; --------------- Anzeige Abschaltstrom ---------------------------
Gui, Add, Text, x10 y295, % "Abschaltstrom:" ;neu v1.2
Gui, Add, Edit, x130 y290 w55 vAbschalt ; neu v1.2

; --------------------- Anzeige max. Schleife ----------------------- ; neu v1.3

Gui, Add, Text, x22 y325 w55 h30 , max. Rschl:                                      ; neu v1.3
Gui, Add, Edit, x95 y320 w100 h25 vRschl                             ; neu v1.3
Gui, Add, Text, x22 y355 w145 h30 , max. Rschl + 30%Prozent% Sicherheitsreserve:    ; neu v1.3
Gui, Add, Edit, x130 y350 w100 h25 vRschlSI                         ; neu v1.3


return

; ----------------- Auswertung DropDown Spannung ------------------------
Spannung:
    
    Gui, Submit, NoHide
    IfEqual, Spannung, 230
         GuiControl,, Volt, 230
     
    else IfEqual, Spannung, 400
        GuiControl,, Volt, 400

return
 
; ----------------- Auswertung DropDown Ampere ------------------------
Strom:
    
    Strom =
    Gui, Submit, NoHide
    IfEqual, Ampere, 1
         GuiControl,, Strom, 1
     
    else IfEqual, Ampere, 2
        GuiControl,, Strom, 2
	
	IfEqual, Ampere, 4
         GuiControl,, Strom, 4
     
    else IfEqual, Ampere, 6
        GuiControl,, Strom, 6
	
	IfEqual, Ampere, 10
         GuiControl,, Strom, 10
     
    else IfEqual, Ampere, 13
        GuiControl,, Strom, 13
	
	IfEqual, Ampere, 16
         GuiControl,, Strom, 16
     
    else IfEqual, Ampere, 20
        GuiControl,, Strom, 20
	
	IfEqual, Ampere, 25
         GuiControl,, Strom, 25
     
    else IfEqual, Ampere, 32
        GuiControl,, Strom, 32

Strom := Strom
  ; if (Strom >1) gosub, Charakter


Return
; ---------------------- Auswertung DropDown Charakteristik ---------------

Charakter:
    
    Charakter =
    Gui, Submit, NoHide
    IfEqual, Charakteristik, B
         GuiControl,, Charakter, 5
     
    else IfEqual, Charakteristik, C
        GuiControl,, Charakter, 10
	
	IfEqual, Charakteristik, D
         GuiControl,, Charakter, 20
     
    else IfEqual, Charakteristik, E
        GuiControl,, Charakter, 6.25
	
	IfEqual, Charakteristik, K
         GuiControl,, Charakter, 14
     
    else IfEqual, Charakteristik, Z
        GuiControl,, Charakter, 3
   
   Charakter := Charakter

;--------------------------- Abschaltstrom berechnen ----------------------

Abschalt:
Gui, Submit, NoHide
Abschalt =

Abschalt := Charakter * Strom
Abschalt := Abschalt

 IFEqual Charakteristik, E                     ; neu v1.2
    Abschalt := Round(Abschalt, 2)           ;neu v1.2
    
sleep, 600

MsgBox, %Abschalt%          ; neu v1.2 Testweise eingefügt

; ----------------------- max Schleife berechnen ---------------

Rschl =             ; neu v1.3
RschlSI =           ; neu v1.3

IfEqual, Spannung, 230      ; neu v1.3
{
    Rschl = Spannung / Abschalt  ; neu v1.3
    RschlSI = 0.7 * (Spannung / Abschalt)  ; neu v1.3
    Rschl := Rschl  ; neu v1.3
    RschlSI := RschlSI  ; neu v1.3
    Gosub, Schleifeausgabe ; neu v1.3
}

IfEqual, Spannung, 400  ; neu v1.3
{
    Rschl = 0.6666666666 * (Spannung / Abschalt)  ; neu v1.3  0.666666666666 = (2/3)
    RschlSI := 0.4666666666 * (Spannung / Abschalt) ; neu v1.3 0.466666666666 = 0.7 * (2/3)
    Rschl := Rschl  ; neu v1.3
    RschlSI := RschlSI  ; neu v1.3
    gosub, Schleifeausgabe ; neu v1.3
}

Return  ; neu v1.3

; -------- testweise eingefügt ---------------
Schleifeausgabe:

Rschl := Round(Rschl, 2)    ; neu v1.3
RschlSI := Round(RschlSI, 2)    ; neu v1.3
MsgBox, %Rschl% ; neu v1.3
MsgBox, %RschlSI%   ; neu v1.3

return
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 08:37

Wenn du Berechnungen in eine Variable schreibst musst du := anstatt = verwenden.
Die 2 haben eine a andere Bedeutung
Recommends AHK Studio
Eisbaer
Posts: 10
Joined: 22 Apr 2018, 07:38

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 09:08

Vielen Dank für Deine Hilfe.
Ich brauche anscheinend eine Brille. Da wo der richtige Wert berechnet wurde hatte ich den Doppelpunkt drin, und es ist mir nicht aufgefallen daß er bei den anderen 3 Berechnungen fehlt.

Jetzt habe ich nur noch das Problem mit der Ausgabe

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#SingleInstance, force
; --------- Tool zum maximalen Schleifenwiderstand berechnen -------------------------

; ---------------------------Variabeln & Co ------------------------------------------

Transform, Prozent, Chr, 37
global Spannung := 0
global Volt := 0
global Charakteristik := 0
global Charakter := 0
global Ampere := 0
global Rschl := 0.00
global RschlSI := 0.00
global Abschalt := 0.00

; --------------------------- GUI ----------------------------------------------------

Gui, Show, w400 h400, Rschl max.

; -------- DropDown Spannung ------------------
Gui, Add, Text, x10 y10, % "Spannung:"
Gui, Add, Text, x195 y10, % "Volt"
Gui, Add, DropDownList, x130 y5 w55 vSpannung gSpannung, 230|400
 
Gui, Add, Text, x10 y205, % "Spannung:"
Gui, Add, Edit, x130 y200 w55 vVolt


; ---------- DropDown Ampere der Sicherung ----------
Gui, Add, Text, x10 y40, % "Absicherung:"
Gui, Add, Text, x195 y40, % "Ampere"
Gui, Add, DropDownList, x130 y35 w55 vAmpere gStrom, 1|2|4|6|10|13|16|20|25|32
 
Gui, Add, Text, x10 y235, % "Ampere:"
Gui, Add, Edit, x130 y230 w55 vStrom


; ----------- DropDown Sicherungs Charakteristik ---------------------------
Gui, Add, Text, x10 y70, % "Charakteristik:"
Gui, Add, DropDownList, x130 y65 w55 vCharakteristik gCharakter, B|C|D|E|K|Z
 
Gui, Add, Text, x10 y265, % "Faktor:"
Gui, Add, Edit, x130 y260 w55 vCharakter


; --------------- Anzeige Abschaltstrom ---------------------------
Gui, Add, Text, x10 y295, % "Abschaltstrom:" ;neu v1.2
Gui, Add, Edit, x130 y290 w55 vAbschalt ; neu v1.2

; --------------------- Anzeige max. Schleife ----------------------- ; neu v1.3

Gui, Add, Text, x22 y325 w55 h30 , max. Rschl:                                      ; neu v1.3
Gui, Add, Edit, x95 y320 w100 h25 vRschl                             ; neu v1.3
Gui, Add, Text, x22 y355 w145 h30 , max. Rschl + 30%Prozent% Sicherheitsreserve:    ; neu v1.3
Gui, Add, Edit, x130 y350 w100 h25 vRschlSI                         ; neu v1.3


return

; ----------------- Auswertung DropDown Spannung ------------------------
Spannung:
    
    Gui, Submit, NoHide
    IfEqual, Spannung, 230
         GuiControl,, Volt, 230
     
    else IfEqual, Spannung, 400
        GuiControl,, Volt, 400

 
; ----------------- Auswertung DropDown Ampere ------------------------
Strom:
    
    Strom =
    Gui, Submit, NoHide
    IfEqual, Ampere, 1
         GuiControl,, Strom, 1
     
    else IfEqual, Ampere, 2
        GuiControl,, Strom, 2
	
	IfEqual, Ampere, 4
         GuiControl,, Strom, 4
     
    else IfEqual, Ampere, 6
        GuiControl,, Strom, 6
	
	IfEqual, Ampere, 10
         GuiControl,, Strom, 10
     
    else IfEqual, Ampere, 13
        GuiControl,, Strom, 13
	
	IfEqual, Ampere, 16
         GuiControl,, Strom, 16
     
    else IfEqual, Ampere, 20
        GuiControl,, Strom, 20
	
	IfEqual, Ampere, 25
         GuiControl,, Strom, 25
     
    else IfEqual, Ampere, 32
        GuiControl,, Strom, 32

Strom := Strom

; ---------------------- Auswertung DropDown Charakteristik ---------------

Charakter:
    
    Charakter =
    Gui, Submit, NoHide
    IfEqual, Charakteristik, B
         GuiControl,, Charakter, 5
     
    else IfEqual, Charakteristik, C
        GuiControl,, Charakter, 10
	
	IfEqual, Charakteristik, D
         GuiControl,, Charakter, 20
     
    else IfEqual, Charakteristik, E
        GuiControl,, Charakter, 6.25
	
	IfEqual, Charakteristik, K
         GuiControl,, Charakter, 14
     
    else IfEqual, Charakteristik, Z
        GuiControl,, Charakter, 3
   
   Charakter := Charakter

;--------------------------- Abschaltstrom berechnen ----------------------

Abschalt:
Gui, Submit, NoHide
Abschalt =

Abschalt := Charakter * Strom
Abschalt := Abschalt

 IFEqual Charakteristik, E                     ; neu v1.2
    Abschalt := Round(Abschalt, 2)           ;neu v1.2
    
sleep, 600

MsgBox, %Abschalt%          ; neu v1.2 Testweise eingefügt

; ----------------------- max Schleife berechnen ---------------

Rschl =             ; neu v1.3
RschlSI =           ; neu v1.3

IfEqual, Spannung, 230      ; neu v1.3
{
    Rschl := Spannung / Abschalt  ; neu v1.3
    RschlSI := 0.7 * (Spannung / Abschalt)  ; neu v1.3
    Rschl := Rschl  ; neu v1.3
    RschlSI := RschlSI  ; neu v1.3
    Gosub, Schleifeausgabe ; neu v1.3
}

IfEqual, Spannung, 400  ; neu v1.3
{
    Rschl := (2 / 3) * (Spannung / Abschalt)  ; neu v1.3  0.666666666666 = (2/3)
   ; RschlSI := 0.4666666666 * (Spannung / Abschalt) ; neu v1.3 0.466666666666 = 0.7 * (2/3)
    RschlSI := 0.7 * ((2 / 3) * (Spannung / Abschalt)) ; neu v1.3 0.466666666666 = 0.7 * (2/3)
    Rschl := Rschl  ; neu v1.3
    RschlSI := RschlSI  ; neu v1.3
    gosub, Schleifeausgabe ; neu v1.3
}

Return  ; neu v1.3

; -------- testweise eingefügt ---------------
Schleifeausgabe:

Rschl := Round(Rschl, 2)    ; neu v1.3
RschlSI := Round(RschlSI, 2)    ; neu v1.3
MsgBox, %Rschl% ; neu v1.3
MsgBox, %RschlSI%   ; neu v1.3

return
.
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 09:55

Moin,

ich bin etwas verwirrt. In Deinem letzten Beitrag fehlen Return Anweisungen am Ende der Subroutinen, die im ersten Skript noch vorhanden waren. Ist das Absicht?

Auf jeden Fall würde ich dem Fenster einen Button spendieren, der die eigentliche Berechnung auslöst.

Um den Rest können wir uns kümmern, wenn die Frage nach der Absicht geklärt ist.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 13:38

Es scheint mir so, als würdest du diese Sprache lernen wollen, also würde ich dir ungerne - wie just me es vorschlägt - alles auf einem Tablett servieren.
Wieso machst du bei den GuiControl Befehl Befehlen in Spannung und Strom eine große if/else if Leiter auf wenn du doch ganz einfach wie bei der MsgBox auch direkt die Variable auf die GUI schreiben kannst?
z. B. :
GuiControl,, Volt, %Spannung%
Das würde deinen Code um einiges einfacher machen.
( Diese Syntax lässt sich bei jedem Command einsetzen. )

Zudem weist du einigen Variablen ihren eigenen Wert zu - das verändert nichts an der Variable von daher kannst du die Zeilen weglassen.
z. B. :
RschlSI := RschlSI

Bei deiner Berechnung könntest du auch anstatt:

Code: Select all

    Rschl := (2 / 3) * (Spannung / Abschalt)  ; neu v1.3  0.666666666666 = (2/3)
   ; RschlSI := 0.4666666666 * (Spannung / Abschalt) ; neu v1.3 0.466666666666 = 0.7 * (2/3)
    RschlSI := 0.7 * ((2 / 3) * (Spannung / Abschalt)) ; neu v1.3 0.466666666666 = 0.7 * (2/3)
einfach Rschl zur Berechnung von RschlSI verwenden:

Code: Select all

Rschl := (2 / 3) * (Spannung / Abschalt)  ; neu v1.3  0.666666666666 = (2/3)
    RschlSI := 0.7 * Rschl ; neu v1.3 0.466666666666 = 0.7 * (2/3)
Zudem würde ich dir empfehlen im If nur den Teil zu verpacken der sich wirklich ändert und alle gleichbleibenden Teile unter das If schreiben:

Code: Select all

IfEqual, Spannung, 400  ; neu v1.3 
	Rschl := (2 / 3) * (Spannung / Abschalt)

else IfEqual, Spannung, 400
	Rschl := Spannung / Abschalt

RschlSI := 0.7 * Rschl  ; neu v1.3 0.466666666666 = 0.7 * (2/3)
gosub, Schleifeausgabe
return
Wenn du deinen code so logisch übersichtlicher machst kannst du eher den Überblick behalten und kannst ihn schneller analysieren und Fehler finden sowie neues hinzufügen.

Ich hoffe ich konnte dir weiterhelfen
Recommends AHK Studio
Eisbaer
Posts: 10
Joined: 22 Apr 2018, 07:38

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 14:01

Hallo,

danke für Eure Rückmeldungen.

Da ich mit Variabeln bisher noch nicht in ahk gearbeitet habe dachte ich ich mache diese mit z.B. Rschl := Rschl zu globalen Variabeln. Hab da was von Variabeln gelesen die nur bis zum nächsten Return die Werte behalten gelesen und dachte mir sicher ist sicher....

Das mit dem Rschl zum RschlSi berechnen ist eine gute Idee. Vielleicht wäre ich irgendwann auch drauf gekommen...in ein paar Wochen....
Ich hab das ganze jetzt ans Laufen gebracht bevor ich die letzten beiden Antworten in dem Thread gelesen habe.

Jetzt kann ich in der nächsten Zeit den Programmcode verfeinern. Z.B. mal schauen ob es mir irgendwie möglich ist das Zeichen "Ω" anstatt "Ohm" bei der Ausgabe hinzuzufügen. Meine bisherigen Versuche mit Transform haben nicht funktioniert, hab noch keinen passenden Code für das "Ω" gefunden. Einmal kam ein "A" dann kamen wieder Fehlermeldungen von und wegen ungültigen Zeichen.....

Eine Taste die die Berechnung auslöst ist von meiner Seite nicht gewollt. Sobald ein Wert verändert wird soll neu gerechnet werden.

Ein Frage zum Return hätte ich noch. Wohin springt das Programm bei einem Return? Zum Programmanfang oder zurück hinter die Stelle vom letzten abgearbeiteten Goto / Gosub?

Hier mal mein Programmcode in der aktuellen Version:

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#SingleInstance, force
; --------- Tool zum maximalen Schleifenwiderstand berechnen -------------------------

; ---------------------------Variabeln & Co ------------------------------------------

Transform, Prozent, Chr, 37
Transform, Copyr, Chr, 169
global Spannung := 0
global Volt := 0
global Charakteristik := 0
global Charakter := 0
global Ampere := 0
global Rschl := 0.00
global RschlSI := 0.00
global Abschalt := 0.00

; --------------------------- GUI ----------------------------------------------------

Gui, Show, w400 h140, Rschl max.

; -------- DropDown Spannung ------------------
Gui, Add, Text, x10 y10, % "Spannung:"
Gui, Add, Text, x195 y10, % "Volt"
Gui, Add, DropDownList, x130 y5 w55 vSpannung gSpannung, 230|400
 
Gui, Add, Text, x10 y205, % "Spannung:"
Gui, Add, Edit, x130 y200 w55 vVolt


; ---------- DropDown Ampere der Sicherung ----------
Gui, Add, Text, x10 y40, % "Absicherung:"
Gui, Add, Text, x195 y40, % "Ampere"
Gui, Add, DropDownList, x130 y35 w55 vAmpere gStrom, 1|2|4|6|10|13|16|20|25|32
 
Gui, Add, Text, x10 y235, % "Ampere:"
Gui, Add, Edit, x130 y230 w55 vStrom


; ----------- DropDown Sicherungs Charakteristik ---------------------------
Gui, Add, Text, x10 y70, % "Charakteristik:"
Gui, Add, DropDownList, x130 y65 w55 vCharakteristik gCharakter, B|C|D|E|K|Z
 
Gui, Add, Text, x195 y70, % "Faktor:"   
Gui, Add, Edit, x237 y65 w55 vCharakter   

Gui, Add, Text, x315 y124, %Copyr%  2018 L. Glock

Gosub, Spannung 

return

GuiClose:
ExitApp
; ----------------- Auswertung DropDown Spannung ------------------------
Spannung:
    
    Gui, Submit, NoHide
    IfEqual, Spannung, 230
         GuiControl,, Volt, 230
     
    else IfEqual, Spannung, 400
        GuiControl,, Volt, 400


; ----------------- Auswertung DropDown Ampere ------------------------
Strom:
    
    Strom =
    Gui, Submit, NoHide
    IfEqual, Ampere, 1
         GuiControl,, Strom, 1
     
    else IfEqual, Ampere, 2
        GuiControl,, Strom, 2
	
	IfEqual, Ampere, 4
         GuiControl,, Strom, 4
     
    else IfEqual, Ampere, 6
        GuiControl,, Strom, 6
	
	IfEqual, Ampere, 10
         GuiControl,, Strom, 10
     
    else IfEqual, Ampere, 13
        GuiControl,, Strom, 13
	
	IfEqual, Ampere, 16
         GuiControl,, Strom, 16
     
    else IfEqual, Ampere, 20
        GuiControl,, Strom, 20
	
	IfEqual, Ampere, 25
         GuiControl,, Strom, 25
     
    else IfEqual, Ampere, 32
        GuiControl,, Strom, 32

Strom := Strom


; ---------------------- Auswertung DropDown Charakteristik ---------------

Charakter:
    
    Charakter =
    Gui, Submit, NoHide
    IfEqual, Charakteristik, B
         GuiControl,, Charakter, 5
     
    else IfEqual, Charakteristik, C
        GuiControl,, Charakter, 10
	
	IfEqual, Charakteristik, D
         GuiControl,, Charakter, 20
     
    else IfEqual, Charakteristik, E
        GuiControl,, Charakter, 6.25
	
	IfEqual, Charakteristik, K
         GuiControl,, Charakter, 14
     
    else IfEqual, Charakteristik, Z
        GuiControl,, Charakter, 3
   
   Charakter := Charakter

;--------------------------- Abschaltstrom berechnen ----------------------

Abschalt:
Gui, Submit, NoHide
Abschalt =

Abschalt := Charakter * Strom
Abschalt := Abschalt

 IFEqual Charakteristik, E                     
    Abschalt := Round(Abschalt, 2)           
    
;sleep, 600

; MsgBox, %Abschalt%          ; neu v1.2 Testweise eingefügt

If (Spannung > 0) { 
    gosub, weiter1
} 

return  

weiter1:    
If (Strom > 0) {   
    gosub, weiter2  
}  
return  

weiter2:    
If (Charakter > 0) {   
    gosub, Schleiferechner  
}   
return  



; ----------------------- max Schleife berechnen ---------------

Schleiferechner:    

Rschl =             
RschlSI =           

IfEqual, Spannung, 230      
{
    Rschl := Spannung / Abschalt  
    RschlSI := 0.7 * (Spannung / Abschalt)  
    Rschl := Rschl  
    RschlSI := RschlSI  
    Gosub, Schleifeausgabe 
}

IfEqual, Spannung, 400  
{
    Rschl := (2 / 3) * (Spannung / Abschalt)  
    RschlSI := 0.7 * ((2 / 3) * (Spannung / Abschalt))
    Rschl := Rschl
    RschlSI := RschlSI
    gosub, Schleifeausgabe
}

Return

; -------- Ergebnis Ausgabe ---------------
Schleifeausgabe:

Rschl := Round(Rschl, 2) 
RschlSI := Round(RschlSI, 2)
;MsgBox, %Rschl% ; neu v1.3
MsgBox, maximaler Schleifenwiderstand bei 30%Prozent% Sicherheitsreserve:  %RschlSI% Ohm ; neu v1,7

return
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

22 Apr 2018, 15:54

nnnik wrote:... also würde ich dir ungerne - wie just me es vorschlägt - alles auf einem Tablett servieren.
Interessante Aussage! Worauf stützt sie sich? Das 'Tablett' hätte mir wenig Mühe bereitet. Deinem 'Nicht-Tablett' fehlt allerdings auch nicht viel.
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

23 Apr 2018, 03:08

OK, zurück zum Thema.

Dein Skript funktioniert, und das ist für einen Anfänger in Sachen GUI schon mal eine beachtliche Leistung. Auch das Fenster sieht jetzt viel 'aufgeräumter' aus. Das neue Layout zeigt aber auch, dass Du die nun unsichtbaren Edit-Controls Volt und Strom eigentlich nicht brauchst. Sobald eine Auswahl in den DropDownListen Spannung und Ampere getroffen wird, wird deren aktueller Wert direkt in das zugeordnete (unsichtbare) Edit-Control gestellt. Die Werte von Spannung und Volt bzw. Ampere und Strom sind deshalb immer identisch, d.h. Volt und Strom brauchst Du überhaupt nicht. Die Labelroutinen Spannung und Strom brauchen tatsächlich nur ein Gui, Submit, NoHide. Alternativ könntest Du die DDLs Spannung, Ampere und Charakteristik auch auf eine gemeinsame Labelroutine schicken.

Controlvariablen:

Die Controlvariablen vName haben je nach Verwendung in den Anweisungen unterschiedliche Funktionen. Wenn man den Inhalt eines Controls mit z.B.

Code: Select all

GuiControl,, Strom, 1
ändet, ist Strom nur der Name des Controls. Die gleichnamige Variable Strom wird durch diese Aktion nicht verändert. Ihr Inhalt ändert sich erst, wenn die Controls danach mit

Code: Select all

Gui, Submit, NoHide
; oder
GuiControlGet, Strom
erneut ausgelesen werden.

Code: Select all

Strom:

    Strom =
    Gui, Submit, NoHide
    IfEqual, Ampere, 1
         GuiControl,, Strom, 1
    ...
    Strom := Strom
sorgt deshalb nur dafür, dass die Variable Strom nach Aufruf der Labelroutine Strom: leer ist.

Super-globale Variablen:

Die mit dem Schlüsselwort Global erzeugten super-globalen Variablen machen nur Sinn, wenn ein Skript Funktionen oder Objektmethoden enthält, die ohne weiteres auf diese Variablen zugreifen können sollen. Dein Skript enthält so etwas nicht, deshalb brauchst Du auch keine super-globalen Variablen.

Sonderzeichen:

In AHK kannst Du die Sonderzeichen auch direkt in den Text einsetzen. Für Unicode-Zeichen wie das Omega Ω brauchst Du aber eine Unicode Version von AHK. Als Alternative in der ANSI Verrsion gibt es nur die Auswahl eines speziellen Zeichensatzes, der das Zeichen im ANSI-Bereich (0 - 255) enthält. Wenn Du Zeichen aus dem Bereich von 128 - 255 verwendest, musst Du das Skript im Format UTF-8 mit BOM speichern.
:arrow: Warum werden die ASCII-fremden Zeichen in meinen Skript falsch angezeigt oder gesendet?

Beim Prozent-Zeichen % ist außerdem zu beachten, dass es wegen seiner besonderen Bedeutung in AHK an vielen Stellen 'escaped' werden muss.
:arrow: Wann sollten Prozentzeichen und Kommas mit einem Escapezeichen versehen werden?

Die Anweisung Transform ist übrigens für diesen Zweck 'veraltet'. Heutzutage benutzt man eher

Code: Select all

Prozent := Chr(37)
Eisbaer
Posts: 10
Joined: 22 Apr 2018, 07:38

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

23 Apr 2018, 04:07

Danke für Deine Tipps und Erklärungen.

Das mit den "super globalen Variabeln" ist, in meinem Script, wenn ich es richtig verstehe unnötig aber kein Fehler?

Die unsichtbaren Edit Controls hatte ich als die Gui zum Testen noch größer war und ich sehen wollte ob und was in die Variabeln geschrieben wird.

Wenn ich allerdings:

Code: Select all

Gui, Add, Text, x10 y235, % "Ampere:"
Gui, Add, Edit, x130 y230 w55 vStrom
Mit einem ";" aus dem Programmablauf rausnehme:

Code: Select all

; Gui, Add, Text, x10 y235, % "Ampere:"
; Gui, Add, Edit, x130 y230 w55 vStrom
Wird nichts mehr berechnet.
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Anfänger braucht Hilfe beim Rechnen mit Variabeln

23 Apr 2018, 04:29

Das mit den "super globalen Variabeln" ist, in meinem Script, wenn ich es richtig verstehe unnötig aber kein Fehler?
Korrekt!
... Wird nichts mehr berechnet.
Kann auch nicht, solange Du noch die Variable Strom antelle von Ampere benutzt. ;)

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Helmut2 and 30 guests