Reconnect

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

Moderator: Guido Körber

Prefekt
Posts: 23
Joined: Wed Mar 19, 2008 6:15 pm

Reconnect

Post by Prefekt »

Hallo,
ist es möglich, das der IOW wirder connected wird, wenn das USB Kabel ausgestöpselt und wieder eingestöppselt wird?
Zu erkennen, das der IOW nicht mehr connected ist funktionit, aber das erneute connecten funktioniert nicht mehr!
Hat jemand eine Idee?

servus
Volker
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Reconnect

Post by Christoph Jung »

Mal nach WM_DEVICECHANGE googlen. Damit kann ein USB-Event erkannt werden.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Prefekt
Posts: 23
Joined: Wed Mar 19, 2008 6:15 pm

Re: Reconnect

Post by Prefekt »

Hallo,

das der IOW abgestöpselt wurde krieg ich ja mit.
Wenn ich das Programm dann beende, den IOW wieder anstöpsel und das Programm starte geht es wieder.
Nur wenn ich das Programm laufen lasse, merke der der IOW nicht mehr da ist, mache ich ein CloseDevice und anschließend wieder ein OpenDecvice usw. nur das geht nicht.
Wo liegt der Unterschied, was passiert beim Schließen eines Programms, das beim CloseDevice nicht passiert. Das Programm ist in VB.net geschrieben.


Gruß
Volker
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Reconnect

Post by Christoph Jung »

Also wenn man das Programm schließt, ohne IowKitCloseDevice aufzurufen bleib der Prozess am Leben und blockiert damit alle anderen Programme, die einen IO-Warrior nutzen wollen (sie bekommen keine Geräte mehr angezeigt). Also beim Beenden des Programms IMMER IowKitCloseDevice aufrufen.

Wenn man DeviceChange nutzt hat man leider den Effekt, dass er nicht immer alle Geräte aufruft. Wenn man das mittels Button oder Timer macht hat man diesen Effelt nicht. Warum kann ich leider nicht sagen, da ich das Verhalten nicht nachvollziehen kann.

Warum geht das mit dem CloseDevice, OpenDevice usw. nicht? Was soll das Programm überhaupt machen?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Prefekt
Posts: 23
Joined: Wed Mar 19, 2008 6:15 pm

Re: Reconnect

Post by Prefekt »

Hallo,

also Problem ist folgendes... Meine Software verbindet sich über die Silex (das ist ein WLAN USB Extender) mit dem Warrior und steuert dort einen Kammerakopf.
Wenn nun die WLAN Verbindung unterbrochen wird, möchte ich gerne eine Meldung bringen (was auch funktioniert) und wenn die Verbidung wieder steht (was der Benutzer per Ok Button bestätigen muss) möchte ich die Verbindung wieder aufbauen.
Funktioniert nicht, so lange ich im Progamm bleibe, obwohl ich IowKitCloseDevice aufrufe.
Unterbreche ich die WLAN-Verbindung, beende ich das Programm, stelle die WLAN-Verbingung wieder her und starte das Programm wieder, funktioniert das alles wunderbar.
Nur halt nicht wenn ich im Programm bleibe... aber das muss doch auch gehen!!!

Viele Grüße
Volker
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Reconnect

Post by Christoph Jung »

Bleibt das Programm denn hängen (also kann man z.B. Buttons betätigen), oder läuft es regulär weiter?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Prefekt
Posts: 23
Joined: Wed Mar 19, 2008 6:15 pm

Re: Reconnect

Post by Prefekt »

Hi ich hab das Lesen und Schreiben jeweils in einer seperaten Fuktion und mit try catch abgefangen. Ich merke so, das der IOW nicht mehr connected ist und ich mach ein CloseDevice und die startprozedur wieder von vorne!

Das gleiche Problem ist, wenn der IOW nicht angestöpselt ist und das Programm wird gestartet. Gibt es dann eine möglichkeit, wenn ich den IOW einstecke, einen erneuten connect zu machen, ohne das Programm zu beenden, das ist ja der gleiche fall?

Einfach Programm starten, es gibt kein iowHandeld, dann IOW einstecken und connecten...

Viele Grüße
Volker
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: Reconnect

Post by friend-of-rq »

Hallo Prefekt,

IOW-Socket-Server verwenden ... macht am wenigsten Arbeit und funktioniert :-)

Gruss Ralf
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Reconnect

Post by Christoph Jung »

Immer diese eigenwerbung hier ;)

Aber er hat recht. Der IOW-Server ist eine nette Sache.

Es gibt noch eine Möglichkeit die funktionieren sollte (habs gerade mal schnell zusammengehackt).
Man kann einen Timer nehmen, der alle X Sekunden schaut ob alle IOWs noch da sind.
Ich hab den Timer auf 2 Sekunden gestellt (SetTimer()) und er findet alle IOWs die ich dann anstöpsel und wegnehme.

Code: Select all

