BACnet MS/TP Capture Tool

This tool captures BACnet MS/TP packets on an RS485 serial interface,
and saves the packets to a file in Wireshark PCAP format for
the BACnet MS/TP dissector to read.  The filename has a date and time
code in it, and will contain up to 65535 packets.  A new file
will be created at each 65535 packet interval.  The tool can
be stopped by using Control-C.

Here is a sample of the tool running (use CTRL-C to quit):
D:\code\bacnet-stack>bin\mstpcap.exe com54 38400
Adjusted interface name to \\.\COM54
mstpcap: Using \\.\COM54 for capture at 38400 bps.
mstpcap: saving capture to mstp_20110413134119.cap
3200 packets, 0 invalid frames
MAC     MaxMstr Tokens  Retries PFM     Treply  Tusage  Trpfm   Tder    Tpostpd
0       1       557     0       32      11      47      0       0       0
2       0       557     0       47      0       0       0       0       0
3       4       557     0       32      11      110     0       0       0
5       6       558     0       31      11      78      0       0       0
7       127     557     1       31      404     63      0       0       0
Node Count: 5
Invalid Frame Count: 0

The files that are captured can also be scanned to give some statistics:
D:\code\bacnet-stack>bin\mstpcap.exe --scan mstp_20110413134119.cap
Scanning mstp_20110413134119.cap
3223 packets
MAC     MaxMstr Tokens  Retries PFM     Treply  Tusage  Trpfm   Tder    Tpostpd
0       1       557     0       32      11      47      0       0       0
2       0       557     0       47      0       0       0       0       0
3       4       557     0       32      11      110     0       0       0
5       6       558     0       31      11      78      0       0       0
7       127     557     1       31      404     63      0       0       0
Node Count: 5
Invalid Frame Count: 0

The BACnet MS/TP capture tool also includes statistics which are
listed for any MAC addresses found passing a token,
or any MAC address replying to a DER message.
The statistics are emitted when Control-C is pressed, or when
65535 packets are captured and the new file is created.
The statistics are cleared when the new file is created.
The statistics can be emitted from a file using the "--scan" option.

MaxMstr = highest destination MAC address during PFM

Tokens = number of Token frames sent from this MAC address.

Retries = number of second tokens sent to this MAC address.

PFM = number of Poll-For-Master frames sent from this MAC address.

Treply = maximum number of milliseconds it took to reply with
a token after receiving a token. Treply is required to be less
than 25ms (but the mstpcap tool may not have that good of
resolution on Windows).

Tusage = the maximum number of milliseconds the
device waits for a ReplyToPollForMaster or Token retry.
Tusage is required to be between 20ms and 100ms.

Trpfm = maximum number of milliseconds to respond to PFM with RPFM.  It is
required to be less than 25ms.

Tder = maximum number of milliseconds that a device takes to
respond to a DataExpectingReply request.  Tder is required to be less
than 250ms.

Tpostpd = maximum number of milliseconds to respond to
DataExpectingReply request with ReplyPostponed.  Tpostpd is
required to be less than 250ms.

Note that the mstpcap tool may not have that good of
resolution on Windows, so timing under 50ms may not be accurate.

==== FTDI chip RS-485 converter 76800 baud tricks ==== 

If you are using FTDI chip in your RS485 converter, you can
alias an existing baud rate on Windows in the FTDIPORT.INF file
in order to acheive non-standard 76800 bps:
HKR,,"ConfigData",1,11,00,3F,3F,27,C0,00,00,27,00,00,00,C4,09,00,00,E2,04,00,00,71,02,00,00,38,41,00,00,9C,80,00,00,4E,C0,00,00,34,00,00,00,1A,00,00,00,0D,00,00,00,06,40,00,00,03,80,00,00,00,00,00,00,D0,80,00,00

replace the 10,27,00,00 => divisor = 10000, rate = 300 bps alias

hex values    actual
-----------   ---------
27,C0,00,00 - 76923 bps => divisor=39.125
27,00,00,00 - 76677 bps => divisor=39.000

Windows XP (from koby3101)
1) Plug in and locate your USB/RSS85 in Device Manager under ports. Right click
on it and select Properties. Click Details tab and from the drop down select
Device Instance Id.

2) Click Start, Run and then type regedit.
Follow this path in the registry
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\FTDIBUS

Locate the folder that has the same name as what you found earlier Device Instance
Id in step 1. Click on 0000 folder and then Device Parameters. On the right
side you will see ConfigData. Right click and select Modify Binary Data.
Locate the 10 27 which in my case were in 5th and 6th position and replace with
27 C0.

This will make the RS485 go to 76800 baud (76923 baud) baud when you ask it
to be 300 baud.

So to capture at 76800 baud type: mstpcap.exe COM2 300


Linux (used with Debian Lenny and Fedora 15)
http://www.connecttech.com/KnowledgeDatabase/kdb309.htm
As root:
chmod 777 /dev/ttyUSB0  - so I can use it later as normal user
setserial /dev/ttyUSB0 –a       - this prints current info about the device
/dev/ttyUSB0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
       Baud_base: 24000000, close_delay: 0, divisor: 0
       closing_wait: infinte
       Flags: spd_normal low_latency

setserial /dev/ttyUSB0 spd_cust - to make custom speed
setserial /dev/ttyUSB0 divisor 312      - 24000000/312 gives 76923 baudrate
setserial /dev/ttyUSB0 –a               - just to make sure changes got applied
/dev/ttyUSB0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
       Baud_base: 24000000, close_delay: 0, divisor: 312
       closing_wait: infinte
       Flags: spd_cust low_latency

Now as normal user running the mstpcap which uses the default 38400 baud it
will actually capture at 76800 baud. (76923)

Just navigate to bin folder in the project and type:

./mstpcap

