Click here to Skip to main content
15,064,293 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello,
I'm new to .NET. I have an application that is running in VB6. It sends text through COM1 port to another device.

When I converted the VB6 code to .NET the string it sends out is different! I have tried so many things and don't know what to do. I used a serial data analyzer and found the two strings are different even the the source code is the same.

VB6 source code:

VB
MSComm1.CommPort = 1
MSComm1.Settings = "9600,O,8,1"
MSComm1.PortOpen = True
MSComm1.Output = Chr(&H2B) & _
Chr(&H4) & _
Chr(&H3) & _
Chr(&HE8) & _
Chr(&H0) & _
Chr(&H2) & _
Chr(&HF6) & _
Chr(&H71)
MSComm1.PortOpen = False


The analyzer gets the following string in hex: 2B 04 03 E8 00 02 F6 71

VB.NET source code:
VB
Dim Port As SerialPort = New SerialPort("COM1", 9600, Parity.Odd, 8, StopBits.One)
Port.Open()
Port.Write(System.Convert.ToChar(&H2B) & _
System.Convert.ToChar(&H4) & _
System.Convert.ToChar(&H3) & _
System.Convert.ToChar(&HE8) & _
System.Convert.ToChar(&H0) & _
System.Convert.ToChar(&H2) & _
System.Convert.ToChar(&HF6) & _
System.Convert.ToChar(&H71))
Port.Close()


The analyzer gets the following string in hex: 2B 04 03 0F 00 02 3F 71

Why is there a difference in the string?
Please help me correct it...
Thanks
Posted
Updated 2-Feb-11 22:19pm
v2
Comments
Sandeep Mewara 3-Feb-11 5:01am
   
Update from OP:
I found something interesting.

when I convert a number using System.Convert.ToChar(X) and sends it through serial the X can only be hex: 0 to hex:3F if I want to get the correct value from the other side. Any value greater than hex:3F will not be hex:3F.

for example if I send
hex:64 you will get hex:3F
send hex:E8 you will get hex:3F

It seems like it max out with a 6 bit register value,
Please help me correct this mess ...

1 solution

I think the ToChar() conversion actually converts the 8 bit value to its Unicode equivalent thus creating a different value. Try using ToByte() instead.
   
Comments
Sandeep Mewara 3-Feb-11 5:00am
   
Comment from OP:
Dear Richard MacCutchan,
I think you are in the right track.

but this does not work:

Dim Port As SerialPort = New SerialPort("COM1", 9600, Parity.Odd, 8, StopBits.One)
Port.Open()
Port.Write(System.Convert.ToByte(&H2B) & _
System.Convert.ToByte(&H4) & _
System.Convert.ToByte(&H3) & _
System.Convert.ToByte(&HE8) & _
System.Convert.ToByte(&H0) & _
System.Convert.ToByte(&H2) & _
System.Convert.ToByte(&HF6) & _
System.Convert.ToByte(&H71))
Port.Close()

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900