Höchsten Wert von 23 Leitungen ermitteln

Dieser Bereich ist für den Austausch FERTIGER Makros und allgemein nützlicher Schaltungen vorgesehen.
Roberto
Beiträge: 116
Registriert: Mittwoch 15. September 2010, 20:34
Wohnort: Graz (Austria)
Kontaktdaten:

Höchsten Wert von 23 Leitungen ermitteln

Beitrag von Roberto » Sonntag 20. November 2011, 10:03

Hallo Leute... (brauche wieder Eure Hilfe :) )

Möchte von meinen 23 Leitungen(Bereich 1-5V) den Mittelwert, den Höchsten und den Niedrigsten Wert ermitteln.
Den Mittelwert habe ich schon.
Bei dem höchsten Wert, stehe ich an!
Probiere da mit Vergleicher und Sample&Hold.
Komme aber nicht so recht weiter.

Hat jemand eine Idee, wie man das machen könnte ?
Mir fehlt dazu ein Lösungsansatz :cry:

l.G. Roberto

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von tmm » Sonntag 20. November 2011, 10:23

Hallo Roberto,

in den PL Beispielen (22 Multimeter) ist eine Min. und Max. Funktion enthalten; die kannst du übernehmen.

Gruß MM

Roberto
Beiträge: 116
Registriert: Mittwoch 15. September 2010, 20:34
Wohnort: Graz (Austria)
Kontaktdaten:

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von Roberto » Sonntag 20. November 2011, 11:25

Hallo tmm
Danke für die Antwort! :D
Habe inzwischen eine passende Funktion gefunden :)
l.G. Roberto
Zelle_max.mak
(4.88 KiB) 450-mal heruntergeladen

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Sonntag 20. November 2011, 18:30

Hallo WoB.

Die Lösung mit der .DLL gefällt mir sehr gut.
Und funktioniert auch so, wie sie soll.

Für einen ähnlichen Fall würde ich mir wünschen, wenn diese:
- 24 analoge Eingänge hätte, und korrespondierend
- 24 digitale Ausgänge (um mit Led´s den jeweiligen max. analogen Wert anzuzeigen)
- auf der Eingangseite einen Pin, wo man mit z.B. mit einem num. Eingabefeld festlegen kann, ob es 2...24 analoge Eingänge gibt
- auf der Ausgangseite weiterhin die 3 derzeitige Pins für min., max. und Mittelwert

Hoffe, ich bin nicht allzu aufdringlich....... :oops:

Herzlichen Gruß von C :shock: mpander.

Roberto
Beiträge: 116
Registriert: Mittwoch 15. September 2010, 20:34
Wohnort: Graz (Austria)
Kontaktdaten:

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von Roberto » Sonntag 20. November 2011, 22:22

Hallo

@WoB
Danke für die Mühe!
Irgendwie funktioniert dein Beispiel bei mir aber nicht ?
Habe die Dateien in einen Ordner entpackt und gestartet.
Die Anzeigen bleiben auf Null. Müsste ich das dann noch irgendwie verschalten?
Hatte noch nie mit DLL zu tun gehabt.

Anderer Seits, könnte ich eine DLL dann nicht selber anpassen.. :?
Und, ich glaube es gibt da noch ein Missverständnis.
Ich möchte nicht den z.B. höchsten Wert von EINEM Signal sondern von max. 23, zueinander!
Also, welcher Wert auf den 23 Kanälen am höchsten/niedersten ist.

-----
Habe inzwischen eine Lösung gebastelt.
(ging der ganze Tag drauf :) )

Misst jetzt von den max. 23 Kanälen den Mittelwert und welcher der höchste und der kleinste Wert ist.
Davon noch das Delta
Habe jetzt auch eine Umschaltung dabei, damit ich die Kanäle auswählen kann.
Hat das Markro leider sehr aufgebläht :( , aber mir ist nix anderes eingefallen.. :?
Wollte zuerst die Kanäle mit den Relais kurzschließen aber das geht nicht im Programm.
Musste dann alle Relais noch ändern und auf Umschalten auslegen..

Falls Euch etwas einfacheres Einfällt, bitte melden.
(oder was würdet Ihr besser machen ?)

l.G. Roberto
min_max.mak
(18.77 KiB) 395-mal heruntergeladen

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Sonntag 20. November 2011, 22:45

Hallo Roberto,
Roberto hat geschrieben:Die Anzeigen bleiben auf Null
Das ist nicht möglich.
Bei "3" Eingängen sind "Festwerte" vorgegeben.
Daher müssen in den Displays bei:
Minimum: 0,00..
Maximum: 20,0..
Mittelwert: 1,00..
stehen.

Dies ist ja nur ein Beispiel gewesen.
Bitte ausprobieren:
Für die Festwerte z.B. Schieberegler einsetzen. Wertebereich z.B. 0...20.
Nun müssen sich die Displaywerte entsprechend ändern. (z.B die 4 Schieber auf 10 stellen)
(ein Beispiel im Anhang)

WoB hat die Lösung auf deine Definition abgestimmt.
Wenn nun die Definition plötzlich anders lautet.......... so kann er nix dafür.

@WoB: Sorry. War nur eine Anfrage! Im Beispiel sind auf der FP die Led´s sinngemäß eingefügt. So, wie ich mir das gedacht habe.
Dennoch. Danke für die Antwort.

Gruß von C :shock: mpander.
Dateianhänge
MinMaxMittel23w.prj
(7.31 KiB) 438-mal heruntergeladen

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von tom_g » Montag 21. November 2011, 08:05

In PL auch so möglich:

siehe angehängtes Projekt.

Gruss Thomas
Dateianhänge
min_max_1.prj
(7.12 KiB) 480-mal heruntergeladen
Curiousity makes us progress !

funkybaer
Beiträge: 440
Registriert: Mittwoch 22. Oktober 2008, 08:51
Wohnort: Kitzingen

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von funkybaer » Montag 21. November 2011, 11:10

Hallo Tom_G

da hatten wir fast den gleichen Ansatz

Gruß Gerhard
Dateianhänge
test.7z
(1.7 KiB) 403-mal heruntergeladen

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Montag 21. November 2011, 17:08

Hallo Thomas.

Leider hast Du 2 klitzekleine Fehler in der Schaltung.
- in der Formel gibt es (bei der Addition) ein "E8".
Das Display "min." zeigt immer "0". Egal, was in in den num. Eingabefeldern eingegeben wird.

Anbei mein Beispiel mit den Zahlen 1...8.

Gruß von C :shock: mpander.
Dateianhänge
min_max_1r.prj
(7.1 KiB) 390-mal heruntergeladen

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Montag 21. November 2011, 17:24

Hallo Gerhard.

Leider funktioniert deine Schaltung nicht richtig.
Bei dem Display ND2 steht immer "0".
Egal was man in den num. Eingabefeldern eingibt.
Anbei mein Beispiel mit den Zahlen 8..5 (4;3).

Desweiteren hängen 2 Ausgänge der Relais in der Luft. Somit macht es keinen Sinn, in den zugehörigen
Eingabefeldern irgend etwas einzugeben.
Die Schaltung ist auch relativ schwierig auf 23 Kanäle auszubauen. Findest Du nicht auch?

Gruß von C :shock: mpander.
Dateianhänge
max r.prj
(5.28 KiB) 378-mal heruntergeladen

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Montag 21. November 2011, 22:54

Hallo Freunde.

Der "Betreff des Beitrags:", und der erste Satz des ersten Beitrages von Roberto läßt vermuten, daß es sich hier ausschließlich um positive Werte handelt.

Gruß von C :shock: mpander.

tom_g
Beiträge: 215
Registriert: Freitag 31. Oktober 2008, 14:59

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von tom_g » Montag 21. November 2011, 23:11

Guten Abend zusammen,

danke vielmals für Euere Korrekturen.

Wenn ich so eine Variante wie diese beistelle, verstehe ich sie meist als Anregung und nicht als fertige Lösung, ich gebe mir zwar Mühe, die Anregung jeweils fehlerfrei auszuführen. Heute morgen habe ich diese Idee aufgrund Robertos Problemstellung neben meinem Morgenkaffee aufgenommen, aber der Gang zur Arbeit drängte. Es schlichen sich daher Gedankenfehler ein.
Beide Euere Hinweise waren richtig. Ich habe sie aufgenommen, nun müsste die Schaltung funktionieren.
Ich finde diese Rückmeldungen super, es ist hier ein richtiger Dialog auf gedanklicher Ebene !

Geht es denn Vielen hier im Formum nicht auch so (wie mir):

es braucht ein vorgelegtes Problem (und sei es auch eins von Roberto's vielzähligen ... ich hoffe, Roberto, Du nimmst mir diese freche Bemerkung nicht übel ! ;-) um dieses zu lösen. Für mich ist dies wie für andere, ein SUDOKU zu lösen, oder ein Kreuzworträtsel...halt Vergnügen !
Eine mögliche Lösung mit PL zu finden macht einfach nur Spass ! Somit durchaus auch dienlich für die Anschauung, oder auch als Werbung für PL, wovon ich Fan und Verfechter gegen LV bin !

Ich wünsche allen einen schönen Abend:

Grüsse von Thomas
Dateianhänge
min_max_1.prj
(7.26 KiB) 410-mal heruntergeladen
Curiousity makes us progress !

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Montag 21. November 2011, 23:33

Hallo Thomas.
tom_g hat geschrieben:verstehe ich sie meist als Anregung und nicht als fertige Lösung
ich sehe dies genauso!

Dein geänderter Vorschlag geht wie ´ne Rakete! Super.

Herzlichen Gruß vom C :shock:mpander.

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Montag 21. November 2011, 23:41

Hallo WoB.
WoB hat geschrieben:da muss ich dir widersprechen, es ist nur vom höchsten Wert die Rede.
Man nehme z.B. drei Wintertemperaturen von -20° , -10° und -5°.
Dann ist -5° der höchste Wert, obwohl er negativ ist.
Roberto hat doch geschrieben:
"Möchte von meinen 23 Leitungen(Bereich 1-5V)......"
.........interpretiere ich immer noch allersamt als "positive" Werte.

Herzlichen Gruß vom C :shock: mpander.

Roberto
Beiträge: 116
Registriert: Mittwoch 15. September 2010, 20:34
Wohnort: Graz (Austria)
Kontaktdaten:

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von Roberto » Dienstag 22. November 2011, 00:04

Hallo :)
Hallo Tom
es braucht ein vorgelegtes Problem (und sei es auch eins von Roberto's vielzähligen ... ich hoffe, Roberto, Du nimmst mir diese freche Bemerkung nicht übel ! ;-) um dieses zu lösen.
Es freut mich, dass du das so siehst. Das Du das als Anregung siehst. :oops:
Es ist mir selbst oft schon peinlich, wenn ich so viel frage. :oops:
Aber wie das halt so ist, wenn man zu einem Ziel will, gibt es oft Probleme oder man kommt nicht weiter.
Dann sucht man halt einen Rat.
Und in meiner derzeitigen (großen)Baustelle (Programm) gibt es noch viele Baustellen ;)

Derzeit bin ich bei der nächsten Baustelle, aber das geht derzeit noch selbst ;)

@compander
WoB hat die Lösung auf deine Definition abgestimmt.
Wenn nun die Definition plötzlich anders lautet.......... so kann er nix dafür.
Ich habe mich nicht beschwert !
Man fängt bei der Beschreibung eines Problems, mit der kleinsten Variante an (= max. Werte) und baut das dann aus zum fertigen Programm.
Ich wäre ja auch schon mit einem Denkanstoß zufrieden gewesen ;)
Aber wenn ich gleich alle Funktionen beschreiben würde, die ich brauche, würde das zu viel sein ;)

-------------
@all
Interessant, Eure Denkanstöße :)
Auf das Scannen der Kanäle, wäre ich nicht gekommen :roll:
Was mir ein bisschen fehlt, ist das eingehen auf mein Makro.
Was haltet Ihr von der Schaltung?
Ist die Variante gut oder schlecht ? Braucht sie mehr Ressourcen als eure Variante?
Ich weiß, es gibt mehrere Möglichkeiten, aber ich strebe schon zur optimalsten ;) (wenn es geht )
Bei 23 Kanälen wird es dann aber wieder Aufwendiger.
Die meisten Bausteine gehen nur bis 16Bit... u.s.w.



l.G. Roberto

Ps.: Ja, es geht nur um positive Werte

- chris -
Beiträge: 29
Registriert: Sonntag 22. August 2010, 16:24

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von - chris - » Dienstag 22. November 2011, 21:20

Hier mal mein Versuch dazu:

Einstellbar von 2-60 Kanälen und ermitteln
des Min-Wert, Max-Wert und Mittel-Wert.
MinMaxMittel.zip
(15.82 KiB) 440-mal heruntergeladen
Windows 7 64bit Ultimate

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Dienstag 22. November 2011, 21:45

Hallo chris.

Die erste Lösung (und dies auch noch per .DLL) die den Minimalwert nicht mit "0" anzeigt.
Egal, ob der niedriegster Wert negativ oder positiv ist.
Einfach so, wie hoch/niedrig dieser ist.

Hut ab !

Herzlichen Gruß von C :shock: mpander.

- chris -
Beiträge: 29
Registriert: Sonntag 22. August 2010, 16:24

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von - chris - » Dienstag 22. November 2011, 22:23

Ich programmiere mit PureBasic:

Code: Alles auswählen


EnableExplicit

Structure sDLLParams
  DLLParam.d[101]
EndStructure

; return number of input channels...
ProcedureDLL.a CNumInputsEx(*PUser.sDLLParams)

  Protected inputs.a

  inputs = *PUser\DLLParam[0]

  If inputs < 2
    inputs = 2
  ElseIf inputs > 60
    inputs = 60
  EndIf

  ProcedureReturn inputs
EndProcedure

; return number of output channels...
ProcedureDLL.a CNumOutputsEx(*PUser.sDLLParams)

  Protected outputs.a

  outputs = 3

  ProcedureReturn outputs
EndProcedure

; return name for each input...
ProcedureDLL GetInputName(Channel.a, *Name.i)

  Protected GetInputName.s

  GetInputName = "E" + Str(Channel + 1)

  PokeS(*Name, GetInputName, -1, #PB_Ascii)

EndProcedure

; return name for each output...
ProcedureDLL GetOutputName(Channel.a, *Name.i)

  Protected GetOutputName.s

  If Channel = 0
    GetOutputName = "Min"
  ElseIf Channel = 1
    GetOutputName = "Max"
  ElseIf Channel = 2
    GetOutputName = "Mittel"
  Else
    GetOutputName = "U"
  EndIf

  PokeS(*Name, GetOutputName, -1, #PB_Ascii)

EndProcedure

; check inputs and set outputs while running...
ProcedureDLL CCalculate(*PInput.sDLLParams, *POutput.sDLLParams, *PUser.sDLLParams)

  Protected inputs.a, min.d, max.d, summe.d, mittel.d, n.i

  min    = 0
  max    = 0
  mittel = 0

  inputs = *PUser\DLLParam[0]

  If inputs > 1

    min    = *PInput\DLLParam[0]
    max    = *PInput\DLLParam[0]
    mittel = 0

    For n = 1 To inputs - 1
      If min > *PInput\DLLParam[n]
        min = *PInput\DLLParam[n]
      EndIf
    Next n

    For n = 1 To inputs - 1
      If max < *PInput\DLLParam[n]
        max = *PInput\DLLParam[n]
      EndIf
    Next n

    For n = 0 To inputs - 1
      summe = summe + *PInput\DLLParam[n]
    Next n

    mittel = summe / inputs

  EndIf

  *POutput\DLLParam[0] = min
  *POutput\DLLParam[1] = max
  *POutput\DLLParam[2] = mittel

EndProcedure

; called when project is started...
ProcedureDLL CSimStart(*PInput.sDLLParams, *POutput.sDLLParams, *PUser.sDLLParams)

  ; nothing to do...

EndProcedure

; called when project is stopped...
ProcedureDLL CSimStop(*PInput.sDLLParams, *POutput.sDLLParams, *PUser.sDLLParams)

  ; nothing to do...

EndProcedure

; called when button CONFIGURE is pressed in dialogue...
ProcedureDLL CConfigure(*PUser.sDLLParams)

  Enumeration
    #Window_0
  EndEnumeration

  Enumeration
    #Text_Anzahl
    #String_Anzahl
    #Button_OK
    #Button_Abbrechen
  EndEnumeration

  Enumeration
    #Arial10
  EndEnumeration

  Protected Event.i, EventWindow.i, EventGadget.i, EventType.i, EventMenu.i, quit.i
  Protected inputs.a
    
  inputs = *PUser\DLLParam[0]

  If inputs < 2
    inputs = 2
  ElseIf inputs > 60
    inputs = 60
  EndIf
  
  LoadFont(#Arial10, "Arial" , 10)
  
  If OpenWindow(#Window_0, 536, 228, 170, 110, "MinMaxMittel", #PB_Window_SystemMenu | #PB_Window_TitleBar)

    TextGadget(#Text_Anzahl, 25, 25, 45, 30, "Anzahl:")
    StringGadget(#String_Anzahl, 85, 20, 60, 25, "", #PB_Text_Right)
    ButtonGadget(#Button_OK, 20, 60, 45, 30, "OK")
    ButtonGadget(#Button_Abbrechen, 70, 60, 75, 30, "Abbrechen")

    SetGadgetFont(#Text_Anzahl, FontID(#Arial10))
    SetGadgetFont(#String_Anzahl, FontID(#Arial10))

    SetGadgetText(#String_Anzahl, Str(inputs))

    Repeat

      Event       = WaitWindowEvent()
      EventGadget = EventGadget()
      EventType   = EventType()
      EventWindow = EventWindow()

      Select Event

        Case #PB_Event_Gadget

          If EventGadget = #String_Anzahl
            ;
          ElseIf EventGadget = #Button_OK
            inputs = Val(GetGadgetText(#String_Anzahl))
            quit   = 1
          ElseIf EventGadget = #Button_Abbrechen
            quit = 1
          EndIf

        Case #PB_Event_CloseWindow

          quit = 1

      EndSelect

    Until quit = 1

    CloseWindow(#Window_0)

  EndIf

  If inputs < 2
    inputs = 2
  ElseIf inputs > 60
    inputs = 60
  EndIf

  *PUser\DLLParam[0] = inputs

EndProcedure

Windows 7 64bit Ultimate

compander
Beiträge: 657
Registriert: Dienstag 14. Oktober 2008, 17:06
Wohnort: Markt Schwaben

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von compander » Dienstag 22. November 2011, 22:52

Hallo WoB.

Da habe ich etwas verwechselt.
Von daher: sorry !

Ich habe mir da gewünscht, daß ich lediglich schnell diejenige Leitung erkenne (per Led), welche den höchsten (gerne auch niedrigsten) Wert führt.

@chris: dies wünsche ich mir auch bei deinem Lösungsvorschlag.

#############################
Nur Anregung. Keinerlei Kritik.
#############################

Herzlichen Gruß von C :shock: mpander.

Roberto
Beiträge: 116
Registriert: Mittwoch 15. September 2010, 20:34
Wohnort: Graz (Austria)
Kontaktdaten:

Re: höchsten Wert von 23 Leitungen ermitteln ?

Beitrag von Roberto » Dienstag 22. November 2011, 22:58

Hallo Chris

Gratuliere!!! und DANKE!!
Ein sehr gute Dll :D (funktioniert auch bei mir ;) )

Eine Bitte hätte ich!
Könnte man vielleicht die Auswahl der Eingänge, per Pin steuern.
Dann könnte ich im Programm die Kanäle einstellen :)
Am einfachsten vielleicht einen Pin mit Analog Eingang, für ganzzahlige Werte.
z.B. 2V = 2 Kanäle, 23V = 23 Kanäle. :roll:
Es ginge aber auch ein Digitaler Eingang , aber der braucht halt mehr Pins.
DANKE :D
----------
@all
Wie kann man, oder könnte man, den Ressourcenverbrauch einzelner Lösungen messen ?
Gibt es da eine Möglichkeit ?

l.G. Roberto

Antworten

Zurück zu „Makros & Schaltungen“