Pin auswerten VB.net (Anfänger)

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
FamouzzFreak
Posts: 2
Joined: Sat Apr 19, 2014 3:47 pm

Pin auswerten VB.net (Anfänger)

Post by FamouzzFreak »

Hallo

ich komme irgendwie nicht weiter. Ich bin nicht gerade DER Experte was Programmierung angeht aber die grundlegenden Sachen beherrsche ich seit 2 Jahren.
Für mein Schulprojekt soll ich einen Buzzer bauen, wobei ich den IOWarrior 40 genommen habe. Dieser soll einfach nur in einer Schleife die Daten von Pin0
einlesen und sie am besten im Klartext an den PC schicken.
Die Beispiele auf der CD bringen mich, wenn sie denn funktionieren nicht wirklich weiter...
Im Grunde genommen will ich nur diesen Code durchsetzen:

Dim data As String = ""
Do
' Pseudo: data = iow.einlesen(Pin 0)
Select Case data
Case "10000000"
' Anweisung W
Case "01000000"
' Anweisung X
Case "00100000"
' Anweisung Y
Case "00010000"
' Anweisung Z
End Select
Loop

Wie mache ich das? Und wie initialisiere ich den Spaß? Dass ich zum Projekt die iowkit.dll hinzufügen muss habe ich nach langer Recherche herausgefunden...

Ich hoffe man kann mir helfen.
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: Pin auswerten VB.net (Anfänger)

Post by Thoene »

Hallo.
Soll nur Pin 0 abgefragt werden, oder Port 0 mit allen 8 Pin (0-7) ?
Ist nur ein Eingang aktiv oder könnte auch Eingang Pin0 + Pin5 parrallel angesteuert werden?
Der Zustand von den einzelnen Pins kann man nur als Zahl von 0-255 (alle aus - alle ein) abfragen.
Die Abfrage der einzelnen Eingänge eines Port kann dann so erfolgen.
Select Case data
Case 1 'Pin0
' Anweisung W
Case 2 'Pin1
' Anweisung X
......
Case 128 'Pin7
Sind mehrere Pin Pin ein wird es schwieriger und man muss die einzelnen Pin erst maskieren.
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Pin auswerten VB.net (Anfänger)

Post by Christoph Jung »

Hier mal ein grobes, sehr grobels Beispiel:

Code: Select all

' Initialize everything
' Open device
iowHandles(0) = IowKitOpenDevice()

Res = IowKitRead(iowHandles(0), 0, data(0), 5)

'Bits 1,2,4,8,16,32,64,128
Select Case data(1)
Case 1
	'Anweisung 1
Case 2
	'Anweisung 2
Case 4
	'Anweisung 3
Case 8
	'Anweisung 4
End Select

' Close all IO-Warrior devices
IowKitCloseDevice((iowHandles(0)))
Ist aber im Prinzip das Selbe wie von Thoene schon geschrieben
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
FamouzzFreak
Posts: 2
Joined: Sat Apr 19, 2014 3:47 pm

Re: Pin auswerten VB.net (Anfänger)

Post by FamouzzFreak »

Hallo nocheinmal,

also bin bis jetzt so weit gekommen:

Code: Select all

Public Sub Read()

        ' Read from IO-Warrior

        Res = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 8)
        ' Res = IowKitRead(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 8) ' Gleiches Problem

        ' Convert and set data
        Label2.Text = "Port 0.0 nicht aktiv"
        Label3.Text = "Port 0.1 nicht aktiv"
        Label4.Text = "Port 0.2 nicht aktiv"
        Label5.Text = "Port 0.3 nicht aktiv"
        TextVal1.Text = ""
        TextVal1.Text = data(1).ToString
        'MsgBox(data(1).ToString & " " & Res)

        Select Case data(1).ToString
            Case "254"
                'Timer1.Stop()
                Label2.Text = "Port 0.0 aktiv"
            Case "11111101"
                Timer1.Stop()
                Label3.Text = "Port 0.1 aktiv"
            Case "11111011"
                Timer1.Stop()
                Label4.Text = "Port 0.2 aktiv"
            Case "11110111"
                Timer1.Stop()
                Label5.Text = "Port 0.3 aktiv"
            Case Else

        End Select
    End Sub
Hierbei kann ich den Port 0.1 einmalig auslesen, allerdings reagiert er nur einmal. Heißt also ich setze ein Signal, welches richtig ausgelesen wird und für

Code: Select all

data(1).ToString
bekomme, allerdings bleibt dieser Zustand so stehen. Und genau das will ich nicht.

Außerdem ist mir noch aufgefallen, dass man den Quellcode nicht Debuggen kann... Kann mir da einer sagen, wieso dies und wie ich das Debuggen wieder einschalte?

Freundliche Grüße
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: Pin auswerten VB.net (Anfänger)

Post by Thoene »

Soviel ich weiß wird im Normalmodus

Code: Select all

Res = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 5) ; benutz.
Ich bevorzuge für die Abfrage den Spezialmodus und zwar

Code: Select all

Res =  IowKitRead(iowHandles(0), 1, data(0), 8)
Das hat den Vorteil das der Aktuelle Zustand der Ports angezeigt wird.
Der Warior wird auch nicht blockiert.
Für die Case Abfrage benutze ich nur die Dezimalzahlen des Byte (0-255)
Bit0 = 1, Bit1 = 2, Bit2 = 4 usw.
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: Pin auswerten VB.net (Anfänger)

Post by Thoene »

Habe folgendes vergessen.
Für den Spezialmodus muß
Data(0) = 255
vor dem lesen gesetzt werden.
Data(0) = 0 ist für den Normalmodus.
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Pin auswerten VB.net (Anfänger)

Post by Christoph Jung »

Ich werde aus dem kleinen Stück Code nicht recht schlau. Wird der Timer1 irgendwann auch neu gestartet?
Wie ist die eigentliche Vorgehensweise des Programms. Ein paar mehr Infos wäre hilfreich, denn der gepostete Code sieht erstmal richtig aus.

Wie Thoene schon erwähnt hat kann man auch mit dem Special-Mode 0xFF die Pins auslesen, was ich selber auch lieber mache.

Das sähe so aus:

Code: Select all

IowKitSetTimeout(handle, 1000); //zum Abbrechen falls nicht gelesen werden kann

data(0) = 0xFF;
IowKitWrite(handle, IOW_PIPE_SPECIAL_MODE, data(0), 5);
IowKitRead(handle, IOW_PIPE_SPECIAL_MODE, data(0), 5);

data(1) -> Byte[0] //usw

Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply