Shooting Chrony PC Protocol

...

Shooting Chrony PC Protocol

Salvaged from the web archive.

The serial port settings are 4800bps, 8 data bits, no parity and 1 stop bit.

Each line of a response includes a carriage return (0x0D) and line feed (0x0A), the initiating command does not. A serial terminal emulator application, Hyperterm on Windows or Minicom on OS X and Linux, can be used to manually interact with the Chrony. Chrony PC interface commands:

SYSXEnter PC control mode
X.ENDTerminate PC control mode
X.ALOPing Chrony
X.GEEGet shot data
X.QRYGet system information
X.CPYCopy string data
X.INCIncrement string number
X.DECDecrement string number
X.GRMGet string data
X.HXBHex dump EEPROM page with page decrement
X.HXFHex dump EEPROM page with page increment
X.HXDHex dump EEPROM page
X.RUNModify system parameter

Getting in and out of PC control mode:

CommandDescription
SYSXChrony enters PC control mode. Chrony may not enter PC control mode if screen is not the start screen or -[]- screen when this command is issued. On receipt of the SYSX command the Chrony responds with the ready prompt 0:rdy> and also displays =PC= on the LCD. The ready prompt is also sent after valid commands are executed. Invalid commands do not get any response although the Chrony will display Crr1 on the LCD. It seems the X at the end of the command can be any character.
X.ENDTerminates PC control mode. Responds with the message {}ok!
X.ALOCan be used to test if the Chrony is connected and in PC control mode. Think of it as a ping command or “Allo” are you there. Responds with the message {}ok!
Thanks to Tom over at opgenorth dot net for information on this command.

Getting memory contents and system information:

CommandDescription
X.GEEDumps the working memory and stored string data.
The blocks of data represent the number of shots in the string, the shot within the string, the string the shot belongs in and in this case the velocity in feet per second. String zero is the string in working memory.
{
, 0010nf
-01-, 0000nf, 49.61Vf
-02-, 0000nf, 49.78Vf
-03-, 0000nf, 49.94Vf
-04-, 0000nf, 50.11Vf
-05-, 0000nf, 50.27Vf
-06-, 0000nf, 50.44Vf
-07-, 0000nf, 50.61Vf
-08-, 0000nf, 50.78Vf
-09-, 0000nf, 50.95Vf
-10-, 0000nf, 51.12Vf

, 0010nf
-01-, 0001nf, 5933.81Vf
-02-, 0001nf, 5957.17Vf
-03-, 0001nf, 5980.72Vf
-04-, 0001nf, 6004.45Vf
-05-, 0001nf, 6028.37Vf
-06-, 0001nf, 6052.49Vf
-07-, 0001nf, 6076.79Vf
-08-, 0001nf, 6101.30Vf
-09-, 0001nf, 6126.00Vf
-10-, 0001nf, 6150.90Vf

, 0010nf
-01-, 0002nf, 49.61Vf
-02-, 0002nf, 49.78Vf
-03-, 0002nf, 49.94Vf
-04-, 0002nf, 50.11Vf
-05-, 0002nf, 50.27Vf
-06-, 0002nf, 50.44Vf
-07-, 0002nf, 50.61Vf
-08-, 0002nf, 50.78Vf
-09-, 0002nf, 50.95Vf
-10-, 0002nf, 51.12Vf
}ok!
X.QRYGet system information
{
Shooting Chrony, V6.03i,25/DEC/1999,0Fe-003C-1
Len=12.000-in Fre=12.000-MHz OSt=98304
System: 01000000+00000000
FreeMem, 0004nf
Strings, 0002nf
Current, 0002nf
RecSize, 0010nf
}ok!

Working with strings:

CommandDescription
X.CPYCopy current string from EEPROM to working memory
{-10-, 0002nf}ok!
X.INCIncrements the string number that will be returned by X.GRM
{-10-, 0004nf}ok!
X.DECDecrement the string number that will be returned by X.GRM
{-10-, 0001nf}ok!
X.GRMReturns the current string
{
, 0010nf
-01-, 0000nf, 5933.81Vf
-02-, 0000nf, 5957.17Vf
-03-, 0000nf, 5980.72Vf
-04-, 0000nf, 6004.45Vf
-05-, 0000nf, 6028.37Vf
-06-, 0000nf, 6052.49Vf
-07-, 0000nf, 6076.79Vf
-08-, 0000nf, 6101.30Vf
-09-, 0000nf, 6126.00Vf
-10-, 0000nf, 6150.90Vf
}ok!

Accessing EEPROM contents:

CommandDescription
X.HXBDecrement page and hex dump
{
0100: }ok!

Note that this page exceeds the address range of the EEPROM in a Beta Chrony and returns an empty set.
X.HXFIncrement page and hex dump
{
FF00: }ok!

Note that this page exceeds the address range of the EEPROM in a Beta Chrony and returns an empty set.
X.HXDHex dump without increment or decrement
The first 8 bytes of page zero are reserved for system use. Following the system bytes are 16-bit little-endian shot values. The values are likely expressed in units or ticks used to measure the time it takes a projectile to travel between the screens. These are the values listed along with the FPS values when generating test shots. The Chrony uses some type of encoding for values greater than 32K.
{
0000: 00 00 13 FF FF FF FF F1 F8 07 F0 07 E8 07 E0 07
0010: D8 07 D0 07 C8 07 C0 07 B8 07 B0 07 90 DB 5E DB
0020: 2C DB FA DA C8 DA 96 DA 64 DA 32 DA 00 DA CE D9
0030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0040: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0070: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0080: }ok!

Note that this is all the EEPROM memory of a Beta Chrony, 128 bytes. The EEPROM of a Gamma Chrony is 2048 bytes.

Modifying system settings:

CommandDescription
X.RUNChange/configure settings (see X.RUN subcommands)
Thanks to Matthew Massey over at yahoo dot com for X.RUN subcommand details.
Thanks to Tom over at opgenorth dot net for identifying on this command.

X.RUN Subcommands:
These are sent after a X.RUN and the commands can be combined (i.e. X.RUNX.KLR)
X.RUN gives a “}” prompt, and awaits a RUN command, system returns to “0:rdy” after a RUN command.

CommandDescription
X.ALOVerify connection
X.BUTReset (as if the power switch had been turned off then on)
X.CL{}Clear system setting – {} = 0 – F (See settings configuration)
X.DELDelete all strings. Note the working memory is still available until the next command is sent then it is deleted.
X.H{}{}Move through HEX pages – {} = 0 – F
X.KLRReturn settings to factory default – clear all settings.
X.Q{}{}Generate test shots for current string – {} = 0 – F (See generating test shots)
X.RS{}Set the String Size (Record Size) (See Setting Record Size)
X.SDLDelete current string only.
X.SE{}Set system setting – {} = 0 – F (See settings configuration)
X.TN{}Generate test shots after X.END (See generating test shots)
X.TX{}Generate (record size) tests shots (See generating test shots)
X.UPDClear system settings 1,2,3,11,12,13,14 (See settings configuration)
X.WE0Retrieve information about current string (String # and Number of shots in string)
X.ZAPClear working memory (RAM).

Settings Configuration
These commands are used to set the “Switchable Program Functions”

After a X.QRY the systems displays;

Shooting Chrony, V6.03i,25/DEC/1999,0Fe-003C-1
Len=12.000-in Fre=12.000-MHz OSt=98304
System: 00000000+00000000
FreeMem, 0004nf
Strings, 0002nf
Current, 0003nf
RecSize, 0010nf

The "System:00000000+00000000" shows what “Switchable Program functions” are set at.
Refer to the Manual for definitions on these settings.
All “0” Zeros is factory defaults. A setting is either “0” – default or “1” – alternate settings.

There are 8 bits separated by a “+” then another 8 bits for a total of 16. Each bit is a particular setting.
Each Bit is referenced by its binary number (0 – F – 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F is 16)

BitDescription
0Feet/Meters – 0=Feet 1=Meters
1Photocell ON/OFF – 0=ON 1=OFF
2Photocell Automatic/Manual – 0=Auto 1=Manual
3Alarms Enable/Disable – 0=Enable 1=Disable
4Linear/Circular mode – 0=Linear 1=Circular
5Stats in Velocity/Time – 0=Velocity 1=Time
6Store Velocity only or Velocity & Time – 0=Vel only 1=Vel&Time;
7Slow/Fast fire mode – 0=Slow Fire 1=Fast Fire
8Manual/Auto Save – 0=Manual save 1=Auto save
9Master/Slave PC link – 0=Master 1=Slave
AWhen set to 1, will generate test shots after a X.END (X.TN0)
B(not sure yet)
CFlashes the (EP) save settings code after X.END
DFlashes the (LB) low battery code after X.END
EFlashes the (SO) lost data code after X.END
FFlashes the (LN) string full code after X.END

These can be set or cleared with X.SE* or X.CL*

X.SE*Set the bit to “1”
X.CL*Set the bit to “0”
S.UPDSet Bits 1,2,3,11,12,13,14 to “0”
X.KLRSet all bits to “0”

Generating Test Shots
The run commands X.Q**, X.TN*, and X.TX* are used to generate test shots.
Speeds are 50/100/200/500/1000/2000/3000/4000/5000/6000
0=50, 1=100, 2=200, 3=500… and so forth.

X.Q**This will generate immediate test shots. The first Character after the “Q” is the Speed of the test shots, the second character is the number of test shots. (i.e. X.Q35 will generate 5 test shots at a speed of 500 fs)
X.TN*This will generate test shots after a X.END. The “*” is the speed. (i.e. X.TN7 will generate test shots at a speed of 3000 until the string record size is full)
X.TX*This will generate immediate test shots until the string record size is full. The “*” is the speed of the test shots.

Setting Record Size (String Size)
The “RecSize, 0010nf” shows the current Record Size (String size). This can be changed with the RUN command X.RS*.  The; memory size will change with the record size.  Record; Sizes (String Sizes) are 4 – 32 at 2 shot increments.

X.RS*Record Size. “*” is 0 – F

0=4 1=6 2=8 3=10 4=12 5=14 6=16 7=18 8=20 9=22 A=24 B=26 C=28 D=30 E=32 F=10