Hi,
Help I'm lost trying to use RB's serial port control. I'm a new RB5.5.4 user on
windows XP. I'm planning to write an application that will use the serial port
to communicate via a binary protocol on a half duplex RS485 link with external
devices.
I've written some sample code to test out comms (see below). My initial testing
confused me as I was recieving corrupted messages. Further investigation with
serial port sniffer programs seemed to indicate that I was sending corrupt
data. I have used a demo version of "Serial Port Monitor" from
http://www.eltima.com/products/serial-port-monitor to monitor the transmission
below is what was output. To simplify my testing I have put a loopback
connector on COM1, so I should be seeing what I transmit. This allowed me to
see that I was transmitting far more characters than I was expecting. It seems
like I'm getting some sort of buffer overrun. I've even simplified the code
from that shown below, removing the code in the Serial1.DataAvaliable event,
this makes no change.
Could someone with more Knowledge that me please point out where I am going
wrong.
Regards
Martin Honeywill
OUTPUT FROM SNIFFER PROGRAM
---------------------------
Open port COM1
17:46:32 - Written data
E0 à
17:46:32 - Written data
E0 8E àZ
17:46:32 - Written data
E0 8E 37 E0 8E 37 00 E0 8E 37 00 C5 37 00 C5 àZ7àZ7.àZ7.Å7.Å
17:46:32 - Read data
E0 E0 8E E0 8E 37 E0 8E 37 00 E0 8E 37 00 C5 37 ààZàZ7àZ7.àZ7.Å7
00 C5 8E .ÅZ
All I was expecting to send were the bytes E0 8E 37 00 C5, I have listed below
the complete source of my simple application, It looks like I am sending E0 E0
8E E0 8E 37 E0 8E 37 00 E0 8E 37 00 C5 37 00 C5 8E
SOURCE CODE
-----------
Window1.Open:
Sub Open()
if not Serial1.open then msgBox"Port Failed"
Serial1.Baud=10 'Baud19200
Serial1.bits=3
Serial1.Parity=0 ' ParityNone
Serial1.Stop=2 'StopBits2
Serial1.Reset
End Sub
Window1.Serial1.DataAvailable:
Sub DataAvailable()
dim fred as String
dim i As integer
dim ch As integer
dim hexch As String
fred=Me.ReadAll
for i=1 to len(fred)
ch=ascB(midB(fred,i,1))
hexch=hex(ch)+" "
if lenb(hexch) =2 then hexch="0"+hexch
if bitwise.BitAnd(ch, &hF0) = &hC0 then hexch=hexch+chr(13)
RxData=RxData+hexch
next
RxDataDisp.text=RxData
End Sub
Window1.PushButton1.Action:
Sub Action()
' E0 8E 37 00 C5
serial1.write chrb(&he0)
serial1.write chrb(&h8e)
serial1.write chrb(&h37)
serial1.write chrb(&h00)
serial1.write chrb(&hc5)
'Serial1.XmitWait
End Sub
Window1.PushButton2.Action:
Sub Action()
RxData = ""
RxDataDisp.text=RxData
End Sub
_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>
Search the archives of this list here:
<http://www.realsoftware.com/listarchives/lists.html>
|