Access DIO from Visual Studio 2005 (VB Project)

  • Hallo,


    leider kann ich anhand der vorliegenden Daten keine Aussage zur Fehlerursache geben. Sie sollten das ganze noch mal systematisch durchspielen.


    Wie sehen die Funktionen aus (CreateFile(),...)?
    Und mit welchen Parametern werden diese im Programm aufgerufen?


    Welches Potential legen Sie an?
    Wenn Sie "nichts" anlegen, lesen Sie "255", denn die Pins von Port 2 sind über 4k7 Widerstände mit V33 verbunden (siehe HW Doku.)

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • Vielen Dank für die Antwort,


    einem der Aufruf von CreateFile:


    Code
    1. uint access = 0x80000000; //0xC0000000 (3221225472) = GENERIC_ READ & WRITE, 0x80000000 = GENERIC_ READ
    2. hPort = CreateFileW("DIO2:", access, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
    3. if ((int)hPort == INVALID_HANDLE_VALUE)
    4. Console.WriteLine("WinMain() CreateFile failed.");


    CreateFileW selbst:

    Code
    1. [DllImport("coredll.dll", EntryPoint = "CreateFileW", SetLastError = true)]
    2. private static extern IntPtr CreateFileW(string lpFileName,
    3. UInt32 dwDesiredAccess, uint dwShareMode, IntPtr pSecurityAttributes, uint dwCreationDisposition,
    4. uint dwFlagsAndAttributes, IntPtr hTemplatefile);


    Bzgl. der Verkabelung:
    ich verwende Pin 26 für 3,3V, diese werden als Beispielhardware von Tastern auf die Eingänge Pin 18-23 geschaltet

  • Hallo,


    Quote

    Bzgl. der Verkabelung:
    ich verwende Pin 26 für 3,3V, diese werden als Beispielhardware von Tastern auf die Eingänge Pin 18-23 geschaltet


    Diese Pins haben doch bereits einen Pullup (siehe HW Doku)!!!

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • Genau, Sie müssen GND schalten. Die Pins sind unbeschaltet auf High und müssen durch den Taster auf Low gelegt werden.


    Und noch eine weitere Anmerkung: Der Aufruf der Funktion GetLastError() liefert in C# nicht unbedingt den tatsächlichen Fehler der zuvor aufgerufenen Funktion. Der Grund ist, dass die .NET-Umgebung selbst auch Win32-Aufrufe macht und falls zwischenzeitlich ein solcher Aufruf erfolgt ist, was man nie ausschließen darf, wird *dessen* Ergebnis geliefert. Korrekt ist daher, die Funktion


    Marshal.GetLastWin32Error()


    aufzurufen. Wird ein DllImport aufgerufen, der SetLastError=True hat, dann wird automatisch bei der Rückkehr schon der GetLastError()-Wert abgerufen und gemerkt. Marshal.GetLastWin32Error() liefert dann den gemerkten Wert zurück, der somit auch wirklich zum entsprechenden Aufruf passt.


    Mit freundlichen Grüßen,


    H. Keller

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • Quote


    Genau, Sie müssen GND schalten. Die Pins sind unbeschaltet auf High und müssen durch den Taster auf Low gelegt werden.


    Vielen Dank für diese Info. Leider war dies aber nicht aus den Unterlagen direkt ersichtlich.


    Normalerweise verwende ich auch Marshal.GetLastWin32Error(), trotzdem danke für den Hinweis.


    Jedoch auch mit der Marshal - Funktion wird Fehler 87 zurückgegeben, da der value - Wert (Rückgabe der Read-Funktion) immer gleich 0 ist. Kann ich dies ignorieren?

  • Quote from "all-finder"

    Jedoch auch mit der Marshal - Funktion wird Fehler 87 zurückgegeben, da der value - Wert (Rückgabe der Read-Funktion) immer gleich 0 ist. Kann ich dies ignorieren?


    Nein. Wenn 0 zurück kommt, heißt es, dass ein Fehler aufgetreten ist. Ich vermute es liegt am


    uint lpNumberOfBytesRead


    in der Deklaration von ReadFile(). Ändern Sie das mal auf


    out uint lpNumberOfBytesRead


    ab. Es muss an dieser Stelle nämlich ein Pointer übergeben werden. Über out wird aus dem Value-Parameter ein Reference-Parameter, also indirekt ein Pointer. Nebenbei müssen Sie den Wert dann nicht mehr vorbelegen.


    Mit freundlichen Grüßen,


    H. Keller

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • Hallo,


    Quote

    Ich haben die Gedankenverbindung zwichen den IO1-9 und den Portnummern noch nicht verstanden


    den Zusammenhang finden Sie im "PicoMOD Device Driver Document" http://www.fs-net.de/download/…DeviceDriver_V101_eng.pdf. Dort ist die Pinnummer (am J1 des PicoMOD) den Ports, UseAsIO,... zugeordnet. Der Index bezieht sich nur auf die SW und bestimmt den Parameter "Filename" für "CreateFile()" (Filename=Prefix+Index+:).

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.