Höchsten Wert von 23 Leitungen ermitteln
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Roberto.
Was genau verstehst Du unter "Ressourcenverbrauch" ?
CPU-Last, Simulationsgeschwindigkeit, u.ä. ?
Einiges geht mit dem Bauteil $Info.......
Gruß von C mpander.
Was genau verstehst Du unter "Ressourcenverbrauch" ?
CPU-Last, Simulationsgeschwindigkeit, u.ä. ?
Einiges geht mit dem Bauteil $Info.......
Gruß von C mpander.
-
- Beiträge: 116
- Registriert: Mittwoch 15. September 2010, 20:34
- Wohnort: Graz (Austria)
- Kontaktdaten:
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Compander
Ob z.B. mein Makro für min/max mehr braucht als die DLL von Chris.
(was man annehmen könnte )
Habe da z.B. manchmal einen kleinen Notebook mit Atom-Prozessor in Betrieb.
Da wird es schon recht eng mit dem PL.
Bei normalem Betrieb komme ich derzeit auf ca. 100-150Hz Simulator Frequenz.
Wenn ich z.B. den Y/t Schreiber mit hoher Abtastung einschalte, kann es nach einiger Zeit vorkommen, dass das Programm stehen bleibt und abstürzt.
Zuhause habe ich einen alten Pentium. Da gibt es (noch)keine Probleme.
l.G. Roberto
Meine damit, ob man irgendwie messen kann, welche Baugruppe, wie viel an CPU-Leistung braucht.Was genau verstehst Du unter "Ressourcenverbrauch" ?
Ob z.B. mein Makro für min/max mehr braucht als die DLL von Chris.
(was man annehmen könnte )
Habe da z.B. manchmal einen kleinen Notebook mit Atom-Prozessor in Betrieb.
Da wird es schon recht eng mit dem PL.
Bei normalem Betrieb komme ich derzeit auf ca. 100-150Hz Simulator Frequenz.
Wenn ich z.B. den Y/t Schreiber mit hoher Abtastung einschalte, kann es nach einiger Zeit vorkommen, dass das Programm stehen bleibt und abstürzt.
Zuhause habe ich einen alten Pentium. Da gibt es (noch)keine Probleme.
l.G. Roberto
Re: höchsten Wert von 23 Leitungen ermitteln ?
@Compander meinst du sowas?
- Dateianhänge
-
- MinMaxMittel.rar
- (19.02 KiB) 389-mal heruntergeladen
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo habe.
Vielen Dank für deinen Lösungsvorschlag.
Funktioniert super!
##################################################################################
Ich bewundere eh Alle diejenigen, die sauber funktionierende .DLL´s "komponieren" können.
Wenn hier die Anzahl der analogen Eingänge auch noch einstellbar ist ----> perfekt !
##################################################################################
Anbei ein Beispiel, wie ich das optisch brauche. Mit WOB´s .DLL.
@ Roberto:
Gruß an Alle von C mpander.
Vielen Dank für deinen Lösungsvorschlag.
Funktioniert super!
##################################################################################
Ich bewundere eh Alle diejenigen, die sauber funktionierende .DLL´s "komponieren" können.
Wenn hier die Anzahl der analogen Eingänge auch noch einstellbar ist ----> perfekt !
##################################################################################
Anbei ein Beispiel, wie ich das optisch brauche. Mit WOB´s .DLL.
@ Roberto:
Hast Du event. beachtet, daß der Y/t-Schreiber nur eine begrenzte Anzahl von Werten darstellen kann? Dann bleibt er stehen.Roberto hat geschrieben:Wenn ich z.B. den Y/t Schreiber mit hoher Abtastung einschalte........
Gruß an Alle von C mpander.
- Dateianhänge
-
- ZIP.zip
- (2.56 KiB) 366-mal heruntergeladen
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Compander,
hab noch nicht verstanden was du benötigst.
Bei meiner DLL lässt sich die Anzahl der Eingänge ja einstellen.
Brauchst du noch einen zusätzlichen Eingang, wo du angibst,
dass du von z.B 10 Kanälen nur z.B. die ersten 5 miteinander vergleichen willst?
habe
hab noch nicht verstanden was du benötigst.
Bei meiner DLL lässt sich die Anzahl der Eingänge ja einstellen.
Brauchst du noch einen zusätzlichen Eingang, wo du angibst,
dass du von z.B 10 Kanälen nur z.B. die ersten 5 miteinander vergleichen willst?
habe
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo habe.
Hier liegt glücklicherweise offensichtlich nur ein Mißverständnis vor.
Wie dargestellt: deine .DLL funktioniert super.
Da muß überhaupt nix geändert werden!
(im Anhang die praktisch gleiche Schaltung mit deiner .DLL)
WoB´s .DLL ist m.E. nur deshalb "ultra", da man im BSB mittels num. Eingabefeld direkt die Anzahl der analogen Eingänge bestimmen kann, welche ausgewertet werden.
Hat halt seinen eigenen Charme. Ansonsten ist da in der Funktion überhaupt kein Unterschied!
Jungs: das habt Ihr super gemacht !
Hoffe, auch "Roberto" ist hier zufrieden.
Herzlichen Gruß von C mpander.
Hier liegt glücklicherweise offensichtlich nur ein Mißverständnis vor.
Wie dargestellt: deine .DLL funktioniert super.
Da muß überhaupt nix geändert werden!
(im Anhang die praktisch gleiche Schaltung mit deiner .DLL)
WoB´s .DLL ist m.E. nur deshalb "ultra", da man im BSB mittels num. Eingabefeld direkt die Anzahl der analogen Eingänge bestimmen kann, welche ausgewertet werden.
Hat halt seinen eigenen Charme. Ansonsten ist da in der Funktion überhaupt kein Unterschied!
Jungs: das habt Ihr super gemacht !
Hoffe, auch "Roberto" ist hier zufrieden.
Herzlichen Gruß von C mpander.
- Dateianhänge
-
- MaxMittelMin 20w.prj
- (6.99 KiB) 390-mal heruntergeladen
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Compander,
alles klar, dann hatte ich dich nur missverstanden.
Im Anhang eine Erweiterung der DLL auf max 48 Kanäle.
Mehr geht nicht, da man sonst bei 48 Eingängen das Limit
von 99 Ausgängen überschreiten würde.
alles klar, dann hatte ich dich nur missverstanden.
Im Anhang eine Erweiterung der DLL auf max 48 Kanäle.
Mehr geht nicht, da man sonst bei 48 Eingängen das Limit
von 99 Ausgängen überschreiten würde.
- Dateianhänge
-
- MinMaxMittel.rar
- (5.46 KiB) 371-mal heruntergeladen
-
- Beiträge: 116
- Registriert: Mittwoch 15. September 2010, 20:34
- Wohnort: Graz (Austria)
- Kontaktdaten:
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo habe
Der Hintergrund ist der, dass wenn das Programm mal Compiled ist, kann man nix mehr einstellen.
Wäre dir sehr dankbar, wenn Du das noch einbauen könntest
Danke für deine Mühe
l.G. Roberto
ps.:
Wollte das jetzt doch nochmal zusammenfassen:
Ich würde brauchen.:
23 Eingänge (Kanäle)
3 Ausgänge (min/max/mittel)
1 Eingang für die Einstellung der zu verarbeitenden Kanäle (zur Laufzeit)
Die Funktion mit den Led's braucht der Compander.
Ist aber eine nette Funktion, die man ja mal brauchen kann.
Danke
Wie schon geschrieben,hab noch nicht verstanden was du benötigst.
Bei meiner DLL lässt sich die Anzahl der Eingänge ja einstellen.
für mich wäre es sehr wichtig, wenn man im Programm (zur Laufzeit)einstellen kann, wie viel Eingänge man auswertet!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.
Es ginge aber auch ein Digitaler Eingang , aber der braucht halt mehr Pins.
DANKE
Der Hintergrund ist der, dass wenn das Programm mal Compiled ist, kann man nix mehr einstellen.
Wäre dir sehr dankbar, wenn Du das noch einbauen könntest
Danke für deine Mühe
l.G. Roberto
ps.:
Wollte das jetzt doch nochmal zusammenfassen:
Ich würde brauchen.:
23 Eingänge (Kanäle)
3 Ausgänge (min/max/mittel)
1 Eingang für die Einstellung der zu verarbeitenden Kanäle (zur Laufzeit)
Die Funktion mit den Led's braucht der Compander.
Ist aber eine nette Funktion, die man ja mal brauchen kann.
Danke
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Roberto,
hier die erweiterte DLL mit zusätzlichem Eingang um die Anzahl
der Kanäle während der Laufzeit einzustellen.
Die LED-Ausgabe kann jetzt im Config-Dialog der DLL Ein/Ausgeschaltet werden.
Hab die DLL aber noch nicht ausreichend testen können.
Kannst ja mal schreiben ob es funzt!
hier die erweiterte DLL mit zusätzlichem Eingang um die Anzahl
der Kanäle während der Laufzeit einzustellen.
Die LED-Ausgabe kann jetzt im Config-Dialog der DLL Ein/Ausgeschaltet werden.
Hab die DLL aber noch nicht ausreichend testen können.
Kannst ja mal schreiben ob es funzt!
- Dateianhänge
-
- MinMaxMittel.rar
- (5.71 KiB) 413-mal heruntergeladen
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo habe,
könntest Du den Source-Programmteil der CConfig-routine Deiner hier eingestellten DLL bitte mal listen ?
Ich bin noch nicht voll fit in der Windows-Programmierung, und sehe die Interaktion zwischen PL, dem vom DLL-Programmer erzeugten Konfigurationsdialog und zwischen Windows (event Verwaltung) noch nicht klar.
Den Rest (IO-Definition, Datenschnittstelle zwischen PL und der DLL, sowie die eigentliche Applikation (was die DLL machen soll)) habe ich im Griff.
Wenn Du mir den Ablauf, was genau nach dem Click auf "Konfiguration" passiert, in einfachen Worten schildern könntest, wäre ich Dir sehr dankbar.
Ich verwende zur Programmierung von PL-DLLs die Programmiersprache Euphoria und deren win32lib, (worin das Windows API auf Euphoria "angehoben" wird).
Euphoria ist zwar eine Interpretersprache, aber es gibt dazu einen Translator nach C. Den C-Codekann WATCOM zur DLL compilieren.
Vielen Dank und Gruss Thomas
könntest Du den Source-Programmteil der CConfig-routine Deiner hier eingestellten DLL bitte mal listen ?
Ich bin noch nicht voll fit in der Windows-Programmierung, und sehe die Interaktion zwischen PL, dem vom DLL-Programmer erzeugten Konfigurationsdialog und zwischen Windows (event Verwaltung) noch nicht klar.
Den Rest (IO-Definition, Datenschnittstelle zwischen PL und der DLL, sowie die eigentliche Applikation (was die DLL machen soll)) habe ich im Griff.
Wenn Du mir den Ablauf, was genau nach dem Click auf "Konfiguration" passiert, in einfachen Worten schildern könntest, wäre ich Dir sehr dankbar.
Ich verwende zur Programmierung von PL-DLLs die Programmiersprache Euphoria und deren win32lib, (worin das Windows API auf Euphoria "angehoben" wird).
Euphoria ist zwar eine Interpretersprache, aber es gibt dazu einen Translator nach C. Den C-Codekann WATCOM zur DLL compilieren.
Vielen Dank und Gruss Thomas
Curiousity makes us progress !
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Thomas,
die DLL ist mit FreeBASIC programmiert worden.
Mit Euphoria, C oder Delphi kenn ich mich nicht aus.
Ich bin auch kein Programmierprofi, bin selber noch am lernen.
FreeBASIC ist ein Open-Source-Compiler. Für diesen Compiler gibt es
mehrere verschiedene IDE's. Ich benutze die IDE FBEdit 1.0.7.6c.
Sie verfügt über einen Editor, mit der man grafische Oberflächen erstellen
kann (bei Delphi ist das glaube ich ähnlich).
Da es bei FreeBasic keine objektorientierte Programmierung gibt, muss die
Handhabung der Controlls über WinAPI-Funktionen erfolgen.
Hier mal der Code der DLL (geht bestimmt effizenter, also nicht lachen!):
Hier noch ein Link der evtl. hilft
http://www.willemer.de/informatik/windo ... htm#simple
Ich hoffe ich konnte dir etwas weiterhelfen.
Gruß
die DLL ist mit FreeBASIC programmiert worden.
Mit Euphoria, C oder Delphi kenn ich mich nicht aus.
Ich bin auch kein Programmierprofi, bin selber noch am lernen.
FreeBASIC ist ein Open-Source-Compiler. Für diesen Compiler gibt es
mehrere verschiedene IDE's. Ich benutze die IDE FBEdit 1.0.7.6c.
Sie verfügt über einen Editor, mit der man grafische Oberflächen erstellen
kann (bei Delphi ist das glaube ich ähnlich).
Da es bei FreeBasic keine objektorientierte Programmierung gibt, muss die
Handhabung der Controlls über WinAPI-Funktionen erfolgen.
Hier mal der Code der DLL (geht bestimmt effizenter, also nicht lachen!):
Code: Alles auswählen
#Include Once "windows.bi"
#Define IDD_DLG1 1000
#Define IDC_BTN1 1001
#Define IDC_BTN2 1002
#Define IDC_CBO1 1003
#Define IDC_CBO2 1004
Dim Shared hInstance As HMODULE
'----- Deklaration von Sub's und Functionen -----
' Diese Function wird nach öffnen des User-Dialogs
' immer wieder aufgerufen um z.B:
' - Comboboxen mit Werten zu füllen
' - Überwacht ob ein Button angeklickt wurde
' - usw.
Declare Function DlgProc(ByVal hWin As HWND, _
ByVal uMsg As UINT, _
ByVal wParam As WPARAM, _
ByVal lParam As LPARAM) As Integer
' Diese Function ermittelt die Instance des User-Dialogs.
' Sonst wird es nicht von Windows dargestelt.
Declare Function GetModuleInstance() As Integer
'------------------------------------------------
Dim Shared Combobox1 As Short ' Anzahl Kanäle
Dim Shared Combobox2 As Short ' LED Ausgabe Ja/Nein
Dim Shared a As UByte ' wird zur Beschriftung der Ausgänge benötigt
Dim Shared b As UByte ' wird zur Beschriftung der Ausgänge benötigt
' Die ProfiLab Routinen müssen zwischen "Extern" und "End Extern" stehen
Extern "windows-ms"
' Beginn ProfiLab Routinen
Function CNumInputsEx (PUser As Double Ptr) As UByte Export
Return PUser[0] + 1 ' Rückgabe der Bauteileingänge (+1 für Use-Pin)
End Function
Function CNumOutputsEx (PUser As Double Ptr) As UByte Export
If PUser[1] = 1 Then
Return (2 * PUser[0]) + 3 ' Rückgabe der Bauteilausgänge (+3 für Min/Max/Mittel)
Else
Return 3
EndIf
End Function
Sub GetInputName (ByVal Channel As UByte, InputName As ZString) Export
If Channel = 0 Then
InputName = "Use"
Else
InputName = "K" & LTrim(Str(Channel))
EndIf
End Sub
Sub GetOutputName (ByVal Channel As UByte, OutputName AS ZString) Export
If Channel = 0 Then
OutputName = "Max"
ElseIf Channel = 1 Then
OutputName = "Mittel"
ElseIf Channel = 2 Then
OutputName = "Min"
a = 1
b = 1
Else
If a = 1 Then
OutputName = "K" & Str(b) & "_Max"
a = a + 1
Else
OutputName = "K" & Str(b) & "_Min"
a = 1
b = b + 1
EndIf
EndIf
End Sub
Sub CSimStart (PInput AS Double Ptr, POutput AS Double Ptr, PUser AS Double Ptr) Export
' nothing to be done
End Sub
Sub CSimStop (PInput As Double Ptr, POutput As Double Ptr, PUser As Double Ptr) Export
' nothing to be done
End Sub
Sub CCalculate (PInput As Double Ptr, POutput AS Double Ptr, PUser AS Double Ptr) Export
Dim Min_Wert As Double
Dim Max_wert As Double
Dim Mittelwert As Double
Dim Summe As Double
Dim Use_Channel As UByte
Dim n As UByte
Dim x As UByte
If PInput[0] < 2 Or PInput[0] > PUser[0] Then
Use_Channel = PUser[0]
Else
Use_Channel = PInput[0]
EndIf
x = 0
Min_wert = 0
Max_wert = 0
Mittelwert = 0
Min_Wert = PInput[1]
Max_Wert = PInput[1]
Mittelwert = 0
For n = 1 To Use_Channel
If Min_Wert > PInput[n] Then Min_Wert = PInput[n]
If Max_Wert < PInput[n] Then Max_Wert = PInput[n]
Summe = Summe + PInput[n]
Next
Mittelwert = Summe / Use_Channel
POutput[0] = Max_Wert
POutput[1] = Mittelwert
POutput[2] = Min_Wert
If PUser[1] = 1 Then
If Min_Wert < Max_Wert Then
For n = 1 To Use_Channel
If PInput[n] >= Max_wert Then
x = (n * 2) + 1
POutput[x] = 5
x = x + 1
POutput[x] = 0
ElseIf PInput[n] <= Min_Wert Then
x = (n * 2) + 1
POutput[x] = 0
x = x + 1
POutput[x] = 5
Else
x = (n * 2) + 1
POutput[x] = 0
x = x + 1
POutput[x] = 0
EndIf
Next
Else
' alle Kanäle haben den gleichen Wert (Min=Max)
For n = 1 To Use_Channel
x = (n * 2) + 1
POutput[x] = 5
x = x + 1
POutput[x] = 5
Next
EndIf
' LED's nicht benutzter Kanäle ausschalten
For n = Use_Channel To PUser[0]
x = (n * 2) + 3
POutput[x] = 0
x = x + 1
POutput[x] = 0
Next
End If
End Sub
Sub CConfigure (PUser As Double Ptr) Export
'----- aktuelle Werte von PUser an Dialog übergeben -----
' Kanäle
If Puser[0] < 2 Then ' PUser[0] muss mind. 2 sein
Combobox1 = 0 ' 2 Kanäle
Else
Combobox1 = PUser[0] - 2 ' auf Index der Combobox setzen (0=2 Kanäle 1=3 Kanäle usw.)
EndIf
' LED Ausgabe
Combobox2 = PUser[1]
'--------------------------------------------------------
'----- Aufruf des Dialog's -----
DialogBoxParam(GetModuleInstance(), Cast(ZString Ptr,IDD_DLG1), NULL, @DlgProc, NULL)
'-------------------------------
'----- neue Werte an PUser übergeben -----
PUser[0] = Combobox1 + 2 ' Kanäle: +2 wegen Index von Combobox (0-46)
PUser[1] = Combobox2 ' LED Ausgabe Ja=1/Nein=0
'-----------------------------------------
End Sub
End Extern
Function DlgProc(ByVal hDlg As HWND, _
ByVal uMsg As UINT, _
ByVal wParam As WPARAM, _
ByVal lParam As LPARAM) As Integer
Dim id As Long
Dim Event As Long
Dim n As UByte
Dim Text As String
Select Case uMsg
Case WM_INITDIALOG
' ------ Comboboxen mit Werten füllen -----
' Combobox 1
For n = 2 To 48
Text = Str(n)
SendMessage(GetDlgItem(hDlg, IDC_CBO1), CB_ADDSTRING, 0 , StrPtr(Text))
Next
' Index setzen
SendMessage(GetDlgItem(hDlg, IDC_CBO1), CB_SETCURSEL, Combobox1, 0 )
' Combobox 2
SendMessage(GetDlgItem(hDlg, IDC_CBO2), CB_ADDSTRING, 0 , StrPtr("Nein"))
SendMessage(GetDlgItem(hDlg, IDC_CBO2), CB_ADDSTRING, 0 , StrPtr("Ja"))
' Index setzen
SendMessage(GetDlgItem(hDlg, IDC_CBO2), CB_SETCURSEL, Combobox2, 0 )
'
' [X] geklickt
Case WM_CLOSE
EndDialog(hDlg, 0) ' Beendet das Dialogfenster
'
Case WM_COMMAND
id = LoWord(wParam)
Event = HiWord(wParam)
Select Case id
' OK Button gedrückt
Case IDC_BTN1
' Wert von Combobox an Variable übergeben
Combobox1 = SendMessage(GetDlgItem(hDlg,IDC_CBO1), CB_GETCURSEL, 0, 0)
Combobox2 = SendMessage(GetDlgItem(hDlg,IDC_CBO2), CB_GETCURSEL, 0, 0)
EndDialog(hDlg, 0) ' Beendet das Dialogfenster
' Cancel Button gedrückt
Case IDC_BTN2
EndDialog(hDlg, 0) ' Beendet das Dialogfenster
End Select
Case WM_SIZE
'
Case Else
Return FALSE
'
End Select
Return TRUE
End Function
Function GetModuleInstance() As Integer
Dim mbi As MEMORY_BASIC_INFORMATION
VirtualQuery( @DlgProc, @mbi, SizeOf(mbi) )
Return Cast(HANDLE ,mbi.AllocationBase)
End Function
Hier noch ein Link der evtl. hilft
http://www.willemer.de/informatik/windo ... htm#simple
Ich hoffe ich konnte dir etwas weiterhelfen.
Gruß
-
- Beiträge: 116
- Registriert: Mittwoch 15. September 2010, 20:34
- Wohnort: Graz (Austria)
- Kontaktdaten:
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo haben
Herzlichen Dank!!!!
Ich habe gleich das File vom Compander modifiziert.
(er möge mir verzeihen )
Soweit ich das kurz getestet habe, funktioniert alles!!
Super!
Nochmals herzlichen Dank für dein Mühe !
l.G. Roberto
Herzlichen Dank!!!!
Ich habe gleich das File vom Compander modifiziert.
(er möge mir verzeihen )
Soweit ich das kurz getestet habe, funktioniert alles!!
Super!
Nochmals herzlichen Dank für dein Mühe !
l.G. Roberto
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Roberto.
Kann mir nicht vorstellen, daß deine .prj funktioniert.
Dafür gibt mehrere Gründe.
a) beim Aufruf des Projektes gibt es eine Fehlermeldung
b) leider hast Du nicht angegeben, mit welcher .DLL Du getestet hast.
Bzw. die .DLL nicht angefügt. Bei mir ist im BSB nur das allgemeine DLL-Symbol.
c) Du hast den Ausgang eines num. Eingabefeldes mit dem Ausgang eines Festwertes zusammengeschloßen.
Dies widerspricht sich. Was soll die nachfolgende Schaltung (z.B. ein Pin der .DLL) damit anfangen?
Bitte deine Schaltung downloaden, und erneut ausprobieren.
Gruß von C mpander.
Kann mir nicht vorstellen, daß deine .prj funktioniert.
Dafür gibt mehrere Gründe.
a) beim Aufruf des Projektes gibt es eine Fehlermeldung
b) leider hast Du nicht angegeben, mit welcher .DLL Du getestet hast.
Bzw. die .DLL nicht angefügt. Bei mir ist im BSB nur das allgemeine DLL-Symbol.
c) Du hast den Ausgang eines num. Eingabefeldes mit dem Ausgang eines Festwertes zusammengeschloßen.
Dies widerspricht sich. Was soll die nachfolgende Schaltung (z.B. ein Pin der .DLL) damit anfangen?
Bitte deine Schaltung downloaden, und erneut ausprobieren.
Gruß von C mpander.
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hi habe,
lachen ??? Mitnichten, Anerkennung für Deine Ausführung und vielen Dank !
Ich habe das Konzept nun verstanden:
Mein Versuch, den Mechanismus in einfachen Worten zu beschreiben:
beim Click auf den Button "konfigurieren" wird die Routine Cconfigure aufgerufen.
Darin wird zuerst ein Dialogfenster definiert, dann erstellt
Der modifizierbare Inhalt des PL-Speicherbereichs pUser wird in die controls im Dialog hineingeschrieben.
Eine callback Funktion muss bereitgestellt werden, um gezielt auf (Eingabe)Ereignisse in diesem Dialogfenster zu reagieren (die Ereignisse werden von Windows verwaltet, die callbackfunktion muss Windows "bekanntgemacht" werden, es handelt sich bei der callback-Funktion um eine "Software-Interrupt-Routine", welche bei JEDEM von Windows erkanten Ereignis ausgeführt wird. Ereignisse sind MouseClick, drag...Eingaben, ButtonClicks, Timers und so weiter. In dieser Callback-Funktion werden nun die im Dialog eingetippten Daten nach Drücken von ENTER an die vorgesehene Speicherstelle von pUser gespeichert, oder nicht gepeichert, falls ABBRECHEN gedrückt wird.
Beide Ereignisse schliessen danach das Dialog-Fenster. Cconfigure() wird verlassen und PL ist nun im edit mode.
Erst nach START wird CsimStart() einmalig durchlaufen, danach synchron zur Zyklusabarbeitung Ccalculate(). Nach Stop wird einmalig CsimStop() durchlaufen.
En schööne Taag und viele Grüsse von Thomas
lachen ??? Mitnichten, Anerkennung für Deine Ausführung und vielen Dank !
Ich habe das Konzept nun verstanden:
Mein Versuch, den Mechanismus in einfachen Worten zu beschreiben:
beim Click auf den Button "konfigurieren" wird die Routine Cconfigure aufgerufen.
Darin wird zuerst ein Dialogfenster definiert, dann erstellt
Der modifizierbare Inhalt des PL-Speicherbereichs pUser wird in die controls im Dialog hineingeschrieben.
Eine callback Funktion muss bereitgestellt werden, um gezielt auf (Eingabe)Ereignisse in diesem Dialogfenster zu reagieren (die Ereignisse werden von Windows verwaltet, die callbackfunktion muss Windows "bekanntgemacht" werden, es handelt sich bei der callback-Funktion um eine "Software-Interrupt-Routine", welche bei JEDEM von Windows erkanten Ereignis ausgeführt wird. Ereignisse sind MouseClick, drag...Eingaben, ButtonClicks, Timers und so weiter. In dieser Callback-Funktion werden nun die im Dialog eingetippten Daten nach Drücken von ENTER an die vorgesehene Speicherstelle von pUser gespeichert, oder nicht gepeichert, falls ABBRECHEN gedrückt wird.
Beide Ereignisse schliessen danach das Dialog-Fenster. Cconfigure() wird verlassen und PL ist nun im edit mode.
Erst nach START wird CsimStart() einmalig durchlaufen, danach synchron zur Zyklusabarbeitung Ccalculate(). Nach Stop wird einmalig CsimStop() durchlaufen.
En schööne Taag und viele Grüsse von Thomas
Curiousity makes us progress !
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Thomas,
das hast du sehr schön beschrieben!!
Bis dann
HB
das hast du sehr schön beschrieben!!
Bis dann
HB
-
- Beiträge: 116
- Registriert: Mittwoch 15. September 2010, 20:34
- Wohnort: Graz (Austria)
- Kontaktdaten:
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo compander
Bei den Eigenschaften von der dll musst Du den Pfad der dll angeben.
dll ist die letzte von "haben".
Eingestellt auf 23 Kanäle bei den Eigenschaften und alle Pins von meinem Beispiel müssten passen.
l.G. Roberto
Bei mir tut sie esKann mir nicht vorstellen, daß deine .prj funktioniert.
Bei den Eigenschaften von der dll musst Du den Pfad der dll angeben.
dll ist die letzte von "haben".
Eingestellt auf 23 Kanäle bei den Eigenschaften und alle Pins von meinem Beispiel müssten passen.
l.G. Roberto
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo noch mal,
hab den Config - Dialog noch mal erweitert. Es läst sich nun der Use - Pin Ein/Ausschalten.
Dabei gab es aber ein kleines Problem bei der Beschriftung der Eingänge.
„NumInputsEx“ bekommt zwar die richtige Anzahl der Eingänge übergeben, aber „GetInputName“ weis nicht wie sie die Beschriften muss.
Beispiel:
Wird der Use - Pin benutzt, ist der Name des 1. Eingangs „Use“. Eingang 2 K1, Eingang 3 K2 uws. .
Wird der Use - Pin nicht benutzt, muss der Name des 1. Eingangs „K1“ lauten, Eingang 2 K2 usw. .
Da bei der „GetInputName“ die PUser - Variablen nicht übergeben werden, musste ich den Umweg über eine zusätzliche Datei(Buffer) gehen.
In der Datei wird der Wert der Puser - Variable die für das Ein/Ausschalten des Use - Pin zuständig ist gespeichert.
In „GetInputName“ wird der Wert dann wieder eingelesen und die Namen der Eingänge dementsprechend beschriftet.
Das hatt aber den Nachteil, dass man die DLL nur einmal im Projekt benutzen kann. Andere DLL-Bausteine würden auch auf ein und die selbe Datei zugreifen.
Ich hoffe das war einigermaßen verständlich?
Jetzt meine Frage kann man das irgendwie anders lösen, oder kann Abacom die Subroutine "GetInputName" mit der Puser-Variable erweitern.
MFG
HB
hab den Config - Dialog noch mal erweitert. Es läst sich nun der Use - Pin Ein/Ausschalten.
Dabei gab es aber ein kleines Problem bei der Beschriftung der Eingänge.
„NumInputsEx“ bekommt zwar die richtige Anzahl der Eingänge übergeben, aber „GetInputName“ weis nicht wie sie die Beschriften muss.
Beispiel:
Wird der Use - Pin benutzt, ist der Name des 1. Eingangs „Use“. Eingang 2 K1, Eingang 3 K2 uws. .
Wird der Use - Pin nicht benutzt, muss der Name des 1. Eingangs „K1“ lauten, Eingang 2 K2 usw. .
Da bei der „GetInputName“ die PUser - Variablen nicht übergeben werden, musste ich den Umweg über eine zusätzliche Datei(Buffer) gehen.
In der Datei wird der Wert der Puser - Variable die für das Ein/Ausschalten des Use - Pin zuständig ist gespeichert.
In „GetInputName“ wird der Wert dann wieder eingelesen und die Namen der Eingänge dementsprechend beschriftet.
Das hatt aber den Nachteil, dass man die DLL nur einmal im Projekt benutzen kann. Andere DLL-Bausteine würden auch auf ein und die selbe Datei zugreifen.
Ich hoffe das war einigermaßen verständlich?
Jetzt meine Frage kann man das irgendwie anders lösen, oder kann Abacom die Subroutine "GetInputName" mit der Puser-Variable erweitern.
MFG
HB
-
- Beiträge: 116
- Registriert: Mittwoch 15. September 2010, 20:34
- Wohnort: Graz (Austria)
- Kontaktdaten:
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo habe
Macht ja nix, wenn der USE -Pin sichtbar ist ?
l.G. Roberto
Warum dieser Aufwand?hab den Config - Dialog noch mal erweitert. Es läst sich nun der Use - Pin Ein/Ausschalten.
Macht ja nix, wenn der USE -Pin sichtbar ist ?
l.G. Roberto
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo Roberto,
in diesem Beispiel ist es vieleicht nicht so tragisch.
Es gibt aber bestimmt mal Sachen, wo man eine DLL benötigt, die flexible Einstellungen hat.
Dann ist es für die Übersichtlichkeit schon gut, dass man die Ein- und Ausgänge richtig bezeichnet.
Außerdem reizt es mich, sowas hinzubekommen und ich denke ich habs hinbekommen.
Soweit ich das testen konnte funktioniert das bei mir auch.
Ich häng die DLL mal an, vieleicht will das ja mal jemand testen.
Bis dann
habe
in diesem Beispiel ist es vieleicht nicht so tragisch.
Es gibt aber bestimmt mal Sachen, wo man eine DLL benötigt, die flexible Einstellungen hat.
Dann ist es für die Übersichtlichkeit schon gut, dass man die Ein- und Ausgänge richtig bezeichnet.
Außerdem reizt es mich, sowas hinzubekommen und ich denke ich habs hinbekommen.
Soweit ich das testen konnte funktioniert das bei mir auch.
Ich häng die DLL mal an, vieleicht will das ja mal jemand testen.
Bis dann
habe
- Dateianhänge
-
- MinMaxMittel3.0.dll
- (14.5 KiB) 391-mal heruntergeladen
Re: höchsten Wert von 23 Leitungen ermitteln ?
Hallo habe.
Ich habe in der Konfig 8 Schieber gewählt. Und habe desen Ausführungen "länger" gestalltet. Habe dann eine bessere Auflösung.
Bei mir funktionieren "min., max., mittel" genau so, wie es sein soll. Incl. der "Led-Arie".
Habe besten Dank! Kann ich gut (so) gebrauchen.
Gruß von C mpander.
Ich habe in der Konfig 8 Schieber gewählt. Und habe desen Ausführungen "länger" gestalltet. Habe dann eine bessere Auflösung.
Bei mir funktionieren "min., max., mittel" genau so, wie es sein soll. Incl. der "Led-Arie".
Habe besten Dank! Kann ich gut (so) gebrauchen.
Gruß von C mpander.