Einlesen der Zustände des Port 2 bei IO-Warrior56

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
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Einlesen der Zustände des Port 2 bei IO-Warrior56

Post by Franz Peter Zantis »

Bei diesem Code wird der tatsächliche Zustand an Port 2 erst eingelesen, wenn an den Ports eine Änderung eingetreten ist. Das heißt der Zustand der Ports unmittelbar nach dem Programmstart ist unbekannt! Was ist falsch?


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
iohandle = IowKitOpenDevice()
iowrite(0) = 0
iowrite(1) = &HFF
iowrite(2) = &HFF
iowrite(3) = &HFF
iowrite(4) = &HFF
iowrite(5) = &HFF
iowrite(6) = &HFF
iowrite(7) = &HFF
retint = IowKitWrite(iohandle, 0, iowrite(0), 8)

ioread(0) = 0
ioread(1) = &HFF
ioread(2) = &HFF
ioread(3) = &HFF
ioread(4) = &HFF
ioread(5) = &HFF
ioread(6) = &HFF
ioread(7) = &HFF
End Sub

Private Sub BtnStart_Click(sender As Object, e As EventArgs) Handles BtnStart.Click
Dim lschaltertest As Boolean
flagstart = True
Do
retint = IowKitReadNonBlocking(iohandle, 0, ioread(0), 8)

Me.TxtBxAusgabe.Text = Convert.ToString(ioread(3), 2).PadLeft(8, CChar("0"))
Application.DoEvents()

If flagstart = False Then
Exit Do
End If
Loop
End Sub
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Einlesen der Zustände des Port 2 bei IO-Warrior56

Post by Christoph Jung »

Ist das ein Rätsel oder wo genau liegt das Problem?

An sich ist der Code richtig, allerdings würde ich das anders lösen, mit einemSpecial-Mode.
Der Special-Mode 0xFF liefert den aktuellen Port-Zustand zurück, egal ob neue Daten anliegen oder nicht.

Code: Select all

Dim report(63) As Byte
Dim ret As Integer = 0

iohandle = IowKitOpenDevice()
IowKitSetTimeout(iohandle, 1000) 'Timeout setzten, damit nach 1 Sekunden der Lesevorgang abgebrochen wird

report(0) = 0xFF 'Special Mode "Getting current pin status (chapter 5.10.7)"

If (IowKitWrite(iohandle , 0, report(0) ,64) = 64 Then 'hat das schreiben funktioniert?
         If (IowKitWrite(iohandle , 0, report(0), 64) = 64 Then 'hat das lesen funktioniert?
                   'Auswertung
                   'in report stehen die tatsächlichen Pin-Zustände der Ports in report 1 bis 7
         End If
End If

Der Code ist ungetestet aber soller funktionieren.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: Einlesen der Zustände des Port 2 bei IO-Warrior56

Post by Franz Peter Zantis »

Hallo Herr Jung,
nein, dass war kein Rätsel. Ihr Code hat auch nicht funktioniert, aber er hat genügend Anregungen enthalten um daraus einen lauffähigen Code zu machen. Vielen Dank!
Hier der geänderte Code, der funktioniert :-)

Option Explicit On
Option Strict On
Public Class Form1
Dim iohandle As Integer
Dim stopflag As Boolean
Dim report(63) As Byte
Dim ret As Integer = 0

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
iohandle = IowKitOpenDevice()
'IowKitSetTimeout(iohandle, 1000) 'Timeout setzten, damit nach 1 Sekunden der Lesevorgang abgebrochen wird
report(0) = 0
report(1) = &HFF
report(2) = &HFF
report(3) = &HFF
report(4) = &HFF
report(5) = &HFF
report(6) = &HFF
report(7) = &HFF
ret = IowKitWrite(iohandle, 0, report(0), 8)
End Sub

Private Sub BtnStart_Click(sender As Object, e As EventArgs) Handles BtnStart.Click
stopflag = False
report(0) = &HFF 'Special Mode "Getting current pin status (chapter 5.10.7)"
Do While stopflag = False
ret = IowKitWrite(iohandle, 1, report(0), 64)
ret = IowKitRead(iohandle, 1, report(0), 64)
Me.TxtBxSchalterwerte.Text = Convert.ToString(report(3), 2).PadLeft(8, CChar("0"))
Application.DoEvents()
System.Threading.Thread.Sleep(100)
Loop
End Sub

Private Sub BtnSTOP_Click(sender As Object, e As EventArgs) Handles BtnSTOP.Click
stopflag = True
End Sub
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Einlesen der Zustände des Port 2 bei IO-Warrior56

Post by Christoph Jung »

Ja hab gerade einen Tippfehler Korrigiert. Beim Write und Read müssen natürlich 64 Bytes beim IOW56 eingetragen werden. Habs korrigiert
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply