Update 09.06.2013: noch ein Leistungstest (mit PureBasic und C)
[Blockierte Grafik: https://dl.dropboxusercontent.com/u/68438584/Arduino-Control/Performance-Test/Performance-Test%20-%20PureBasic%20x86.jpg]
die Dateien gibt es im ersten Beitrag
Update 09.06.2013: noch ein Leistungstest (mit PureBasic und C)
[Blockierte Grafik: https://dl.dropboxusercontent.com/u/68438584/Arduino-Control/Performance-Test/Performance-Test%20-%20PureBasic%20x86.jpg]
die Dateien gibt es im ersten Beitrag
Update 1.0.0.3
16.03.2013 - 1.0.0.3 - behoben: die Hintergrundfarbe der Achsenbeschriftung wurde nicht komplett übernommen
07.03.2013 - 1.0.0.2 - neue Funktion: _MG_Graph_optionen_position () -> verschiebt einen Graphen in der GUI oder passt die Größe neu an
06.03.2013 - 1.0.0.1 - behoben: geplottete Werte an der ersten Position des Graphen waren fehlerhaft
und die PureBasic-Version hinzugefügt
....man bin ich blöd.
...traurig, dass ich nicht selber darauf gekommen bin...
vielen Dank.
das klappt natürlich
Hi Leute,
Kennt jemand eine einfache Möglichkeit Binärdaten bitweise auszulesen?
...ggf. gibt es ja eine UDF, aber ich bin bis jetzt nicht fündig geworden.
...nehmen wir mal an, ich habe ein Byte mit dem Wert 154. (Binär sieht es dann so aus: 10011010)
nun nehme ich meine imaginäre Funktion:
$Bit = _BitRead ($meinByte, 3) --> der zweite Parameter ist die Bitstelle (von rechts ausgehend), die zurückgegeben werden soll / $Bit wäre in diesem Fall: 0
oder so eine imaginäre Funktion:
$Bits = _BitRead ($meinByte)
Ergebnis wäre ein Array:
$Bits[0] = 0
$Bits[1] = 1
$Bits[2] = 0
$Bits[3] = 1
$Bits[4] = 1
$Bits[5] = 0
$Bits[6] = 0
$Bits[7] = 1
gibt es sowas oder lässt es sich einfach mit möglichst wenig Zeilen realisieren?
jap, habe es vergessen
super, das ist perfekt
...vielen Dank
Hi Leute.
habe da ein kleines Problem....
Wenn ich bei einer skalierbaren GUI die Größe ändere, dann verschwindet das von GDI+ gezeichnete Bild.
Habe mal ein quick and dirty Beispiel eingefügt. Kann man das irgendwie korrigieren?
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ScreenCapture.au3>
Opt("GUIOnEventMode", 1)
$hGUI = GUICreate("test", 500, 500,-1,-1, $WS_SIZEBOX)
GUISetState()
GUISetOnEvent ($GUI_EVENT_CLOSE, "_Exit", $hGUI)
GUIRegisterMsg ($WM_SIZE, "WM_SIZE")
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
$hBitmap = _ScreenCapture_Capture("", 0, 0, 500, 500)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_GDIPlus_GraphicsDrawImageRect ($hGraphic, $hImage, 0, 0, 500, 500)
While (1)
Sleep (1000)
WEnd
Func WM_SIZE()
_GDIPlus_GraphicsDrawImageRect ($hGraphic, $hImage, 0, 0, 500, 500)
EndFunc
Func _Exit()
_GDIPlus_Shutdown ()
Exit
EndFunc
...achja... ich sollte noch erwähnen, dass das Bild während der Skalierung den Inhalt ändert, daher habe ich WM_SIZE() mit eingebaut. Hier im Beispiel ändert sich das Bild inhaltlich nicht weiter. ...da es ja nur ein Beispiel ist...
etwas späte Antwort....
OpenGl ist schon ganz interessant, aber ich komme nicht so wirklich damit klar.
yay
von mir auch alles Gute *tröööööt*
omg
naja... ich wohne wegen meinem Studium seit 3 Jahren in Magdeburg Akzent habe ich noch nicht... hoffe ich... obwohl
Dein Living Graph hatte ich auch schon mal zerpflückt. Ich musste mir einfach alles anschauen, was ich so im Netz gefunden hatte. Nun ist es ja doch eine eigene UDF geworden.
Ich werde die aber noch erweitern, so dass man z.B. auch mit vier Quadranten gut arbeiten kann.
..da habe ich gleich noch eine Frage...
Ich wollte eigentlich mit GUIRegisterMsg() prüfen, ob das Mausrad verwendet wurde, um so z.B. den Graphen zu zoomen. Das würde prinzipiell auch gehen, aber ein Nachrichtencode kann nur eine Funktion ansprechen. Wenn jemand die UDF verwenden würde und für sein Programm auch diesen Nachrichtencode benötigt, dann würde es zum Konflikt kommen.
also das...
[autoit]
GUIRegisterMsg(WM_MOUSEWHEEL, "Funktion_1")
GUIRegisterMsg(WM_MOUSEWHEEL, "Funktion_2")
Func Funktion_1()
...
EndFunc
Func Funktion_2()
...
EndFunc
...würde nicht funktionieren. In diesem Fall wird nur Funktion_2() ausgeführt. Gibt es da eine andere Möglichkeit?
schöne Ergebnisse. Es wäre echt schön gewesen, wenn man die Grafikkarte für GDI verwenden könnte So muss nunmal ein CPU-Kern alles machen.
UEZ:
zu AutoIt kam ich durch einen Internetkontakt, mit dem ich jetzt schon lange befreundet bin. "Kare", der hier auch mal ein paar Beiträge geschrieben hat, programierte einige Software um Treiber automatisiert zu installieren. Er schlug mir mehrmals vor, AutoIt auszuprobieren. ...es sei wohl sehr einfach. Die ersten Scripts, die ich dann so im Internet sah, schreckten mich total ab. Ich konnte bis dahin gerade mal ein wenig C und war noch etwas überfordert. Er programmierte viel damit. z.b: einen Builder, mit dem man Rettungs-CDs erstellen kann (LSP-Builder).
Irgendwann vor knapp 2 Jahren wollte ich für meine RettungsCDs ein grafisches Menü haben, da der GRUB-Bootloader auf textbasis nicht wirklich toll aussieht. Ich habe es auch geschaft, aber es war verdammt viel Arbeit. ...aber so etwas kann man doch keinem zumuten... .....kann man das nicht automatisieren? ..hmmm... Ein Programm mit einer schönen Oberfläche ?
Bis heute kann ich mit C keine GUI erstellen. ...also was nehmen?! Ha! Backpapier... ähh... AutoIt
Ich habe mir hier im Forum die deutsche Hilfe heruntergeladen und dann klein angefangen. Und siehe da... nach einem Tag war die erste Version fertig.. ... mein erstes AutoIt-Programm. Dieses Erfolgserlebnis hat mich daher etwas geprägt und ich begann viel Freude daran zu entwickeln. Nach kurzer Zeit war mein Programm mit knapp 4000 Zeilen fertig und habe es veröffentlicht: http://www.livesystem-pro.de/showthread.php…fo-Download-FAQ
Mein erstes Programm, das Bilder (wenn auch extern) bearbeiten konnte und so konvertierte, dass es für den Bootloader darstellbar ist.
Seit kurzem bin ich auf dem Microcontroller-Trip. Ich habe mir ein Raspberry Pi zugelegt (richtig geiler, günstiger, kreditkartengroßer kleinst-Computer) und wollte mir ein Osziloskop programmieren. Aber GDI+ ist langsam :(. Ich suchte nach anderen Graphic-Engines und merkte, dass Direct2D, QuickDraw und Irrlicht nicht so das wahre sind. So stieß ich immer wieder auf dieses Forum insbesondere auf die Beiträge von UEZ, die mir zeigten was man mit GDI+ so alles machen konnte. Also musste ich erstmal ein Programm schreiben, um zu testen wie Leistungsstark GDI+ ist. Das ist hier dieses kleine Benchmark-Programm. Die Werte waren so gut, dass ich meine erste UDF schrieb. Und aus Dankbarkeit an dieses Forum habe ich mich hier registriert um wieder etwas zurückzugeben und um eventuell mal anderen Usern helfen zu können.
hier ist die UDF: [MultiGraph UDF] - dynamischer GDI+ LineGraph (als Software-Oszilloskop geeignet)
Wer will, kann ja mal Beispiel 3 starten und posten, wieviele FPS ihr bei den Standard-Einstellungen habt
lg
SBond
UEZ: nicht ganz
Ich studiere Elektrotechnik (ende des 5 Semesters von 7 / Bachelor of Engineering). Momentan sind wieder viele Prüfungen, aber das wird schon.
Es ist immer wieder interessant, wie unterschiedlich Ergebnisse ausfallen.
Ich habe mal ein Test mit unterschiedlichen Sprachen auf meinem Laptop gemacht.
Einfache Aufgabe: eine Zahl von 1 bis 1 Mrd hochzählen.
Die benötigte Zeit:
Autoit: 2 Minuten und 27 Sekunden
C: 8,2 Sekunden
PureBasic: 0,3 Sekunden
..ein enormer Zeitunterschied. Aber das AutoIt als Interpreter langsam ist, sollte ja bei den meisten bekannt sein. Für die allgemeinen Zwecke reicht es aber in der Regel aus.
Hier ist auch mal ein Test-Resultat:
Computer-Informationen
------------------------------------------------------------------------------------------------------------------------
CPU-Architektur: X64
CPU-Clock: 3399 MHz
CPU-Name: Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
Betriebssystem: WIN_7
Build: 7601
Service-Pack: Service Pack 1
Betriebssystem-Architektur: X64
Test 01/16: von 1 bis 100.000.000 zählen... (dies kann einige Sekunden dauern)
------------------------------------------------------------------------------------------------------------------------
gemessene Zeit: 6.8017 s
Test 08/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0
------------------------------------------------------------------------------------------------------------------------
Plottfrequenz: 34811.954 Hz
Bildfrequenz (FPS): 52.745 Hz
Plottzeit für einen Wert: 0.029 ms
Plottzeit für ein Bild (660 Werte): 19.14 ms
########################################################################################################################
##################################################### Dateibeginn ####################################################
########################################################################################################################
Software-Informationen
------------------------------------------------------------------------------------------------------------------------
Programmtitel: AutoIt/GDI+ Benchmark
Programmversion: 1.0.0.2
Autor: SBond
Erstellungsdatum: 15.01.2013
letztes Update: 17.01.2013
Lizenz: Freeware
Informationen: Mit diesem kleinen Programm ist es möglich, eine Leistungsanalyse von AutoIt und GDI+ durchzuführen,
um diese anschließend vergleichen zu können.
########################################################################################################################
allgemeine Benchmark-Informationen
------------------------------------------------------------------------------------------------------------------------
Datum: 19.01.2013
Zeit: 20:07:15
Benchmark-Dauer: 125.77 s
Grafik-breite 660
Grafik-höhe: 300
Grafik-Pixel: 198000
########################################################################################################################
Computer-Informationen
------------------------------------------------------------------------------------------------------------------------
CPU-Architektur: X64
CPU-Clock: 3399 MHz
CPU-Identifier: Intel64 Family 6 Model 42 Stepping 7
CPU-Name: Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
Betriebssystem: WIN_7
Build: 7601
Service-Pack: Service Pack 1
Betriebssystem-Architektur: X64
########################################################################################################################
Test 01/16: von 1 bis 100.000.000 zählen... (dies kann einige Sekunden dauern)
------------------------------------------------------------------------------------------------------------------------
gemessene Zeit: 6.8017 s
########################################################################################################################
Test 02/16: immer eine Linie in den Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0027 s
Plottfrequenz: 325.64 Hz
Bildfrequenz (FPS): 0.493 Hz
Plottzeit für einen Wert: 3.071 ms
Plottzeit für ein Bild (660 Werte): 2026.86 ms
Test 03/16: immer eine Linie in den Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 1
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0007 s
Plottfrequenz: 320.722 Hz
Bildfrequenz (FPS): 0.486 Hz
Plottzeit für einen Wert: 3.118 ms
Plottzeit für ein Bild (660 Werte): 2057.88 ms
Test 04/16: immer eine Linie in den Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 2
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0026 s
Plottfrequenz: 352.011 Hz
Bildfrequenz (FPS): 0.533 Hz
Plottzeit für einen Wert: 2.841 ms
Plottzeit für ein Bild (660 Werte): 1875.06 ms
########################################################################################################################
Test 05/16: immer eine Linie in den Frontbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0009 s
Plottfrequenz: 9568.923 Hz
Bildfrequenz (FPS): 14.498 Hz
Plottzeit für einen Wert: 0.105 ms
Plottzeit für ein Bild (660 Werte): 69.3 ms
Test 06/16: immer eine Linie in den Frontbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 1
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8 s
Plottfrequenz: 9656.5 Hz
Bildfrequenz (FPS): 14.631 Hz
Plottzeit für einen Wert: 0.104 ms
Plottzeit für ein Bild (660 Werte): 68.64 ms
Test 07/16: immer eine Linie in den Frontbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 2
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0001 s
Plottfrequenz: 9254.634 Hz
Bildfrequenz (FPS): 14.022 Hz
Plottzeit für einen Wert: 0.108 ms
Plottzeit für ein Bild (660 Werte): 71.28 ms
########################################################################################################################
Test 08/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0007 s
Plottfrequenz: 34811.954 Hz
Bildfrequenz (FPS): 52.745 Hz
Plottzeit für einen Wert: 0.029 ms
Plottzeit für ein Bild (660 Werte): 19.14 ms
Test 09/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 1
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8 s
Plottfrequenz: 34989.125 Hz
Bildfrequenz (FPS): 53.014 Hz
Plottzeit für einen Wert: 0.029 ms
Plottzeit für ein Bild (660 Werte): 19.14 ms
Test 10/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 2
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8 s
Plottfrequenz: 33889.125 Hz
Bildfrequenz (FPS): 51.347 Hz
Plottzeit für einen Wert: 0.03 ms
Plottzeit für ein Bild (660 Werte): 19.8 ms
########################################################################################################################
Test 11/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 1
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0002 s
Plottfrequenz: 33246.669 Hz
Bildfrequenz (FPS): 50.374 Hz
Plottzeit für einen Wert: 0.03 ms
Plottzeit für ein Bild (660 Werte): 19.8 ms
Test 12/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 2
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8.0001 s
Plottfrequenz: 32422.095 Hz
Bildfrequenz (FPS): 49.124 Hz
Plottzeit für einen Wert: 0.031 ms
Plottzeit für ein Bild (660 Werte): 20.46 ms
Test 13/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 3
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8 s
Plottfrequenz: 33691.75 Hz
Bildfrequenz (FPS): 51.048 Hz
Plottzeit für einen Wert: 0.03 ms
Plottzeit für ein Bild (660 Werte): 19.8 ms
Test 14/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 4
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8 s
Plottfrequenz: 31979.625 Hz
Bildfrequenz (FPS): 48.454 Hz
Plottzeit für einen Wert: 0.031 ms
Plottzeit für ein Bild (660 Werte): 20.46 ms
Test 15/16: nur den fertigen Backbuffer zeichnen... Messdauer: 8 sek, Rendermodus: 0, Rauschsignal 5
------------------------------------------------------------------------------------------------------------------------
eingestellte Messdauer: 8 s
gemessene Zeit: 8 s
Plottfrequenz: 21701 Hz
Bildfrequenz (FPS): 32.88 Hz
Plottzeit für einen Wert: 0.046 ms
Plottzeit für ein Bild (660 Werte): 30.36 ms
########################################################################################################################
Test 16/16: nur den fertigen Backbuffer zeichnen... , Rendermodus: 0, Einzelpixel (dies kann einige Sekunden dauern)
------------------------------------------------------------------------------------------------------------------------
gemessene Zeit: 6.9475 s
########################################################################################################################
###################################################### Dateiende #####################################################
########################################################################################################################
haha
mit arrays arbeite ich eigentlich öffters, aber der Code wurde einfach nur schnell und faul geschrieben
...ich wollte damit nur in der Fachhochschule die Rechner fix testen.
oh nein
dadurch das mein Code zu lang war ist wohl die ganze Nachricht gelöscht wurden
Ich bin ja so ein Amateur
Hi Leute,
hier ist ein kleines Programm, mit dem ihr die Leistung von AutoIt und GDI+ auf verschiedenen PCs testen und anschließend vergleichen könnt.
eventuell kann es ja jemand von euch gebrauchen
Update 09.06.2013:
alle Programme mit Quellcode im Anhang
noch ein Leistungstest (mit PureBasic und C)
[Blockierte Grafik: https://dl.dropboxusercontent.com/u/68438584/Arduino-Control/Performance-Test/Performance-Test%20-%20PureBasic%20x64%20-%201.jpg]
[Blockierte Grafik: https://dl.dropboxusercontent.com/u/68438584/Arduino-Control/Performance-Test/Performance-Test%20-%20PureBasic%20x64%20-%203.jpg]
lg
SBond
Hi Leute,
ich stelle euch meine kleine UDF vor. "MultiGraph" ist wie der Name schon sagt ein Graph, mit dem sich Abläufe zeitlich darstellen lassen. Zum Plotten der Werte wird GDI+ verwendet, wobei auch hohe FPS-Raten erreicht werden können. Gute CPUs (Intel i7) können bis zu 15000 Werte pro Sekunde plotten (bei 660 Werten/Oszillogramm -> ca. 22 FPS), Leistungsschwache CPUs (z.B. Intel CoreDuo) schaffen immerhin noch >5500 Werte pro Sekunde (ca. 8-9 FPS). Damit wäre es von der Darstellungsgeschwindigkeit als Osziloskop ausreichend geeignet.
Der Graph bietet verschiedene Darstellungsmodis und die Achsbeschriftungen werden dynamisch angepasst.
sonstige Funktionen:
- aktivierbares Antialiasing
- Interpolation der Darstellung
- Anpassung der Auflösung
- 10 verschiedene Graphen mit jeweils 10 Kanälen erstellbar (notfalls kann man die Anzahl auch in der UDF einfach erhöhen)
- Anpassung der Linienbreite/farbe/Tranzparenz
Aktuelle UDF-Version (Autoit): 1.0.0.3
16.03.2013 - 1.0.0.3 - behoben: die Hintergrundfarbe der Achsenbeschriftung wurde nicht komplett übernommen
07.03.2013 - 1.0.0.2 - neue Funktion: _MG_Graph_optionen_position () -> verschiebt einen Graphen in der GUI oder passt die Größe neu an
06.03.2013 - 1.0.0.1 - behoben: geplottete Werte an der ersten Position des Graphen waren fehlerhaft
Aktuelle UDF-Version (PureBasic): 1.0.0.0
23.05.2013 - 1.0.0.0 - Fertigstellung, verbesserte Funktionalität (gegenüber AutoIt)
hier gibt es noch die Performancestarke PureBasic-Version: HIER
--------------------------------------------------------------------------------------------------
zur PureBasic-Version: die PureBasic-Version bietet mehr Optionen und ist um das 80-100 fache Leistungsstärker.
Die AutoIt-Version schafft ca. 5.000 Werte/sek (bei ca. 7-10 FPS)
Die PureBasic-Version schafft ca. 500.000 Werte/sek (bei ca. 300-900 FPS) und eignet sich daher zur Echtzeitdarstellung von Zeitverläufen.
zusätzliche Funktionen: 4 Quadranten-Ansicht, Hilfslinien zum Messen, dynamische Berechnung der Achsenbeschriftung
--------------------------------------------------------------------------------------------------
aktuelle Funktionen der AutoIt-Version:
_MG_Graph_erstellen
_MG_Graph_optionen_position
_MG_Graph_optionen_allgemein
_MG_Graph_optionen_Rahmen
_MG_Graph_optionen_Hauptgitterlinien
_MG_Graph_optionen_Hilfsgitterlinien
_MG_Graph_optionen_Plottmodus
_MG_Kanal_optionen
_MG_Graph_initialisieren
_MG_Wert_setzen
_MG_Graph_updaten
_MG_Graph_clear
_MG_Graph_Achse_links
_MG_Graph_Achse_rechts
_MG_Graph_Achse_unten
_MG_Graph_Achse_unten_update
_MG_Graph_Achse_links_update
_MG_Graph_Achse_rechts_update
_MG_Graph_plotten
_MG_Graph_entfernen
Beispiel 1:
oben: 2 Kanäle (sin und tan-Funktion) mit Antialiasing und Interpolation
unten: scrolling-Graph ohne Antialiasing und Interpolation
[Blockierte Grafik: http://s14.directupload.net/images/130202/fgl6c9zt.jpg]
Beispiel 2:
Achtung bunt!!
Dies soll eigentlich nur die Einstellungsmöglichkeiten der einzelnen Elemente darstellen
[Blockierte Grafik: http://s14.directupload.net/images/130202/b3fsgrvv.jpg]
Beispiel 3:
...leicht erweiterter Graph. Hier kann man mal "Live" die einige Einstellungen ändern um zu schauen wie die UDF arbeitet.
Die GUI ist skallierbar! d.h. Der Graph ändert die größe dynamisch zur GUI-Größe. Die Achsen werden dynamisch angepasst.
[Blockierte Grafik: http://s14.directupload.net/images/130202/3dy3zy2s.jpg]
ich hoffe, dass es eventuell ein paar User glücklich macht.
lg
SBond