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
Einlesen der Zustände des Port 2 bei IO-Warrior56
Moderator: Guido Körber
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
- 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
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.
Der Code ist ungetestet aber soller funktionieren.
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
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
Re: Einlesen der Zustände des Port 2 bei IO-Warrior56
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
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
- 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
Ja hab gerade einen Tippfehler Korrigiert. Beim Write und Read müssen natürlich 64 Bytes beim IOW56 eingetragen werden. Habs korrigiert