Get the SWA TCs for a given date

First, make a batch TC request for a given date, with XML output format

That correspond to EDDS batch TC report, with PID in range [95,99] and a daily time range

PID range [95,99] corresponds to APID in range [1520, 1599]

Typically, all SWA TCs corresponds to PID, CATEG = 95,12 ⇒ APID 1532

$ python EDDS.py batch_TC 2022-01-04T00:00 P1D

Returns an .xml file :

20220104_000000_20220105_000000.swa-batch-tc.xml

This XML can be converted in various output formats

We are using a dedicated python script :

$ python -m batch_TC 20220104_000000_20220105_000000.swa-batch-tc.xml
Writing : 20220104_000000_20220105_000000.swa-batch-tc.txt
Writing : 20220104_000000_20220105_000000.swa-batch-tc.hex
Writing : 20220104_000000_20220105_000000.swa-batch-tc.bin
  • Text file

Extract from XML the ReleaseTime, ExecutionTime, SequenceName, CommandName, Description

20220104_000000_20220105_000000.swa-batch-tc.txt

It corresponds to "SWA preloaded TCs" on our web site.

  • CCSDS hexadecimal format

Extract the RawBodyData field from XML.

It’s a sequence of CCSDS TCs, in hexadecimal format, one per line.

To be used as input as input of our L1 data processing software

20220104_000000_20220105_000000.swa-batch-tc.hex
  • CCSDS binary data

Same content than hexadecimal file, but in binary format.

20220104_000000_20220105_000000.swa-batch-tc.bin

Our data processing chain can handle both hexadecmal files (when parsing stream data) or binary files (batch requests data)

Parse the TCs CCSDS packets

As mentionned, TCs CCSDS packets have no internal timetags.

So the CCSDS header for those packet is shorter than TM ones:

  • a primary header (6 bytes) gives the (PIDi, CATEG) ⇒ APID = 1532 for SWA, the sequence counter for such APID, and the CCSDS packet length

  • a secondary header (4 bytes) gives the service_type and sub_stype

  • the remaining part contains the various parameters sent to the TC (length varying for each TC)

Note

The 4 first bytes of each CCSDS TC packet will be used later as a key to identify the TC

For each TC, the 4 first bytes are enough to extract the apid and sequence_counter, that are unique since the last reboot.

Identitying the TCs

All TCs for SWA are sent with APID = 1532.

Then service_type and sub_service are used to idenfity the various TCs used by SWA.

The TCs can be uniquely identified with the key (apid, service_type, sub_type) in the MIB file ccf.dat (Command Characteristic File)

In the example, the TC ZIA58064 : SWA_TC_PARS_MON_DIS is identified with 200, 171, 1532 (service_type, sub_service, apid)

$ cat /DATA/SOLAR/MIB/latest/ccf.dat | grep ZIA58064

ZIA58064        SWA_TC_PARS_MON_DIS     SWA TC disable the monitoring of parameters             N       NOM_TC  200     171     1532    2       N       Y       N       C       109     N                               9       109

Parsing TC acknowledgements

As mentionned before, the CCSDS TC packets have no timetag information.

In order to known when a TC is executed onboard, we have to parse various TM CCSDS packets called TAR[SF] and TEC[SF].

  • TAR means Telecommand Acceptation Request : when the TC is received by DPU

  • TEC means Telecommand Execution Completion : when the TC execution is completed

For each one, S means Success and F Failure

  • TARS : corresponds to service (1,1)

  • TARF : corresponds to service (1,2)

  • TECS : corresponds to service (1,7)

  • TECF : corresponds to service (1,8)

Both TAR[SF] and TEC[SF] data contains a 4 bytes key that must be used to identify the TC that is acknowledged.

That key correspond to the 4 first bytes of a CCSDS TC header, that contains apid = 1532 and increasing sequence_count.

By parsing the TAR[SF] and TEC[SF] and their corresponding timetag, we can know when a TC has been received or executed, and if it was succesful or not.

When receiving TARF and TECF, we can also parse the data content of CCSDS payload to have some error code and explanation of the failure.