rs232 forbindelse, hvordan man skriver simpel tekst ud
Hej alle i store kodehovder ude i lille danmark eller hvor i nu end måtte befinde jer.Jeg sidder her med et lille problem som jeg håber en af jer derude kan hjælpe mig med.
Kort og godt:
Jeg har aldrig rigtig kodet i VB eller VB.NET så jeg prøver stadig at forstå hvordan moduler etc hænger sammen.
Jeg har læst noget om at i de gamle versioner af VB bruger man MScomm til styring af rs232 forbindelsen, men denne ikke er til rådighed i VB.NET, men kan skulle kunne hente en klasse som skulle kunne styre forbindelsen den vej igennem.
Mit Problem er:
Jeg sidder med et vellemankit 8045 or prøver at skrive noget tekst ud på displayet.
Jeg har fundet et eksempel på microsofts hjemmeside hvor jeg i en console applikation kan skrive et enkelt 1 tal ud på displayet, men hvis jeg prøver med normal tekst skriver den ikke noget.
Jeg kunne lidt forestille mig det er fordi jeg sender Buffer as Byte, men hvis jeg prøver at ændre det til text eller String fejler compileren længere nede og siger noget med at Buffer er forkert...
Jeg kunne godt tænke mig hvis der var en der kunne hjælpe mig til at først og fremmest skrive det om til en form med GUI, jeg kan ikke helt finde ud af hvor man skal skrive sin kode når jeg laver en ny form / windows apllikation ?! Og gerne så den kan skrive text og andet end kun et 1 tal ud på displayet.
Jeg er heller ikke helt sikker på hvordan den styrer rs232 forbindelsen når man nu skulle hente klasser udefra og meget mere til VB.net,?!? Er der en der kan banke lidt fornuft ind i knolden på mig please ?!?!
Jeg brugte følgende eksempel: How To Access serial ports...
og skulle i følge dem selv skrive test ud.
http://support.microsoft.com/default.aspx?scid=kb;en-us;823179
Min kode som kan skrive 1 taller
---------------------- Kode Start ---------------------
Option Strict On
Class CommException
Inherits ApplicationException
Sub New(ByVal Reason As String)
MyBase.New(Reason)
End Sub
End Class
Module Module1
Public Structure DCB
Public DCBlength As Int32
Public BaudRate As Int32
Public fBitFields As Int32 'See Comments in Win32API.Txt
Public wReserved As Int16
Public XonLim As Int16
Public XoffLim As Int16
Public ByteSize As Byte
Public Parity As Byte
Public StopBits As Byte
Public XonChar As Byte
Public XoffChar As Byte
Public ErrorChar As Byte
Public EofChar As Byte
Public EvtChar As Byte
Public wReserved1 As Int16 'Reserved; Do Not Use
End Structure
Public Structure COMMTIMEOUTS
Public ReadIntervalTimeout As Int32
Public ReadTotalTimeoutMultiplier As Int32
Public ReadTotalTimeoutConstant As Int32
Public WriteTotalTimeoutMultiplier As Int32
Public WriteTotalTimeoutConstant As Int32
End Structure
Public Const GENERIC_READ As Int32 = &H80000000
Public Const GENERIC_WRITE As Int32 = &H40000000
Public Const OPEN_EXISTING As Int32 = 3
Public Const FILE_ATTRIBUTE_NORMAL As Int32 = &H80
Public Const NOPARITY As Int32 = 0
Public Const ONESTOPBIT As Int32 = 0
Public Declare Auto Function CreateFile Lib "kernel32.dll" _
(ByVal lpFileName As String, ByVal dwDesiredAccess As Int32, _
ByVal dwShareMode As Int32, ByVal lpSecurityAttributes As IntPtr, _
ByVal dwCreationDisposition As Int32, ByVal dwFlagsAndAttributes As Int32, _
ByVal hTemplateFile As IntPtr) As IntPtr
Public Declare Auto Function GetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _
ByRef lpDCB As DCB) As Boolean
Public Declare Auto Function SetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _
ByRef lpDCB As DCB) As Boolean
Public Declare Auto Function GetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean
Public Declare Auto Function SetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean
Public Declare Auto Function WriteFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToWrite As Int32, _
ByRef lpNumberOfBytesWritten As Int32, ByVal lpOverlapped As IntPtr) As Boolean
Public Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToRead As Int32, _
ByRef lpNumberOfBytesRead As Int32, ByVal lpOverlapped As IntPtr) As Boolean
Public Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean
Sub Main()
Dim hSerialPort As IntPtr
Dim Success As Boolean
Dim MyDCB As DCB
Dim MyCommTimeouts As COMMTIMEOUTS
Dim BytesWritten, BytesRead As Int32
Dim Buffer() As Byte
' Declare variables to use for encoding.
Dim oEncoder As New System.Text.ASCIIEncoding
Dim oEnc As System.Text.Encoding = oEncoder.GetEncoding(1252)
' Convert String to Byte().
Buffer = oEnc.GetBytes("1")
Try
' Serial port.
Console.WriteLine("Opretter forbindelse til COM1 serial port")
' Obtain a handle to the COM1 serial port.
hSerialPort = CreateFile("COM1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)
' Verify that the obtained handle is valid.
If hSerialPort.ToInt32 = -1 Then
Throw New CommException("Unable to obtain a handle to the COM1 port")
End If
' Retrieve the current control settings.
Success = GetCommState(hSerialPort, MyDCB)
If Success = False Then
Throw New CommException("Unable to retrieve the current control settings")
End If
' Modify the properties of MyDCB as appropriate.
' WARNING: Make sure to modify the properties in accordance with their supported values.
MyDCB.BaudRate = 2400
MyDCB.ByteSize = 8
MyDCB.Parity = NOPARITY
MyDCB.StopBits = ONESTOPBIT
' Reconfigure COM1 based on the properties of MyDCB.
Success = SetCommState(hSerialPort, MyDCB)
If Success = False Then
Throw New CommException("Unable to reconfigure COM1")
End If
' Retrieve the current time-out settings.
Success = GetCommTimeouts(hSerialPort, MyCommTimeouts)
If Success = False Then
Throw New CommException("Unable to retrieve current time-out settings")
End If
' Modify the properties of MyCommTimeouts as appropriate.
' WARNING: Make sure to modify the properties in accordance with their supported values.
MyCommTimeouts.ReadIntervalTimeout = 200
MyCommTimeouts.ReadTotalTimeoutConstant = 200
MyCommTimeouts.ReadTotalTimeoutMultiplier = 200
MyCommTimeouts.WriteTotalTimeoutConstant = 200
MyCommTimeouts.WriteTotalTimeoutMultiplier = 200
' Reconfigure the time-out settings, based on the properties of MyCommTimeouts.
Success = SetCommTimeouts(hSerialPort, MyCommTimeouts)
If Success = False Then
Throw New CommException("Unable to reconfigure the time-out settings")
End If
' Write data to COM1.
Console.WriteLine("Vent mens der skrives til serielporten")
Success = WriteFile(hSerialPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)
If Success = False Then
Throw New CommException("Unable to write to COM1")
End If
' Read data from COM1.
Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero)
If Success = False Then
Throw New CommException("Unable to read from COM1")
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
' Release the handle to COM1.
Success = CloseHandle(hSerialPort)
If Success = False Then
Console.WriteLine("Unable to release handle to COM1")
End If
End Try
Console.WriteLine("Tryk Return for at afslutte")
Console.ReadLine()
End Sub
End Module
---------------------- Kode Stop--------------------