The p12mProg is the AO control program for
the 12 meter telescope. It records the telescope status once a
second to a logfile.
Some properties of the file are:
File location: |
/share/phidat/p12m/ |
daily file creation |
new file started each day
at 0Hrs AST |
file Naming |
logdata_yyyymmdd.dat |
file size |
24Mbytes/day |
file format |
binary little endian..
see record format below |
The file contains records (86400 if
a full day is recorded). each record is:
field |
type/ units |
byte Offset |
description |
cpuTmAtWaitTick |
double sec1970 |
0 |
when we waited for the
next 1 sec tick for this record. This is normally 50 millisecs before the tick |
cpuTmAtTick |
double sec1970 |
8 |
Time when we woke up for
the tick.. (with fractions of a sec) |
durRdDev |
double secs |
24 |
the time from the tick,
till when we complete the status read from the device.
This includes computing the new position, sending it to
the ramp logic, and then reading the device status
block. It is typically 40 ms (25ms is to actually do the
read). |
durWrLast |
double secs |
32 |
secs to write the
previous log record to disc. |
stBlk |
P12M_STAT_BLK struct
(read from controller via group read at tick) |
||
stBlk.mjd |
double day |
40 |
utc mjd time stamp for
the data read back.The units are days, the resolution is
ms. We run the system clock in utc, not ut1 (dut1 set to
0). All of the values in stBlk are at this timestamp. |
stBlk.st |
P12M_STAT_WORDS (4
32bit statwords from controller (as 4 bitfields) |
||
stBlk.st.azM |
32bit |
48 |
azimuth master 32bit
status word |
stBlk.st.azS |
32bit |
52 |
azimuth slave 32 bit
status word |
stBlk.st.el |
32bit |
56 |
elevation 32 bit status
word |
stBlk.st.cen |
32bit |
60 |
central processor status
word |
stBlk.aPos_D |
dbl deg |
64 |
azimuth position read
from encoder at mjd timestamp |
stBlk.azErr_D | dbl deg |
72 |
azimuth error read from
controller. It is the tracking error when locked to
trajectory, or the error to follow the request path to
lock (if not locked) |
stBlk.azFdBackVel_DS |
dbl deg/sec |
80 |
azimuth velocity read
back from controller deg/sec |
stBlk.azMotCur_A |
dbl amps |
88 |
azimuth master motor
current |
stBlk.azSlMotCur_A |
dbl amps |
96 |
azimuth slave motor
current |
stBlk.elPos_D |
dbl deg |
104 |
elevation position read
back from controller. |
stBlk.elErr_D |
dbl deg |
112 |
elevation tracking error
(see azimuth description above) |
stBlk.elFdBackVel_DS |
dbl deg/sec |
120 |
elevation velocity read
back from controller |
stBlk.elMotCur_A |
dbl amps |
128 |
elevation motor current |
tickTmIsec |
long sec1970 |
136 |
time at this tick
(integral). This is the time base used for where we are. |
statWd |
32bit |
144 |
p12mProg statword. 32
bit field. Contains status on what the program is
doing. |
numIoThrds |
int cnt |
148 |
number of i/o threads
currently talking to p12mProg. These are the programs
sending commands or querying status. |
frListFrBufs |
int cnt |
152 |
number of free message
buffers (1024) in total. the different threads
communicate with messages (i/o threads to Xf thread,
xfThread to loggingThread) |
nDevConnectOk |
int cnt |
156 |
number of times the
xfThread has successfully connected to controller. A
reconnect occurs of the controller does not reply to a
request. |
nDevConnectFail |
int cnt |
160 |
number of time reconnects
to controller failed (timed out). |
trkArFreePnts |
int cnt |
164 |
number of free locations
in track array (1000 max). This is no longer used (since
grp reads don't use the track array). |
pl |
P12M_LOG_DATA_PL
.. requested data: When using the track array, these
were the requests computed 2 seconds in the future. When
we switched to group read, these are the requests
computed at the tick and then immediately sent. |
||
pl.azReqD |
dbl deg |
168 |
requested azimuth
position we send to controller |
pl.elReqD | dbl deg |
176 |
requested elevation
position we send to controller |
pl.corAzD |
dbl deg |
184 |
azimuth correction
(little circle). This is the model plus any greatCircle
offsets (from dbg gc azOff elOff) This value is added to the computed (radec->azel) position. pl.azReqD=azCmp + azCorD |
pl.corElD | dbl deg |
192 |
elevation correction.
This includes the model (with refraction
included). |
pl.modelCorAzD |
dbl deg |
200 |
computed model correction
for azimuth (little circle) |
pl.modelCorElD |
dbl deg |
208 |
computed model correctio
for elevation (includes refraction) |
pl.modelLocAzD |
dbl deg |
216 |
the azimuth position used
to compute the model. |
pl.modelLocElD |
dbl deg |
224 |
the elevation position
used to compute the model (before refraction). |
pl.raJReqD |
dbl deg |
232 |
requested ra J2000
position (back computed from azcmp so it includes any
rates or offsets). This is where we should have been
pointed |
pl.decJReqD |
dbl deg |
240 |
requested dec J2000
position (back computed from elCmp) |
pl.c1OffCumD |
dbl deg |
248 |
if you apply an offset
and or rate (in the same coordinate system) then this
will be the cumulative offset. Normally used when doing
crosses in az,el. If the offset,rates are great circle
then this is great circle. If the rates and offsets are
in different coordinate systems then this is probably
junk...This would be az |
pl.c2offCumD |
dbl deg |
256 |
cumulative offset for
second coordinate (see above). |
pl.dut1sec |
dbl sec |
264 |
dut1 used for this time
stamp (ut1-utc) |
pl.tickTmIsec |
long sec1970 |
272 |
the time stamp for this
request packet. For Group reads it should match
.tickTmIec above (it was added when we were computing
things 2 secs ahead with trackarray). |
azErrD |
float deg |
280 |
computed azimuth error:
Requested - Actual interpolated to the readback
timestamp |
elErrD |
float deg |
284 |
computed elevation error:
Requested - actual (readback) |
gcErrD |
float deg |
288 |
great circle pointing
error (requested - actual):sqrt((azerr*cos(el))^2 +
elErr^2)) |
fill |
int |
292 |
There are idl routines to access the
contents of the logfile: