vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Portsdll und inpout32 
Autor: wollez
Datum: 07.02.07 15:40

Hallo zusammen,

ich habe da mal ein Problem und hoffe es kann mir jemand weiterhelfen.

mein Programm sendet über die serielle Schnittstelle an eine Anzeigetafel Daten, die dort dann angezeigt werden. Wenn jetzt der Rechner neu gestartet wird, werden an der Tafel nur wirre Zeichen angezeigt und diese kann ich nur löschen wenn ich der Anzeigetafel kurz die Spannung abschalte. Dies kommt wohl daher, wenn der Rechner gestartet wird, sendet Windows ein paar Zeichen um den Port abzufragen.
ich habe mir deshalb eine Schaltung überlegt, mit der ich der Anzeigetafel über den Paralellport die Spannung per Software zu und abschalte. Dazu benötige ich nur die Leitung "0" die ich dann auf "high" setzte. Dies funktioniert auch ganz gut.
Jetzt zu meinem eigentlichen Problem:
Das senden der Daten an die Anzeige mit der seriellen Leitung funktioniert nur wenn ich die Befehle zum steuern der paralellen Schnittstelle deaktiviere.
Für das senden der Daten zur seriellen Schnittstelle verwende ich folgenden Code:
Extra Modul "Portsdll"
Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer
Declare Sub CLOSECOM Lib "Port" ()
Declare Sub SENDBYTE Lib "Port" (ByVal b%)
Declare Function READBYTE Lib "Port" () As Integer
Declare Sub DTR Lib "Port" (ByVal b%)
Declare Sub RTS Lib "Port" (ByVal b%)
Declare Sub TXD Lib "Port" (ByVal b%)
Declare Function CTS Lib "Port" () As Integer
Declare Function DSR Lib "Port" () As Integer
Declare Function RI Lib "Port" () As Integer
Declare Function DCD Lib "Port" () As Integer
Declare Sub DELAY Lib "Port" (ByVal b%)
Declare Sub TIMEINIT Lib "Port" ()
Declare Sub TIMEINITUS Lib "Port" ()
Declare Function TIMEREAD Lib "Port" () As Long
Declare Function TIMEREADUS Lib "Port" () As Long
Declare Sub DELAYUS Lib "Port" (ByVal l As Long)
Declare Sub REALTIME Lib "Port" (ByVal i As Boolean)
 
Public Function öffnen()
'es wird der COM-Port, der in der INI-Datei eingestellt ist, geöffnet
 
Dim PortNr1 As String
Dim PortNr2 As Long
Dim PortNr As String
PortNr1 = Space$(255)
 
PortNr2 = GetPrivateProfileString("Comport", "11", "", PortNr1, 255, App.Path & _
  "\ProdAnz.ini")
PortNr = Left$(PortNr1, PortNr2) & ":"
    OPENCOM (PortNr)
 
End Function
 
' Funktion zum senden der Daten
 
Public Function Senden(Daten As String)
' Dieser Sub nimmt einem Binärstring entgegen zb. "0111000011"
' und zerlegt ihn in einzelne Zeichen. Die Länge des Strings ist egal
' Die Zeichen können dann in einer Schleife gesendet werden
Dim Zähler As Long
Dim Bit As String
 
For Zähler = 1 To Len(Daten)
Bit = Mid$(Daten, Zähler, 1)
If Bit = "1" Then
    TXD 1
 
Else
    TXD 0
 
End If
    DTR 1: RTS 0
    DTR 0: RTS 0
' Hier dann der Rest ...
' Clock erzeugen, warten und so weiter
Next Zähler
End Function
 
Public Function Make8(ByVal Eingabe As String) As String
'wandelt die Zeichen in Dualzahlen um
 
  Dim Rückgabe As String
  Dim Ausgabe As String
 
  Select Case Eingabe
    Case Is = "0"
      Rückgabe = "0000"
    Case Is = "1"
      Rückgabe = "0001"
    Case Is = "2"
      Rückgabe = "0010"
    Case Is = "3"
      Rückgabe = "0011"
    Case Is = "4"
      Rückgabe = "0100"
    Case Is = "5"
      Rückgabe = "0101"
    Case Is = "6"
      Rückgabe = "0110"
    Case Is = "7"
      Rückgabe = "0111"
    Case Is = "8"
      Rückgabe = "1000"
    Case Is = "9"
      Rückgabe = "1001"
    Case Is = "-"
      Rückgabe = "1010"
    Case Is = ""
      Rückgabe = "1111"
    Case Is = "E"
      Rückgabe = "1011"
    Case Is = "e"
      Rückgabe = "1011"
    Case Is = "H"
      Rückgabe = "1100"
    Case Is = "h"
      Rückgabe = "1100"
    Case Is = "L"
      Rückgabe = "1101"
    Case Is = "l"
      Rückgabe = "1101"
    Case Is = "P"
      Rückgabe = "1110"
    Case Is = "p"
      Rückgabe = "1110"
    Case Is = "I"
      Rückgabe = "0001"
    Case Is = "i"
      Rückgabe = "0001"
 
  End Select
 
    Make8 = Rückgabe
 
End Function
Für das schalten der Leitung der parallelen Schnittstelle verwende ich folgenden Code:
Extra Modul "inpout32"
'inpout32.bas
'Inp und Out Deklarationen
 
Public Declare Function Inp Lib "inpout32.dll" Alias _
       "Inp32" (ByVal PortAddress As Integer) As Integer
 
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
       (ByVal PortAddress As Integer, ByVal Value As Integer)
Der Aufruf ist:
Out &H378, 1 'schaltet die Leitung ein
 
Out &H378, 0 'schaltet die Leitung aus
Natürlich habe ich auch die dll installiert

Kann es sein, das diese dll`s sich nicht vertragen?

Gruß Wollez
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Portsdll und inpout32883wollez07.02.07 15:40

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel