PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MSComm Problem



PabloEscoba
21.05.2006, 17:52
Hallo

Ich brauche Hilfe bei dem auslesen von Texten die von der C-Control an den Pc geschickt werden.
Das Programm welches den Text am Com Port empfangen soll ist mit VisualBasic geschrieben.(MSCom)

Hier der Code.





Private Sub Form_Load()

With MSComm1
.CommPort = 1
.Settings = "9600,N,8,1"
.PortOpen = True
.
End With
End Sub

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent
Case comOverrun: MsgBox "Datenverlust!"
Case comRxOver: MsgBox "Datenverlust!"
Case comEvReceive: Text1.Text = MSComm1.Input

End Select
End Sub


Leider bekomme ich im Textfenster 1 michts angezeigt.
Ich habe schon ausprobiert Texte vom Pc zu senden das funktioniert einwandfrei.
Wisst ihr vieleicht was ich Falsch mache oder könnt ihr mir weiterhelfen ich komme echt nicht weiter .

Danke im Vorraus.

Pablo

Günter49
21.05.2006, 21:22
Welche VB-Version verwendest Du?
Dein Programm sieht dem Beispiel von
http://www.the-starbearer.de/Praxis/ElektronikamPC/RS232/MSCOMM.htm
sehr ähnlich. Auf welche Werte hast du die anderen Parameter (InBufferSize ,OutBufferSize, RThreshold, SThreshold) eingestellt? Die Beschreibung der Parameter findest du unter dem angegebenen link.
Versuch für den Empfang auch mal ein anderes Programm, z.B.
http://www.ubasics.com/adam/electronics/ha/software/software.shtml
Zum Testen kannst Du eine exe-Datei des Programms HAT herunterladen. Den source-code dazu gibts dort auch.

Gruß, Günter

Wußte gar nicht, dass der MsgBox-Befehl auch ohne Klammern funktioniert.

PabloEscoba
22.05.2006, 00:32
Hallo Günter
Danke für deine Antwort !!

Ich benutze VB 6.0

Ich habe einen Code gefunden mit dem es bis jetzt funktioniert.

Private Sub Form_Load()
' Fire Rx Event Every x Bytes
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
' When Inputting Data, Input y Bytes at a time
MSComm1.InputLen = 1
MSComm1.Settings = "9600,N,8,1"
' Open COM1
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
Dim sData As Variant

If MSComm1.CommEvent = comEvReceive Then
sData = MSComm1.Input

empfang = StrConv(sData, vbUnicode)

Text1.Text = Text1.Text + empfang


End If
End Sub



Kannst du mir vieleicht den Teil nochmal erkären.
Ich verstehe das mit dem nicht richtig.

" Dim sData As Variant "

Genauseo wie dieser Code Teil.

empfang = StrConv(sData, vbUnicode)

Ich were dir sehr dankba wenn du mir die beiden Teile kurz erklären könntest.

PAblo

Günter49
22.05.2006, 06:51
Hallo,
genau weiß ich das auch nicht, aber ein Versuch:

Auf Deinem PC, auf dem das VB-Programm läuft, ist wahrscheinlich Unicode für die Behandlung von Text-Zeichen eingestellt. Wie praktisch auf allen neueren Windows-PCs.
Unicode kodiert ein Textzeichen mit 2 Byte statt mit nur einem Byte wie im alten ASCII-Code. Dadurch können z.B. mehr Sonderzeichen oder auch japanische Schriftzeichen codiert werden.
Deinem funktionierenden Empfangsprogramm ist die Art der Codierung erst mal egal, da es die ankommenden Zeichen im Datentyp „Variant“ ablegt. Dieser Datentyp ist eigentlich ein Text-Array, und wird von VB immer verwendet wenn kein spezieller Datentyp wie z.B. Byte, Integer usw. festgelegt wurde. Übrigens sehr speicheraufwendig.
Damit der Inhalt der Variant-Variablen „sData“ auf Deinem Unicode-Rechner angezeigt werden kann, verwandelt man sie mit der Funktion StrConv() in das darstellbare Unicode-Textzeichen „empfang“.

Also so in etwa :-k

Gruß, Günter