C#: IO-Warrior liest keine Daten...

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
Palmm130
Posts: 8
Joined: Sun Nov 13, 2011 7:41 pm

C#: IO-Warrior liest keine Daten...

Post by Palmm130 »

Hallo,
habe zwecks Einarbeitung mit dem IO-Warrior 24 eine einfache Schaltung mit zwei Tastern aufgebaut, welche mit dem Simple-IO-Delphi DLL Programm auch eingelesen wird. Jedoch bekomme ich es unter C# nicht ausgelesen. IowReadNonBlocking und IowRead geben jeweils "0" zurück, also Fehler, die Byte-Arrays bleiben daher auch unberührt.

Ich habe mein Programm nach dem vordefinierten C#-sample aufgebaut:

Code: Select all

namespace USB.IOWarrior
{
aus der Program.cs des Beispielprojektes kopiert in "iow_namespace.cs", eingebunden, funktioniert
}

Code: Select all


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using USB.IOWarrior;

namespace IOW_Button_Read_Jgn
{
    public partial class Form1 : Form
    {
        private UInt32 num_warriors = 0;
        private IntPtr iowHandle;
        private UInt32 erg;
        private byte[] buffer = new byte[3];
        private UInt32 length = 2;
        private StringBuilder str = new StringBuilder();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = String.Empty;
            label2.Text = String.Empty;
            label3.Text = String.Empty;
            label4.Text = String.Empty;
            label5.Text = String.Empty;
            label1.Text = "Opening device... ";
            iowHandle = IowKitFunctions.IowKitOpenDevice(); // öffnet tadellos den Warrior
            if (iowHandle.ToInt32() != 0)
            {
                num_warriors = IowKitFunctions.IowKitGetNumDevs(); // gibt für meinen Warrior "1" zurück, weiterhin richtig
                label1.Text += "found " + num_warriors.ToString() + " device(s)";
                label2.Text = "Using first device with Handle: " + iowHandle.ToString() + " (IO-Warrior " + IowPins(iowHandle).ToString() + ")"; // Handle und Anzahl der Pins wird zurückgegeben
                if (IowKitFunctions.IowKitGetRevision(iowHandle) >= IowKitDefines.IOW_NON_LEGACY_REVISION)
                {
                    IowKitFunctions.IowKitGetSerialNumber(iowHandle, str); // Seriennummer wird zurückgegeben
                    label3.Text = "Revision: " + IowKitFunctions.IowKitGetRevision(iowHandle).ToString() + " Serial Number: " + str.ToString(); // Revision wird zurückgegeben
                }
                else
                {
                    label3.Text = "Revision: " + IowKitFunctions.IowKitGetRevision(iowHandle).ToString();
                }
            } 
            // hier beginnt mein Problem:
            erg = IowKitFunctions.IowKitReadNonBlocking(iowHandle, IowKitDefines.IOW_PIPE_IO_PINS, buffer, length);
            MessageBox.Show(erg.ToString()); // "0" wird zurückgegeben
            label4.Text = buffer[2].ToString(); // "0" wird zurückgegeben

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            for (UInt32 i = 1; i < num_warriors + 1; i++)
            {
                IowKitFunctions.IowKitCloseDevice(IowKitFunctions.IowKitGetDeviceHandle(i)); // Warrior wird sauber geschlossen, da Programm sich beendet.
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            erg = IowKitFunctions.IowKitReadNonBlocking(iowHandle, IowKitDefines.IOW_PIPE_IO_PINS, buffer, 2); // bei Beobachtung beendet sich nichts, auch bei Betätigung des Tasters.
            label4.Text = buffer[2].ToString(); // "0"
        }

    }
}
Sieht hier jemand einen offensichtlichen Fehler, der mir entgangen ist?

Edit: Kurioserweise gibt GetLastError().ToString(); ebenso "0" aus, verwende ich die Codebeispiele falsch, oder liegt ein allgemeiner Denkfehler vor?
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: C#: IO-Warrior liest keine Daten...

Post by friend-of-rq »

Hallo Palmm130
Einarbeitung mit dem IO-Warrior 24 eine einfache Schaltung mit zwei Tastern aufgebaut
funktioniert denn die Hardware überhaupt ... Testprogramme mal genutzt ?
Gruss Ralf
Palmm130
Posts: 8
Joined: Sun Nov 13, 2011 7:41 pm

Re: C#: IO-Warrior liest keine Daten...

Post by Palmm130 »

friend-of-rq wrote:Hallo Palmm130
Einarbeitung mit dem IO-Warrior 24 eine einfache Schaltung mit zwei Tastern aufgebaut
funktioniert denn die Hardware überhaupt ... Testprogramme mal genutzt ?
Gruss Ralf
Einarbeitung mit dem IO-Warrior 24 eine einfache Schaltung mit zwei Tastern aufgebaut, welche mit dem Simple-IO-Delphi DLL Programm auch eingelesen wird.
ja!

Gruss Juergen

Edit: ich ziehe meine Frage zurück, ich sollte mal den Timer aktivieren...
Danke dennoch!
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: C#: IO-Warrior liest keine Daten...

Post by friend-of-rq »

Hallo Palmm130,

sorry ... hatte ich überlesen ...

Gruss Ralf
Post Reply