gettingstarted
[Top] [All Lists]

Problems Reading and Writing to the Serial Port

To: gettingstarted at lists dot realsoftware dot com
Subject: Problems Reading and Writing to the Serial Port
From: martin dot honeywill at unusual dot co dot uk
Date: 31 Jan 2005 18:09:32 UT
Delivered-to: gettingstarted at lists dot realsoftware dot com
Importance: normal
Priority: normal
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>

<Prev in Thread] Current Thread [Next in Thread>