void Csample_hotplugDlg::OnTimer(UINT_PTR nIDEvent)
{
	m_List.ResetContent(); //Listbox leeren
	CString list;
	WCHAR serial[9];
	BOOL ret;

	memset(&m_handles, 0, 16);

	m_ioHandle = NULL;
	m_ioHandle = IowKitOpenDevice();

	for (ULONG i = 0; i < 16; i++)
	{
		m_handles[i] = IowKitGetDeviceHandle(i);
		ret = IowKitGetSerialNumber(m_handles[i], serial);

		//Ist Seriennummer da, dann eintrag in Listbox
		if(ret == TRUE)
		{
			list.Format(_T("%s"), serial);
			m_List.AddString(list);
		}
	}

	CDialogEx::OnTimer(nIDEvent);
}
Nach der Auflistung aller IOWs dann nur noch die Routine zum Reconnect durchführen und passt. Ach ja ein IowKitCloseDevice ist nicht zwingend notwendig.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Prefekt
Posts: 23
Joined: Wed Mar 19, 2008 6:15 pm

Re: Reconnect

Post by Prefekt »

Hallo,
erst mal danke für die Antworten.

Das Problem ist aber genau der Reconnet. Der funktioniert nicht immer. Ein paar mal hat es funktioniert, aber meistens bekomme ich keine Verbindung mehr zum IOW wenn der einmal abgezogen war.

Hat das mal jemand getestet.

1. IOW einstekcen
2. Programm starten
3. IOW rausziehen
4. Programm merkt, das der IOW nicht mehr da ist
5. IOW wieder einstecken
6. Reconnect durchführen.

Der Reconnect funktioniert fast nie. Erst wenn man das Programm beendet und wieder startet kommt eine Verbindung zu stande.
@Christopf: Hast du mal den IOW abgestöpselt und wieder angestöpselt? Wird der gleiche IOW einmal erkannt und einmal nicht?


Gruß
Volker
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: Reconnect

Post by friend-of-rq »

@Prefekt

probiere doch einfach mal den IOW-Socket-Server an deinem IOWs aus ...

probieren und für private Nutzung kostet doch nichts :-)

dabei beobachte wie der Server sich verhält ... LOG-Meldungen reichen ... wenn Du die IOWs verbindest(steckst) bzw. trennst.

Die Erkennung der IOWs funktioniert im Socket-Server über das Betriebssystem (WM_DEVICECHANGE)

Gruss Ralf
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Reconnect

Post by Christoph Jung »

Also wenn ich die Timer-Funktion nehme die ich gepostet hab wird er immer wieder erkannt, bzw. erkannt, dass er IO-Warrior nicht mehr da ist. Egal wie viele Versuche ich mache.

Was wird denn überhaupt mit dem IO-Warrior gemacht? Einen IO-Warrior im Betrieb abziehen ist immer eine blöde Idee, vor allem wenn gerade geschrieben wird.

@friend-of-rq

Wenn sein Proramm sonst fertig ist und nur das Problem besteht würde ich mich auch schwer tun alles komplett umzukrempeln. Egal wie toll der Server ist.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: Reconnect

Post by friend-of-rq »

@ Christoph Jung

>> ... würde ich mich auch schwer tun alles komplett umzukrempeln. Egal wie toll der Server ist.

muss er ja nicht ... nur gucken wie der Server sich mit seinen IOWs und die Probleme damit verhält ... LOG-Ansicht

Gruss Ralf
Prefekt
Posts: 23
Joined: Wed Mar 19, 2008 6:15 pm

Re: Reconnect

Post by Prefekt »

Hi,

@Christoph, komisch das es bei dir geht. Sollte es da einen unterschied zwischen vb und c?
Das währe schlecht, dann müßte ich alles umkrempeln ... Ich werde das mal in c oder c# probieren.
Könnte das an dem .net Framework liegen?

@Ralf, das mit dem Log werde ich mal versuchen. Mal sehen was raus kommt.

Das Problem ist das der IOW an einer Silex hängt und manchmal die Verbindung unterbrochen wird. Ich will vor dem Schreiben sicher gehen, das der IOW noch da ist und wenn nicht einen Reconnect machen.

Absichtlich abziehen ist nicht so gut, das stimmt :-)

Gruß
Volker
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Reconnect

Post by Christoph Jung »

Ich habe wenig erfahrung mit C# und USB / IO-Warrior. Aber VB sollte eigentlich kein Problem sein (außer das es etwas sehr betagt ist ;) ).
Und evtl liegt das Problem auch darin, dass das Betreibsystem beim Abreißen der Verbinung zum Silex den USB nicht trennen kann oder irgendwas in der art. Wurde denn schon Versucht das ganze lokal zu betreiben und diese Fehler auszuschließen?

Ich habe hier eine Silex SX-1000U im LAN (kein WLAN) und da geht es jedenfalls mit dem Timer ohne gößere Probleme. Hab aber gesehen, dass man bei SX Virtual Link einen Intervall zum Aktualisieren eingeben muss.

Ich packe in den Anhang mal ein kleines Testtool, was alle 2 Sekunden schaut ob ein IO-Warrior da ist/neu ist/weg ist und Listet danach die Seriennummern in eine Listbox auf.
Attachments
sample_hotplug.zip
(817.79 KiB) Downloaded 259 times
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply