IOW40 Java Input Geschwindigkeit

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
loeppel
Posts: 2
Joined: Sun Nov 05, 2006 12:50 pm

IOW40 Java Input Geschwindigkeit

Post by loeppel »

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
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

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
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Read Performance

Post by towaibw »

Hallo Karl,

poste oder schicke mir doch bitte mal Deinen verwendeten Code. Performance-Messungen habe ich bei IOWJ noch nicht durchgeführt.

Thomas
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Read - Performanzmessung

Post by towaibw »

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:

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);
		}
	}
}
Output:

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 
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
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Auswertung

Post by towaibw »

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:

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
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.)

Code: Select all

  |---| f=63Hz,T~16ms (gemessen)

    +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
A   | | | | | | | | | | | | | | |
  +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+

    |-| t~8ms (Mindestimpulsdauer)

    +-+           +-+
A'  | |           | |     
  --+ +-----------+ +-------------
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!
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

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.
loeppel
Posts: 2
Joined: Sun Nov 05, 2006 12:50 pm

Post by loeppel »

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
Post Reply