Technical Details

NMEA Messages

Many nautical instruments generate messages in an NMEA 0183 or NMEA 2000 (N2k) format. These messages might give the boat speed or water depth. OpenSkipper is designed to process and display the data contained in these messages. OpenSkipper can also process AIS messages which give information about other vessels; these messages might be received by your VHF radio or AIS receiver, and then transmitted via an NMEA 0183 or NMEA 2000 connection to a PC.

Incoming Streams

OpenSkipper can receive NMEA 0183, NMEA 2000 (N2k) and AIS messages and decode (some of) them to extract the data in the messages. NMEA 0183 and AIS messages can be received via a COM port or the internet (via UDB or TCP/IP). NMEA 2000 messages can be received using the Actisense NGT1-USB NMEA-to-USB converter or over the internet. We describe each of the message sources as a stream. OpenSkipper can also process log files (in various formats) that have been recorded from NMEA instruments.

Out-going Streams

As well as processing incoming streams, OpenSkipper can forward messages (or generate new messages) into outgoing streams. For example, N2k messages might be forwarded to another computer using a TCP/IP connection, or broadcast over a network using UDP. This allows scenarios such as a yacht relaying its N2k data to a chase boat to give the chase boat’s crew a real time display of the yacht’s performance. Streams can also be recorded to (and replayed) from log files.

Decoding Message

OpenSkipper provides editors (called ‘explorers’) for displaying and editting the XML definition files used to describe how an N2k, AIS or 0183 message should be decoded. For NMEA 2000, these XML files will can be produced using the Canboat software.  (See the Canboat pgn.h file for the latest CanBoat PGN information.) The definition files are not yet complete; we welcome more definition details and corrections. Note that OpenSkipper has default definition files built in to the executable. You can edit and save these to disk, and then use them as your default definitions.


The user can define ‘Parameters’ such as speed that automatically update their values when the appropriate N2k or 0183 message arrives. A parameter such as ‘speed’ can be updated by either N2k or 0183 messages. The parameter definitions define the named fields given in the N2k, AIS and 0183 definitions that should be used to update the value for each parameter.

Data Display

The user can design their own screen displays that are used to graphically display values of parameters. As of April 2014, these are defined using a ‘Displays.xml’ file. Any standard C# control can be added, with an ‘extender’ being provided to add NMEA properties specifying which Open Skipper parameter should be displayed, and the name of the control’s property that should be used to do this. More sophisticated custom controls can also be built that directly interpret the messages.

Web Server

OpenSkipper has a simple built in Web server. (You need admin privileges to run this under Vista.) This lets you serve up a selection of parameters which get updated in real time. Using an ad-hoc wireless network, you can now view your boat instruments on your WiFi cell phone or tablet.

Good luck!

There is still lots to do. As always, we hope to expand the code and its documentation over time, but we hope this is a useful first step. Andrew Mason

PS: We are not experienced C# programmers; this is our first experiment with C# and so there will be mistakes that we would love to have corrected. All feedback welcome.

All copyrighted terms, including NMEA, NMEA 018, NMEA 2000, Actisense, and NGT1, are the property of their respective owners. Everything provided in Open Skipper is available in the public domain, and has not been obtained as the result of signing any non-disclosure agreements with Actisense or NMEA.

