Hallo liebe Delphi-Gemeinde,
jetzt habe ich nach etlichen Monaten wieder mal ein Problem, bei dem ich leider keine eigene Lösung finde und das einen Eintrag hier im Forum rechtfertigt
. Ich bin immer noch (unter anderem) dabei an meinem PC_DIMMER Projekt zu programmieren, was bislang auch sehr reife Früchte trägt. <Werbung> Ich bin mittlerweile so weit, dass das Programm viele Funktionen aus dem professionellen Lichttechnik-Bereich beherrscht (Bühnenansicht, Musikgetriggerte Showabläufe, Pluginstruktur, etc.).
http://www.pcdimmer.de </Werbung>
Problembeschreibung: Nun habe ich ein Hardwareproblem mit der seriellen Schnittstelle. Ich gebe meine Daten binär über den Comport aus und nutze dafür die Comport-Komponente von Marco Cocco (wird hier im Forum öfters verwendet). Die Daten werden mit 115,2 kBaud gesendet und es häufen sich sehr viele Daten an, da die Kanalwerte der Scheinwerfer z.T. sehr häufig aktualisiert werden. Jetzt habe ich bei einem Stresstest (viele schnelle Lauflichter parallel, etliche Kanalwertänderungen nacheinander) festgestellt, dass bei aktiviertem FIFO-Puffer der
COM-Ports (egal ob intern oder per USB-2-RS232-Adapter) mein Programm nach ca. 10-20 Minuten abstürzt. Nach ewigem Fehlersuchen habe ich dann mal den FIFO-Puffer verzweifelt ausgeschaltet und nun läuft alles problemlos etliche Stunden ohne Absturz.
Endlich meine Frage:
Wie kann ich den FIFO-Puffer automatisch ausschalten, oder wenigsten Überprüfen, ob er ausgeschaltet ist und ggf. eine Warnmeldung ausgeben? Ich habe mal gesucht, aber bin hier im Forum auf nichts gestoßen und Google gibt auch nur darüber Infos, dass der FIFO-Puffer bei manchen prof. Messgeräten der Elektronik Probleme machen kann (schätze also gleiches Problem wie bei mir). Es werden wie gesagt sehr schnell viele Datenpakete gesendet (6 Bytes pro Wertänderung. Es wurden beim Test ca. 40 Kanäle geändert. Pro Sekunde passiert das ca. 4 bis 10 Mal, was irgendwas um die 10 Änderungen/s *40 Kanäle *6 Bytes *8 Bit=19200 Bit/s bedeutet. Dazu dann die Start-/Stopbits des RS232-Protokolls und dann kommt der FIFO-Puffer vermutlich nicht mehr mit -> Folge ist wahrscheinlich eine Art Zugriffsverletzung)
Ich nutze Delphi 7 und etliche Komponenten (
Indy, Bass, etc.). Die Comportfunktionen sind jedoch in einem externen Plugin ausgelagert.
Zweite Frage (eher nebensächlich):
Mein Programm sucht automatisch freie Comports und wählt diese aus. Gibt es eine Möglichkeit die internen Modems von dieser Suche/Aktivierung auszuschließen? Vor allem bei Laptops mit internem Soft-Modem stürzt mein Programm nämlich immer ab, wenn der Comport des Modems ausgewählt wird (Herstellerunabhängiges Problem). Der Fehler tritt nur beim Beenden des Programmes auf.
Das Projekt ist Open-Source, sonst würde ich solche Fragen hier wahrscheinlich nicht stellen - wäre nett, wenn mir jemand unter die Arme greift
Besten Dank,
Christian!
PS (auch nebensächlich und zudem Off-Topic): falls jemand ein paar Delphi-Funktionen für ein Darstellen von Wavedaten über die BASS-
DLL (oder auch anders) hat, wird herzlich um Hilfe gebeten. Ich habe zwar eine Wave-Darstellung, jedoch wird die Auflösung beim hineinzoomen nicht angepasst, sodass ich nur die Darstellung auseinanderziehe und Lücken bekomme.
Also aus: .|...||..|... wird . | . . . | | . . | . . .