Reihenfolge bei mehreren IOW

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
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Reihenfolge bei mehreren IOW

Post by rolf55 »

Ich mal wieder:-)
Also ich habe 3 IOW40 und 4 Spinwarriors in meinem Sytem. Alles klappte super bis ich die IOW wechseln musste. Mein Problem ist nun, das sich die Chips in einer andren Reihenfolge anmelden und somit die Durchnummerierung LED und Schalter geändert hat. Was IOW 1 war, ist jetzt 3.
Die IOW arbeiten im 8Martix-switch und LED -Matrix mode.
Wie kann ich die Handles neu verteilen?
Ich weiss , das es über die Get_serialnumber funktion geht, aber die kann ich erst aufrufen, wenn die Handles für die Chips schon vergben sind.
Versuche ich jetzt die Handles anhand der Serials neu zu sortieren stürzt das Programm ab.
Hat jemand ne Ide?

VB6.=
Public Sub init_IOW()
Dim i As Long
Dim ser1(18) As Byte
Dim ser2(18) As Byte
Dim ser3(18) As Byte
Dim res
'----- test auf iow
iowHandles(0) = IowKitOpenDevice()
If iowHandles(0) = 0 Then
MsgBox "Can not open device!", 0, "Error"
End
End If
'----- IOW zählen
numIows = IowKitGetNumDevs()
cockpit.Label7.Caption = numIows
'-------Handles vergeben
For i = 2 To numIows
iowHandles(i - 1) = IowKitGetDeviceHandle(i)
Next i
'-----Serials abfragen
i = IowKitGetSerialNumber(IowKitGetDeviceHandle(1), ser1(0)) '34E5
i = IowKitGetSerialNumber(IowKitGetDeviceHandle(2), ser2(0)) '4D11
i = IowKitGetSerialNumber(IowKitGetDeviceHandle(3), ser3(0)) '4d10
cockpit.Label9.Caption = ser1
cockpit.Label17.Caption = ser2
cockpit.Label15.Caption = ser3


Und jetzt soll der Chip mit der Serial 4D10 das iow_handle 0
der Chip mit der Serial 34E5 das iow_handle 1
der Chip mit der Serial 4D11 das iow_handle 2

Wie mache ich das?
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: Reihenfolge bei mehreren IOW

Post by friend-of-rq »

Hallo rolf55,
Wie kann ich die Handles neu verteilen?
nicht verteilen ... richtig zuordnen !

ich habe das wie folgt gelöst:

Code: Select all

Function IOW_OPEN() as integer   
   '--- IOW-DLL wird geöffnet und alle IOW werden eigelesen
   dim n as integer
   dim sn(7) as word
   for n= 1 to 64
      IOW_DH(n)=0
      IOW_SN(n)=""
      IOW_Type(n)=""
      iow_revs(n)=""
   next n
   IOW_DEV_handel = IOW_open_dev
   IF IOW_DEV_handel <> 0 then
      IOW_DN = iow_get_nd
      if IOW_DN > 0 then
         for n=1 to IOW_DN
            IOW_DH(n) = iow_get_dh(n)
            iow_get_sn(IOW_DH(n),sn(0))
            IOW_SN(n)=chr$(sn(0))+chr$(sn(1))+chr$(sn(2))+chr$(sn(3))+chr$(sn(4))+chr$(sn(5))+chr$(sn(6))+chr$(sn(7))
            IOW_Type(n)= right$(hex$(IOW_Get_PID(IOW_DH(n))),4)
            IOW_REVS(N) = right$(hex$(IOW_Get_Revision(IOW_DH(n))),4)
            if IOW_Type(n)= "1500" then
               IOW_TypeBez(n)="IOW40"
               IOW_NX_0(n)=5
               IOW_NX_1(n)=8
               IOW_PX(n)=4
            elseif IOW_Type(n)= "1501" then
               IOW_TypeBez(n)="IOW24"
               IOW_NX_0(n)=3
               IOW_NX_1(n)=8
               IOW_PX(n)=2
            elseif IOW_Type(n)= "1503" then
               IOW_TypeBez(n)="IOW56"
               IOW_NX_0(n)=8
               IOW_NX_1(n)=64
               IOW_PX(n)=7
            else
               IOW_TypeBez(n)=""
               IOW_NX_0(n)=0
               IOW_NX_1(n)=0
               IOW_PX(n)=0
            end if
         next n
         result = IOW_DN
      else
         result=0   
      end if
   else
      IOW_DN=0
      result=-1
   end if
end function
später bei den anderen Funktionen brauche ich mich um den Handle und die anderen IOW speziellen Parameter nicht mehr kümmern z.B.

Code: Select all

function iow_write_P0(ID as integer) as long
   if ID > 0 then
      if  IOW_Write(IOW_DH(ID),0,IOW_OUT_DATA(0),IOW_NX_0(ID))  =  IOW_NX_0(ID) then
         result=1
      else
         result=0
      end if
   end if
end function
oder

Code: Select all

function iow_write_P1(ID as integer) as long
   if ID > 0 then
      if  IOW_Write(IOW_DH(ID),1,IOW_OUT_DATA(0),IOW_NX_1(ID))  =  IOW_NX_1(ID) then
         result=1
      else
         result=0
      end if
   end if
end function
bei dem Aufruf meiner IOW-Funktionen übergebe ich nur noch die IOW-ID des verwendeten IOWarriors.
Nach dem öffner IOW_OPEN überprüfst Du die IOW-SN die Du verwenden möchtest und
ordnest die entstrechenden IDs deiner Anwendungen(My_Tastatur , My_LCD) zu

Code: Select all

My_Tastatur =0
My_LCD=0
for n=1 to IOW_DN
   if IOW_SN(n)="000034E5" then 
      My_Tastatur = n  
   elseif IOW_SN(n)="00000123" then 
      My_LCD=n
   end if
next n
in den Anwendungen verwendest du die IOW-Funktionen wie folgt:

Code: Select all

if My_LCD <>0 then iow_write_P1(My_LCD)
Last edited by friend-of-rq on Sat Nov 22, 2008 3:01 pm, edited 1 time in total.
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Re: Reihenfolge bei mehreren IOW

Post by rolf55 »

Vielen dank für die schnelle und ausführliche Anrwort. Werde mich gleich daran machen . Muss mich erst mal in deinen Code reinlesen.
Nochmals Danke und ein schönes Wochenende
Rolf
Post Reply