27 Responses to Technical Details

  1. Ties says:

    Hi Guys,

    Is it possible to use Openskipper to send custom NMEA 0183 commands (strings) to NMEA instruments? if not, are you aware of a PC program that can?

    Kind regards,

  2. admin says:

    Yes, OpenSkipper can generate custom NMEA 0183 commands, and has been used for doing this. I’d have to remind myself how this works, but you should be able to find it. Andrew

  3. andre huizing says:

    Hello, I’m looking for software that can convert n2k actisense stream into nmea0183 stream simulating a com port towards programs like opencpn. Does This exist?

    Thanks very much in advance.

  4. admin says:

    OpenSkipper can generate 0183 messages, and so you could configure it to do this (but it would be tedious for all the possible messages). It would be a very useful feature to have…

  5. TroyC says:

    Can OpenSkipper Generate NMEA 2000 messages? either AIS or DSC message?


  6. admin says:

    OpenSkipper is designed to do this in the future, but at the moment the only way to write to the N2K instruments is using the Actisense NGT-1, and our interface for this is read-only at the moment. What were you wanting to achieve?

  7. TroyC says:

    I want to be able to display Custom AIS information on my Display, such as Crab pots for example, fitted with a wireless transmitter that transmits its GPS locations, I want a build a device that can receive the wifi signals, decode the location and send it to my boats chart plotter using NMEA 2000 bus and the AIS message.


  8. admin says:

    What a great application. Do you have any C# expertise? It would be great if you wanted to extend OpenSkipper to transmit onto the NMEA bus – it is not a big job.OpenSkipper would be a good platform for this. We already have support for working with AIS messages…

  9. TroyC says:

    Sure I know a little bit of C#, enough to get myself into trouble, but I prefer C++,

    of course the biggest hill to climb is just getting my head around the frame work, point me in the right directions and I will see what I can do.


  10. admin says:

    I have been glancing at the code; the comments suggest it should be able to write to the N2K bus, but this has not been tested (and I have only a vague memory now of where we got to with this.) I suggest you look at CANReaders.cs and CANSenders.cs. Note that you need to enable your Actisense device for writing using the Actisense software before you try to write with OpenSkipper. Please let us know how you get on. Andrew

  11. Tim says:

    I have several custom nmea183 sentences that I would like to display. I believe I understand how to add them to the 183 definitions and parameter explorer, but whenever I try to update the XML files to add a field, I get a system.collections.arraylist error. I get this error even if I modify a text field in an existing XML.

    I’m not a programmer (but used to be). Is there a way to edit the forms to display other fields? It looks like this was your intent.

  12. admin says:

    The intent was indeed that OpenSkipper provide the building blocks to create your own displays. It is now some time since I looked at this code, and so am too rusty to be of much help. Timo has been doing development more recently, and so may be able to help… Andrew

  13. Al says:

    I wish to use NMEA Simulator as an N2K simulator but am not clear if it sends System Time and Date. Would you please let me know if it does so?


  14. Timo Lappalainen says:


    NMEA Simulator sends only those messages, which exists and has been checked on Options page. Date/time did not exist, so I added that functionality and you can download newest version from

  15. Ivo says:

    I really get stuck, trying to make OpenSkipper sent custom NMEA message for heading. First I tryed with NMEA Simulator (great App!!!), but the output is HDG, not HDT.
    And I only need to sent via com port message looks like this: $–HDT,x.x,T. Is there any link I can read about and find what I’m doing wrong?

  16. JD Perth says:

    Hi all, I realise I am going over old ground for some but I am yet to find out if anyone solved the issue.
    I am looking for a way to read the data from my Mercruiser Smartcraft sensors on a PC.

    My Mercruiser 350 Mag MPi has a NavBus Smartcraft gateway which feeds data from the Merc to a Navman Tracker 5507 GPS Plotter.

    Unfortunately that Navman unit is dead and Navman / Northstar as a manufacturer of chartplotters that read this data are also dead.

    I can’t seem to find a second hand 5507 to fill the spot on my Maxum 2600SE, so I was hoping to display data such as fuel sensor info, tacho, pressures and temps from the motor on a tablet along with chartplotting software.

    I can’t find the exact information I am looking for, so I am really guessing that the data coming from the NavBus Smartcraft gateway is not NMEA (0183 or 2000) but likely NavMan Proprietary data.
    Anyone have anymore information or been down this path before?

    I don’t want to have to fork out for a Smartcraft to NMEA2000 gateway, or have to buy a bunch of Mercruiser Smartcraft Gauges just because NavMan are no longer around.

    Thanks in anticipation of your help.

  17. admin says:

    I have not worked with Mercruiser, and so cannot help, sorry. Anyone else got any ideas? Andrew

  18. Harry says:

    I am attempting to install OpenSkipper on a laptop running Win XP 32-bit. It responds with “not a valid Win32 application.” I’ve tried several versions (at least 1.5 and 1.6, with the same result. I’ve also run it without issue on a Win10 x64 machine, and then copied that same executable to the XP machine. I’m thinking it is compiled as a x64 executable. Is there a 32-bit version available?


  19. Timo Lappalainen says:


    I think the problem is the XP. I tested application on 32-bit Windows 7 and it started without problems.


  20. Harry says:

    Well, rats. My machine is a bit old for win7. Thanks for the answer, and for the efforts.


  21. Erwin says:


    I installed OpenSkipper (1.6.2016.1217) on a laptop OS Win10. No problem. I am using it on my sailing catamaran “crocodile” with Garmin hardware, NMEA2000 and Actisense NGT-1.
    A big step forward in order to make the flow of data useful.
    As a sailor I want to see wind direction, wind speed, boot heading, speed over ground, etc. over hours in order to be able to make an informed decision which sails to use or to tweak.
    Adjusting OpenSkipper to my personal preferences which software do I need and is this a reasonable undertaking at all? I have some programming expierience using VB and in programming for ORACLE databases.

    Kind reagards
    SY crocodile

  22. Steve says:

    I’m hoping there’s an update to the question about the best way to route SmartCraft messages to N2K that hasn’t made it to this thread.

  23. mark says:

    Is the default for display parameters NMEA 2000. I am connected and see a log file generated from the NMEA 0183, and my TCP connection is good, but with the exception of the Lat and long none of the displays are working for heading, RPM, Compass etc. Am I missing something or do I need to generate a new definition file?

  24. Vince Pelss says:

    If using Win 7, you cannot use the Classic Theme, see Control Panel\Appearance and Personalization\Personalization

    You will get errors like: system.collections.arraylist error

    Just sitch to the Win 7 theme. Ich

  25. Ken Kaye says:

    1. I have Open Skipper on my HP laptop operating on Windows 10. I have a program on my droid called “Share GPS”. It will stream my location from the droid to the laptop. I have been able to do this using Open CPN. I cannot do this with Open Skipper probably because I do not know how to setup Open Skipper properly. Please help.

    2. Can I multi task Open Skipper with navigation software like Open CPN which does not read NMEA 2000?

  26. Timo Lappalainen says:

    1. I did not understood your question. Do you want to read GPS to Open Skipper from android “Share GPS” or do you want to share GPS from Open Skipper?

    For reading NMEA 0183 data from some port on Open Skipper select View-“Data Streams”-“NMEA 0183(com ports)” and press “Add new” Then you can define name, speed and com port. Finally press Connect.

    2. I did not understood this either. Naturally you can run Open Skipper and Open CPN at same time and they can read data from different ports. You can not forward Open Skipper NMEA 2000 data to the Open CPN, since Open Skipper does not do protocol conversion.

    I have published NMEA 2000 library, which you can use e.g. build NMEA 2000 bus device. There is also sample for NMEA 2000 -> NMEA 0183 converter. See.

  27. Simone Pariani says:

    Dear Mr Timo,
    You have my respect for your NMEA simulator, It seems a very useful and complete tool.
    I need a NMEA 0183 simulator to send the following streams, please could you check if they are fully implemented in your tool or not?

    Many thanks in advance,

    Best Regards


    0.1.1 NMEA 0183

    The NMEA 0183 sentences explained in the following sections are received from the field

    Serial 1 – DB5
    RS422 @38400b/s 8bit Parity None 1 stop bit
    HDT – Heading – True
    Actual vessel heading in degrees true produced by any device or system producing true heading.
    1 2 3
    | | |
    Field Number:
    1. Heading, degrees True
    2. T = True
    3. Checksum

    Example: $GPHDT,274.07,T*03
    HDM – Heading – Magnetic
    Vessel heading in degrees with respect to magnetic north produced by any device or system producing magnetic heading.
    1 2 3
    | | |
    Field Number:
    1. Heading Degrees, magnetic
    2. M = magnetic
    3. Checksum

    Example: $GPHDM,274.07,M*03
    ROT – Rate Of Turn
    1 2 3
    | | |
    Field Number:
    1. Rate Of Turn, degrees per minute, “-” means bow turns to port
    2. Status, A means data is valid
    3. Checksum
    Example: $HEROT,0.0,A*2B

    Serial 2 – DB6
    RS422 @4800b/s 8bit Parity None 1 stop bit
    RSA – Rudder Sensor Angle (PORT)
    1 2 3 4 5
    | | | | |
    Field Number:
    1. Starboard (or single) rudder sensor, “-” means Turn To Port
    2. Status, A = valid, V = Invalid
    3. Port rudder sensor
    4. Status, A = valid, V = Invalid
    5. Checksum

    Serial 3 – DB7

    RS422 @4800b/s 8bit Parity None 1 stop bit
    RSA – Rudder Sensor Angle (STBD)
    1 2 3 4 5
    | | | | |
    Field Number:
    1. Starboard (or single) rudder sensor, “-” means Turn To Port
    2. Status, A = valid, V = Invalid
    3. Port rudder sensor
    4. Status, A = valid, V = Invalid
    5. Checksum

    Serial 4 – DB8
    RS422 @4800b/s 8bit Parity None 1 stop bit
    DPT – Depth of Water (FWD)
    1 2 3 4
    | | | |
    Field Number:
    1. Water depth relative to transducer, meters
    2. Offset from transducer, meters positive means distance from transducer to water line negative means distance from transducer to keel
    3. Maximum range scale in use (NMEA 3.0 and above)
    4. Checksum

    Example: $INDPT,2.3,0.0*46
    RMC – Recommended Minimum Navigation Information
    This is one of the sentences commonly emitted by GPS units.
    1 2 3 4 5 6 7 8 9 10 11| 13
    | | | | | | | | | | | | |
    Field Number:
    1. UTC Time of position
    2. Status, A = Valid, V = Warning
    3. Latitude
    4. N or S
    5. Longitude
    6. E or W
    7. Speed over ground, knots
    8. Track made good, degrees true
    9. Date, ddmmyy
    10. Magnetic Variation, degrees
    11. E or W
    12. FAA mode indicator (NMEA 2.3 and later)
    13. Checksum
    A status of V means the GPS has a valid fix that is below an internal quality threshold, e.g. because the dilution of precision is too high or an elevation mask test failed.
    Example: $GNRMC,001031.00,A,4404.13993,N,12118.86023,W,0.146,,100117,,,A*7B
    VTG – Track made good and Ground speed
    This is one of the sentences commonly emitted by GPS units.
    1 2 3 4 5 6 7 8 9 10
    | | | | | | | | | |
    Field Number:
    1. Course over ground, degrees True
    2. T = True
    3. Course over ground, degrees Magnetic
    4. M = Magnetic
    5. Speed over ground, knots
    6. N = Knots
    7. Speed over ground, km/hr
    8. K = Kilometers Per Hour
    9. FAA mode indicator (NMEA 2.3 and later)
    10. Checksum

    Example: $GPVTG,220.86,T,,M,2.550,N,4.724,K,A*34

    Serial 5 – DB9
    RS422 @4800b/s 8bit Parity None 1 stop bit
    VBW – Dual Ground/Water Speed
    1 2 3 4 5 6 7 8 0 10 11
    | | | | | | | | | | |
    Field Number:
    1. Longitudinal water speed, “-” means astern, knots
    2. Transverse water speed, “-” means port, knots
    3. Status, A = Data Valid
    4. Longitudinal ground speed, “-” means astern, knots
    5. Transverse ground speed, “-” means port, knots (NOT PRESENT)
    6. Status, A = Data Valid
    7. Stern traverse water speed, knots *NMEA 3 and above)
    8. Status, stern traverse water speed A = Valid (NMEA 3 and above)
    9. Stern traverse ground speed, knots *NMEA 3 and above)
    10. Status, stern ground speed A = Valid (NMEA 3 and above)
    11. Checksum
    VLW – Distance Traveled through Water
    1 2 3 4 5 6 7 8 9
    | | | | | | | | |
    Field Number:
    1. Total cumulative water distance, nm
    2. N = Nautical Miles
    3. Water distance since Reset, nm
    4. N = Nautical Miles
    5. Total cumulative ground distance, nm (NMEA 3 and above)
    6. N = Nautical Miles (NMEA 3 and above)
    7. Ground distance since reset, nm (NMEA 3 and above)
    8. N = Nautical Miles (NMEA 3 and above)
    9. Checksum

    Serial 6 – DB10
    RS422 @4800b/s 8bit Parity None 1 stop bit
    DPT – Depth of Water (AFT)
    1 2 3 4
    | | | |
    Field Number:
    5. Water depth relative to transducer, meters
    6. Offset from transducer, meters positive means distance from transducer to water line negative means distance from transducer to keel
    7. Maximum range scale in use (NMEA 3.0 and above)
    8. Checksum
    Example: $INDPT,2.3,0.0*46

    MTW – Mean Temperature of Water
    1 2 3
    | | |
    Field Number:
    1. Temperature, degrees
    2. Unit of Measurement, Celsius
    3. Checksum

    Example: $INMTW,17.9,C*1B

    XDR – Transducer Measurement
    1 2 3 4 n
    | | | | |
    $–XDR,a,x.x,a,c–c, ….. *hh
    Field Number:
    1. Transducer Type
    2. Measurement Data
    3. Units of measurement
    4. Name of transducer
    There may be any number of quadruplets like this, each describing a sensor. The last field will be a checksum as usual.
    MWD – Wind Direction & Speed
    1 2 3 4 5 6 7 8 9
    | | | | | | | | |
    Field Number:
    1. Wind Direction, 0 to 359 degrees
    2. T = True
    3. Wind Direction, 0 to 359 degrees
    4. M = Magnetic
    5. Wind Speed
    6. N = Knots
    7. Wind Speed, meters per second
    8. M = Meters per second
    9. Checksum
    MWV – Wind Speed and Angle
    1 2 3 4 5
    | | | | |
    Field Number:
    1. Wind Angle, 0 to 359 degrees
    2. Reference, R = Relative, T = True
    3. Wind Speed
    4. Wind Speed Units, K/M/
    5. Status, A = Data Valid, V = Invalid
    6. Checksum

Leave a Reply

Your email address will not be published. Required fields are marked *