# WIP message

WIP message is a work-in-progress message sent from a computer client to a computer server. It is used to update a server with the progress of an item during a manufacturing process. The only known use is in the automotive wiring manufacturing process, but the message structure is generic enough to be used in any manufacturing process.

## History

The WIP Message Protocol was originally developed to overcome the need to allow computers running disparate operating system to communicate with one another. The first implementation was on the Acorn computer running the RISC OS swiftly followed by a PC implementation.

## Communication methodology

Each computer may act as a server, a client, or both. In the server configuration a listening socket is opened on a specific port (default port is 99) and the server waits for connection attempts from its clients. The client connects by opening a socket and sending data to the server in the format [Header][Data]. The header contains information about the message such as the message length, message number which can be anything from 1 to 4,294,967,295 and the part unique identifier or serial number which is limited to 10 digits (9,999,999,999 max). The serial number consists of the year 4 digits, the day of the year (0-366) 3 digits and a 3 digit sequential number.
The server will action the message (each message number has a specific meaning to the particular process) and respond with a return code. The return code is commonly used to designate whether the process is allowed to proceed or not. The server will usually be written in such way that the manufacturing process flow is mapped and the Server will therefore not allow manufacturing to progress to the next stage if the previous stage is incomplete or failed for some reason.

## Message format

Two formats of message are used. Loosely termed a 'short' and a 'long' message format, a short message contains specific information along with 18 bytes that can be used for custom information, whereas a long message can contain anything that is required and the two applications sending and receiving the data must know what format is being used. The message terminator must always be the carriage return character (0x0D).

### Short message structure

[Date & Time (14 bytes)][Location Number (2 bytes)][Part Serial Number (10 bytes)][NULL][Data (18 bytes)][Carriage Return] Example of a short message data portion 199809241342052 1998272093[NULL] [Carriage return]

## Common message numbers

| Message number | Description |
| 1 | Delete job |
| 2 | Birth certificate barcode validated |
| 3 | Airbag barcode validated |
| 4 | Robust label barcode validated |
| 5 | Part has reached testing stage |
| 6 | Part has finished testing stage |
| 8 | Arrival at box packing |
| 9 | Arrival at pallet load |
| 12 | Arrival at vision test |
| 14 | Vision test result |
| 17 | Query where a specific part is within the process |
| 18 | Response to query request |
| 21 | Request version number (returns the version number of the software on the client) |
| 50 | Sequential number request |

## Common return codes

| Code number | Meaning |
| 0 | Unrecognised WIP message |
| 1 | Message processed correctly |
| 2 | Out of build sequence |
| 3 | Record not found |
| 4 | Stage repeated |
| 6 | Product already in progress |
| 7 | Operator not found |
| 8 | Operator insufficient level |
| 9 | Product in quarantine |

## Limitations

Because the serial number can only contain 10 digits and must be unique across the same part for traceability, there is a limit to the number of items that can be manufactured on one day. This figure is nominally 999, but to overcome this it has been known that a day number offset of 500 be used such that the number produced can be doubled, whilst still maintaining a unique number. An example of this would be on 4 March 2008; Location A produces parts with serial number 2008064001 - 2008064999, Location B uses a 500-day offset to produce parts 2008564001 to 2008564999.