We help IT Professionals succeed at work.

Serial port data from weigh scales to decode

auscom
auscom asked
on
I have hooked a PC up to a desktop weigh scale that communicates over serial port (via a usb adapter and virtual com port driver). We get data back when the Print button is pressed.

\xf8\x80x\x00x\x00x\xf8x\x80\x00\x80\x00\x80\x00\x80\x00\x80\x80\x80\xf8\x80xx\xf8x\x80\x00\xf8\xf8x\xf8\x80x\x00\x80x

It looks like hex or something encoded in a strange way (like UTF-16) but cannot make heads or tails of it. Anyone recognise this and know how to decode?

My assumption is that the first to letters will be ST then there will be a weight shown (based on other research). We have played around with various baud rates to no success.

Example solution can be in any dev language (C#, VB, PHP, Python, Javascript preferably).

Thanks!
Comment
Watch Question

What Make/Model are the scales?

Author

Commented:
FG-150KBM
digital platform scale
A&D company
Have a look here:
http://www.aandd.jp/products/manual/balances/newfg.pdf
Page 16 refers to the RS-232 interface.
Looks like BAUD rate will be 2400, 4800 or 9600.
7 data bits
even parity

Once set correctly the data looks quite readable.

Author

Commented:
Thanks we have the manual. Can you tell from the hex string if the data is encoding specifically? Or should we just have text as a result?
As I read it you should get straight text. e.g. ST,+00123.45_kg
I would test this by using HyperTerm to connect to the serial port. What are you using?
Do you have the com port set to 7 data bits and even parity?
If using HyperTerm you can do this from within the program.

Author

Commented:
Dropping down to these settings we get close to readable ...


port is : /dev/cu.usbserial
flowcontrol : none
baudrate is : 2400
parity is : even
databits are : 7
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,

Terminal ready
SԬ+0000�.�9���

The above line is getting closer to numeric.
I'd say the BAUD rate is right as half the text looks OK. Maybe try experimenting with parity: try odd and none.

Author

Commented:
Figured it out - but you were close! We had to drop the first bit (in python);

.join([chr(ord(char) & 0x7F) for char in text]

Gold now. Thanks!

Author

Commented:
I've requested that this question be closed as follows:

Accepted answer: 500 points for akb's comment #a40632409
Assisted answer: 0 points for auscom's comment #a40634718

for the following reason:

The final operation was removing the first bit, that completes the solution
Good to see you got it figured.
You really don't think my help was worth any points? :(

Author

Commented:
ah sorry - it was I am a n00b to this. lemme see ...
Thanks auscom