Problem mit Lesen

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
poio
Posts: 5
Joined: Mon Nov 28, 2005 10:56 am

Problem mit Lesen

Post by poio »

Hallo ich habe ein Problem mit dem Einlesen der Ports im IO Warrior 40:
Ich habe eine Hardware (Spannungsüberwachung) die Signale an den IO Warrior liefert dieser soll die Signale einlesen und am Computer ausgeben
mein Programm sieht so aus:


#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include "iowkit.h"


int main()
{
DWORD report;
report.Value=0;
IOWKIT_HANDLE ioHandle;

ioHandle = IowKitOpenDevice();
IOWKIT40_IO_REPORT report;
ULONG read;

// Read IO pins of IO-Warrior 40
read = IowKitRead(ioHandle, 3, (PCHAR*) &report, sizeof(report));


if (ioHandle == NULL)
{
cout <<"Failed to open device!" << endl;
return 0;
}

printf("Wert = %X\n", report);

IowKitCloseDevice(ioHandle);
return 0;
}

Um ehrlich zu sein verstehe ich die Syntax nicht genau
verstehe das Datasheet nicht
Bitte helft mir bei der Verwirklichung meines Problems

Danke im vorhinein
mfg Poio
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

read = IowKitRead(ioHandle, 3, (PCHAR*) &report, sizeof(report));

Was soll denn die 3 da?
Der Parameter nimmt nur die Werte IOW_PIPE_IO_PINS (0) oder IOW_PIPE_SPECIAL_MODE (1) an.
poio
Posts: 5
Joined: Mon Nov 28, 2005 10:56 am

Post by poio »

danke für deine Hilfe werde es berücksichtigen
und der rest stimmt?
sind die Befehle richtig angewendet?
mfg Poio
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Besser gleich nach IowKitOpenDevice testen ob es geklappt hat, statt erst nach dem Lesen mit IowKitRead.
Ansonsten ist alles OK. Die Funktion IowKitRead wird aber erst zurueckkehren wenn sich etwas an den IO-Pins aendert, sprich wenn man den Knopf des Starter Kits drueckt oder angeschlossene Elektronik Signale ausgibt.
poio
Posts: 5
Joined: Mon Nov 28, 2005 10:56 am

Post by poio »

ich hätte dazu noch eine frage
das ist der jetzige code

Code: Select all

#include <iostream.h> 
#include <windows.h> 
#include <stdio.h> 
#include "iowkit.h" 


int main() 
{ 
DWORD report; 
report.Value=0; 
IOWKIT_HANDLE ioHandle; 

ioHandle = IowKitOpenDevice(); 
IOWKIT40_IO_REPORT report; 
ULONG read; 

if (ioHandle == NULL) 
{ 
cout <<"Failed to open device!" << endl; 
return 0; 
} 

// Read IO pins of IO-Warrior 40 
read = IowKitRead(ioHandle, 0, (PCHAR*) &report, sizeof(report)); 

printf("Wert = %X\n", report); 

IowKitCloseDevice(ioHandle); 
return 0; 
} 
das einlesen funktioniert jetzt und ein hex wert wird ausgegeben.
ich würde jetzt allerdings gerne den eingelesenen wert, der in der variable "report" gespeichert.

ich würde jetzt gerne diesen wert in einer anderen variable speichern. wie mache ich das?
zusätzlich würde ich diesen Wert gerne mittels cout oder printf binär ausgeben und nicht hexadezimal

wie kann ich das machen?
bitte um hilfe

mfg
poio
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Die binaere Ausgabe muss man selber programmieren, da printf es nicht kann.

Bitte "printf("Wert = %X\n", report.Value);" verwenden. Das es mit report klappt ist nur Zufall und eigentlich klappt es gar nicht.

Es ist ausserdem unweise C++ und c so zu mixen. Besser ist es nur eine ausgabemethode zu verwenden.

BTW ich bin uebrigens unwillig C-Anfaengerschulung zu geben. Das kann nicht Aufgabe dieses Forums sein.
Post Reply