Hallo,
wir (die GRS-KG) setzten den IOW40 für ein relativ einfaches Interface ein. Wir benutzen das iowj kit von wagner-ibw.
Leider mussten wir feststellen das bei dem Lesen der Pins nur sehr schlechte abtastraten erreicht werden.
Soll heissen: Wir nehmen einen Quarz der einen Takt von sagen wir mal 10 Hz erzeugt. Diese Zustandsänderung wird kaum erfasst. Getestet haben wir dies mit dem wieder ausgeben der Änderung. Wenn wir hierbei die Frequenz messen enspricht diese nicht den 10 Hz. Nur bei 1 Hz funktioniert dies zufriedenstellend.
Vom Codemercs Support haben wir erfahren das min. 60 Hz möglich sein sollten. Bei der Ausgabe Trifft dies vollkommen zu.
Hat jemand einen Rat?
Vielen Dank im Vorraus.
Mfg
Karl Glatz
IOW40 Java Input Geschwindigkeit
Moderator: Guido Körber
Hallo,
das Eingangssignal muss auch das richtige Tastverhältnis haben, damit der IOwarrior einen Wechsel zuverlässig erkennt. D.H. jedes Signal (low bzw. high) muss für >= 8 (besser 10?) Millisekunden stabil sein.
Ich glaube eigentlich nicht, dass hier ein Problem mit der Java-Anbindung vorliegt.
Eberhard
das Eingangssignal muss auch das richtige Tastverhältnis haben, damit der IOwarrior einen Wechsel zuverlässig erkennt. D.H. jedes Signal (low bzw. high) muss für >= 8 (besser 10?) Millisekunden stabil sein.
Ich glaube eigentlich nicht, dass hier ein Problem mit der Java-Anbindung vorliegt.
Eberhard
Read Performance
Hallo Karl,
poste oder schicke mir doch bitte mal Deinen verwendeten Code. Performance-Messungen habe ich bei IOWJ noch nicht durchgeführt.
Thomas
poste oder schicke mir doch bitte mal Deinen verwendeten Code. Performance-Messungen habe ich bei IOWJ noch nicht durchgeführt.
Thomas
Read - Performanzmessung
So, ich habe mal auf die Schnelle einen Meßaufbau zusammengesteckt:
Taktgenerator (2 Gatter 7414) und Zähler 7493. Ausgänge A-D mit IOW40 Port 2, Bit 4-7, verbunden. Am Ausgang A Frequenzmessung mit Hameg HM8122 (die sechs Nachkommastellen vernachlässige ich jetzt mal ;-).
Softwaremäßig habe ich erst einmal den IowPortChangeListener probiert (eigentlich der ungünstigste Fall, weil für jeden empfangenen Pin-Report ein eigener NotifierThread gestartet wird). Im Prog gebe ich die Zahlen aus und kontrolliere manuell, ob es in der Folge 0 ... 15 Lücken gibt.
Source:
Output:
Bei 50 Hz funktioniert das zuverlässig, ab 63 Hz gibt es Aussetzer.
Meine Konfiguration (Dell) ist in diesem Thread beschrieben (und ein mögliches, anderes Performanzproblem auf der Write-Seite).
Thomas
Taktgenerator (2 Gatter 7414) und Zähler 7493. Ausgänge A-D mit IOW40 Port 2, Bit 4-7, verbunden. Am Ausgang A Frequenzmessung mit Hameg HM8122 (die sechs Nachkommastellen vernachlässige ich jetzt mal ;-).
Softwaremäßig habe ich erst einmal den IowPortChangeListener probiert (eigentlich der ungünstigste Fall, weil für jeden empfangenen Pin-Report ein eigener NotifierThread gestartet wird). Im Prog gebe ich die Zahlen aus und kontrolliere manuell, ob es in der Folge 0 ... 15 Lücken gibt.
Source:
Code: Select all
package de.wagner_ibw.test;
import de.wagner_ibw.iow.IowFactory;
import de.wagner_ibw.iow.Iow40;
import de.wagner_ibw.iow.IowPort;
import de.wagner_ibw.iow.IowPortChangeListener;
public class ReadPerformanceTest implements IowPortChangeListener{
/*
* Port Changed Callback
* @see de.wagner_ibw.iow.IowPortChangeListener#portChanged(de.wagner_ibw.iow.IowPort)
*/
public synchronized void portChanged(IowPort port) {
int p = (port.getData() & 0xf0) >> 4;
if (p == 0) System.out.println();
System.out.print(p + " ");
}
public static void main(String[] args) {
Iow40 dev40 = null;
ReadPerformanceTest rpt = new ReadPerformanceTest();
IowFactory devs = IowFactory.getInstance();
try {
dev40 = devs.getIow40Device();
dev40.autonomous(true);
dev40.getPort(2).addPortChangeListener(rpt);
}
catch(Exception e) {
System.exit(1);
}
}
}
Code: Select all
8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Meine Konfiguration (Dell) ist in diesem Thread beschrieben (und ein mögliches, anderes Performanzproblem auf der Write-Seite).
Thomas
Auswertung
Ich habe noch einmal darüber geschlafen ;-). Eine gemessene Frequenz von 50 Hz bedeutet ja eigentlich, dass pro Schwingung zwei Reports gesendet werden müssen:
Die "Reportfolgefrequenz" dürfte somit bei 100Hz liegen (Das entspricht auch dem Abtasttheorem).
Unter der Annahme, dass 63 Hz richtig gemessen werden können, beträgt also die Mindestimpulsdauer ca. 8ms. (Das hat Eberhard gemeint, der auch so auf die 8 ms gekommen ist.)
Kann das bitte mal jemand bestätigen oder dementieren (die Herleitung, nicht den Wert der ermittelten Millisekunden)? Denn, was nützen uns wirre Vermutungen ;-) Danke!
Code: Select all
|---| f=50Hz,T=20ms (gemessen)
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
A | | | | | | | | | | | | | | |
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
+---+ +---+ +---+ +---
B | | | | | | |
----+ +---+ +---+ +---+
+-------+ +-------
C | | |
--------+ +-------+
+---------------
D |
----------------+
0 1 2 3 4 5 6 7 8 9 A B C D E F
Unter der Annahme, dass 63 Hz richtig gemessen werden können, beträgt also die Mindestimpulsdauer ca. 8ms. (Das hat Eberhard gemeint, der auch so auf die 8 ms gekommen ist.)
Code: Select all
|---| f=63Hz,T~16ms (gemessen)
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
A | | | | | | | | | | | | | | |
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|-| t~8ms (Mindestimpulsdauer)
+-+ +-+
A' | | | |
--+ +-----------+ +-------------
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Ja das ist so vom Prinzip her richtig.
Die IOW40/24 können alle 8msec einen Report abschicken, bzw. werdem vom Host alle 8msec aufgefordert einen Report zu schicken. Dabei kann es zu leichten Abweichungen kommen, der USB arbeitet mit "Frames" von je 1msec, die Abfrage kommt in jedem 8. Frame, genau wann im Frame kann variieren.
Intern hat der IO-Warrior auch noch ein paar Verzögerungen. Die Pins werden jede Millisekunde abgefragt, hat sich etwas geändert, dann werden die neuen Werte in einen Buffer geschrieben und zum Senden freigegeben. Ist das Sendefifo des USB frei, dann werden die neuen Werte hineingeschrieben, wenn nicht kann es sein, dass diese Werte von einer weiteren Änderung des Pinstatus wieder überschrieben werden.
Entsprechend kann man Signale mit 50Hz noch zuverlässig erkennen, bei 62,5Hz ist rechnerisch Schluss, praktisch kann es schon vorher Probleme geben.
Die IOW40/24 können alle 8msec einen Report abschicken, bzw. werdem vom Host alle 8msec aufgefordert einen Report zu schicken. Dabei kann es zu leichten Abweichungen kommen, der USB arbeitet mit "Frames" von je 1msec, die Abfrage kommt in jedem 8. Frame, genau wann im Frame kann variieren.
Intern hat der IO-Warrior auch noch ein paar Verzögerungen. Die Pins werden jede Millisekunde abgefragt, hat sich etwas geändert, dann werden die neuen Werte in einen Buffer geschrieben und zum Senden freigegeben. Ist das Sendefifo des USB frei, dann werden die neuen Werte hineingeschrieben, wenn nicht kann es sein, dass diese Werte von einer weiteren Änderung des Pinstatus wieder überschrieben werden.
Entsprechend kann man Signale mit 50Hz noch zuverlässig erkennen, bei 62,5Hz ist rechnerisch Schluss, praktisch kann es schon vorher Probleme geben.
Danke für eure Antworten!
Ich habe das auch mit dem IowPortChangeListener realisiert.
Hab den code leider immoment nicht hier, daher kann ich ihn dir (towaibw) nicht zukommen lassen, das werde ich aber noch tun.
Desweiteren werd ich dein Testprogramm mal auf meinem Entwicklungsrechner testen und die Ergebnisse posten!
50 Hz wären für unsere "Anwendung" völlig akzeptabel!
Danke für den Schnellen Support :)
Mfg
Karl
Ich habe das auch mit dem IowPortChangeListener realisiert.
Hab den code leider immoment nicht hier, daher kann ich ihn dir (towaibw) nicht zukommen lassen, das werde ich aber noch tun.
Desweiteren werd ich dein Testprogramm mal auf meinem Entwicklungsrechner testen und die Ergebnisse posten!
50 Hz wären für unsere "Anwendung" völlig akzeptabel!
Danke für den Schnellen Support :)
Mfg
Karl