NPort Server COM-Port dll-Problem

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von IcemanFlo.

    NPort Server COM-Port dll-Problem

    Hallo Leute,

    ich will mehrere Netzteile mit seriellen Anschluss über das Netzwerk steuern. Hierzu habe ich einen COM-Port Server der 16 COM-Ports bereitstellt und über TCP/IP angesprochen wird.

    Der Hersteller liefert eine DLL mit, jedoch ist diese noch für VB6.

    Mein Problem sind die Read und Write Funktionen in der DLL, ich weiß nicht wie ich diese auf VB.Net umsetzen kann. Sie sind folgendermaßen deklariert:

    Visual Basic-Quellcode

    1. Declare Function nsio_read Lib "IPSerial.dll" (ByVal port_id As Long, ByRef buf As Byte, ByVal buf_len As Long) As Long
    2. Declare Function nsio_write Lib "IPSerial.dll" (ByVal port_id As Long, ByRef buf As Byte, ByVal buf_len As Long) As Long


    Ich habe bereits eine Funktion welche einen String("*IDN?" + vbLF) in ein ByteArray umwandelt, und dann über eine For Each Schleife mit Länge 1 schreibt. Aber ob das im Sinne des Erfinders ist? Jedenfalls bekomme ich nichts zurück.

    Gruß
    Florian
    Jou, das sind VB6-Deklarationen.

    IcemanFlo schrieb:

    Hierzu habe ich einen COM-Port Server der 16 COM-Ports bereitstellt und über TCP/IP angesprochen wird.
    Was passiert, wenn Du SerialPort.GetAvailable() auflistest?
    ---------
    Du musst wohl die Strings in ein ByteArray konvertieren und dann die Bytes übertragen. Frage Frau Google nach string to byte Array.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    ich habe die Funktionen der DLL wie folgt eingebunden:

    VB.NET-Quellcode

    1. 'Input/ Output Data
    2. Declare Function nsio_read Lib "IPSerial.dll" (ByVal port_id As Integer, ByRef buf As Byte, ByVal len As Integer) As Integer
    3. Declare Function nsio_SetReadTimeouts Lib "IPSerial.dll" (ByVal port_id As Integer, ByVal timeouts As Integer) As Integer
    4. Declare Function nsio_write Lib "IPSerial.dll" (ByVal port_id As Integer, ByRef buf As Byte, ByVal len As Integer) As Integer
    5. Declare Function nsio_SetWriteTimeouts Lib "IPSerial.dll" (ByVal port_id As Integer, ByVal timeouts As Integer) As Integer


    Ich wandle den String in ein Byte Array um und versuche dann über:

    VB.NET-Quellcode

    1. Dim message_bytes As Byte() = TextStringToByteArray(message)
    2. Dim message_size As Integer = message_bytes.Length
    3. last_execution = nsio_read(port_id, message_bytes(0), message_size)
    4. Dim iqueue As Integer = nsio_iqueue(port_id)


    Die Nachricht an den Server zu schicken, jedoch kommen keine Datenpakete an. Auf der Administratorwebsite des Server sieht man das keine TX-Pakete an dem entsprechenden Port eingegangen sind.

    UPDATE:
    So ersten Fehler gefunden, man sollte halt auch nsio_write aufrufen zum schreiben.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „IcemanFlo“ ()