Skip to main content

ChronoTrack

ChronoTrack tags carry the runner's bib number directly — RunScore does not look up a chip ID, unlike ChampionChip. Data reaches RunScore through ChronoTrack's middleware (SimpleClient, CCSLite, or the newer Fusion), either live over TCP/IP or from a file the middleware produces.

Setup​

Open the Initialize External Timers dialog, then on an empty slot:

  1. Set Device to ChronoTrack.
  2. Set Port to 61611 (ChronoTrack's CTP01 default). RunScore listens on whatever you enter — only change it if that port is already in use, and set the same value in the middleware.
  3. Check the TCP box.

Then, on the ChronoTrack side, point SimpleClient (or Fusion) at RunScore's IP address and that port — for example, SimpleClient's Direct Socket Out option (localhost if both programs run on the same machine). Once connected, click Play to start sending data.

Loading from a file instead​

If you'd rather not connect live, save a chip-record file from SimpleClient (File > Save file), then in Enter/Edit Results use Ctrl+F9 or File > Load Chip file with the target event on screen.

Connection behavior​

For ChronoTrack, RunScore is the TCP server — it listens on the port you configured and waits for the ChronoTrack middleware to connect in as the client. This is the opposite of some other chip systems (e.g. Macsha), where RunScore is the client.

Once the middleware connects, it sends a one-line greeting (<program name>~<program version>~<protocol version>, e.g. SimpleClient~1.2.3~CTP01). RunScore replies with its own version line and these capability commands:

  • location=multi
  • stream-mode=push
  • tagevent-format=CT01_33
  • newlocations=true
  • connection-id=true — sent only when the middleware identifies as SimpleClient 0.5.0+ (Fusion always qualifies; CCSLite does not)

RunScore then sends start to begin receiving passings (individual tag reads), and answers ping keepalives automatically; none of this requires any action on your part.

Event mapping​

ChronoTrack organizes data by Point (their term for a timing location); RunScore organizes it by Event. When the middleware announces a new location, RunScore tries to match it to a RunScore event with the same name. If nothing matches, you're prompted to pick which RunScore event that location's passings should go into.

Incoming data​

Live TCP requests CT01_33 (~ delimited, CR/LF). Files may use any delimited CT01_XX format. The first digit after the underscore selects the field delimiter:

DigitDelimiter
1comma (,)
2semicolon (;)
3tilde (~)
4pipe (|)
5tab

A typical comma-delimited file record looks like:

CT01_13,1,TIME,123,06:08:32.02,0,0FA22E,4

A live CT01_33 passing looks like:

CT01_33~1~start~9478~08:29:10.29~0~0F2A38~1

The fields are, in order: sequence number, location, bib, time, round (lap/pass number), and two fields RunScore ignores (MAC address, mat/antenna). If an event has Pass / round set, RunScore routes the passing to the event whose Pass matches this field.

warning

RunScore does not support ChronoTrack's fixed-width (no-delimiter) mode. Always configure the equipment for one of the delimited CT01_XX formats listed above — fixed-width records are silently discarded.

Gun times​

If a record's bib field is guntime (case-insensitive), RunScore does not store a passing. It appends the time to guntime.ini in the race folder (sequence,event,time when a sequence is present).

For example:

1,start,08:29:10.29