[racket] Beginner: advice COM port I/O

From: Richard Cleis (rcleis at mac.com)
Date: Fri Dec 30 18:13:43 EST 2011

I'm not near a Winbox, so I can't try it. Normally, though, I loop the tx to the rx to ensure that the port can read what it writes.  Looping back normally involves little more than connecting pins 2 & 3 on the D-connector, if that is what you are using. 

I would also be wary of the terminator character being sent by displayln; the meter might care about the difference between newline, linefeed, and carriage return.

Unicode may be an issue here, too. You might need to use (string->bytes/utf-8  "V00"). You can look at the signal on an oscilloscope to see if only four characters are being sent at the rate required by the meter.


On Dec 30, 2011, at 2:59 PM, Gilbert Martinez wrote:

> I've been experimenting with Racket v5.2 and a GW Instek 8212 meter connected to my PC via COM1 (running WinXP SP3).
> The meter responds to simple commands (e.g., "V00"  terminated with a line feed is read voltage) and I've written simple programs in Python, VB, and even QuickBasic  to query the device.
> However, I've had no success in getting the device to respond from inside the Racket REPL.
> I've pasted the code I'm using below:
> #lang racket
> (let*-values 
>     (((in out) (open-input-output-file "COM1"  #:mode 'binary)))
>   (displayln "V00" out)
>   (printf "~C~a~n" #\tab (read-bytes 1 in))
>   (close-input-port in)
>   (close-output-port out)) 
> Running from the interpreter just gives me the output below:
> #<eof>
> > 
> A tester in-line with the serial cable shows I am actually writing to the port (I see a square-wave signal), so I know that I am at least writing to the port. 
> Any hints or pointers would be appreciated.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20111230/28848cce/attachment.html>

Posted on the users mailing list.