Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C2A間通信で,2nd OBCからのTlmのTCPヘッダがGSまで送られずにMOBCで捨てられるのを,GSまで送られるようにする #155

Closed
Tracked by #154
meltingrabbit opened this issue Jan 4, 2022 · 11 comments
Assignees
Labels

Comments

@meltingrabbit
Copy link
Collaborator

meltingrabbit commented Jan 4, 2022

概要

C2A間通信で,2nd OBCからのTlmのTCPヘッダがGSまで送られずにMOBCで捨てられるのを,GSまで送られるようにする

詳細

  • 2nd OBCのTCPのheaderがMOBCで上書きされるので,ともに残すようにする.つまり,2nd OBC→MOBCのデータをMOBC→GSのbodyとする(=実質的にはSpace Packetのheaderが2重になってしまうが)
    • これによって,2nd OBCでのheaderがみえるので,2nd OBCでのテレメ生成時刻などがGSでわかるようになる
  • これだと2nd OBC単体試験とMOBC経由でのテレメでのテレメ長が異なってしまう.それはWINGS側で,単体試験時には0埋めheaderを付与することで対応する.
  • ついでに,絶対時刻情報をTCPの2nd headerに差し込む (8byte)

close条件

できたら

備考

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Jan 6, 2022

2nd OBCのTCPのheaderがMOBCで上書きされるので,ともに残すようにする.つまり,2nd OBC→MOBCのデータをMOBC→GSのbodyとする(=実質的にはSpace Packetのheaderが2重になってしまうが)

これだとCCSDS勧告 ( https://sma.jaxa.jp/TechDoc/Docs/JAXA-JERG-2-403.pdf ) に違反するのでやめたい.

なので, 2nd OBCでできたspace packetのheaderをそのままおろしたい.

ただし,MOBCの時刻がheaderにないと,GSでの処理がめんどくさいので,2nd headerにMOBC TIを入れたい?(MOBC Time fieldを新設?)

https://public.ccsds.org/Pubs/133x0b2e1.pdf の 37ページなどから, 2nd headerは比較的自由.

ただし,MOBC TIを2nd OBC headerにMOBC内で差し込む問題点として,router(= Network層はみるが,Datalink層までしか書き換えてはいけない)となるMOBCが2nd OBCからくるspace packetのheaderの一部(MOBC Time field)を書き換えてしまっていいのか?問題.

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Jan 6, 2022

実は,オンボードサブネットワーク上でのNTPサーバー的な機能を考えたほうがいい?(オンボードサブネットワーク上で,統一時刻情報を浸透させたい)
すると,上記の問題が解決される(MOBCでは2nd OBCのヘッダを修正しなくて済む)

オンボードサブネットワーク統一時刻は,以下の要件が必須だと考える.

  • 全ボードで共通で使えるフォーマット
  • 衛星ミッション中に絶対に遡らない,基準として使えるフォーマット
    • なので,絶対時刻同期の難しい衛星ではunixtimeやGPS timeは使いづらく,MOBCのTIなどが妥当か?

例えば,MOBCのTIを全コンポに浸透させる方法を考える.

これの議論点としては,

  • MOBC→2nd OBCへ,TI情報を持ったCmdをうつことで同期
    • 定期的にCmdを打つ場合
      • 2nd OBC側で欲しいタイミングで時刻情報をもらえない
      • 2nd OBC起動直後は時刻がわからないので,headerを作れない
    • 2nd OBCからMOBCのNTP Cmdを打つ場合
      • 2nd OBCがMOBCのCmd発行できるの,セキュリティ的にヤバそうなので考えないとダメ
      • 今,2nd OBCからMOBCへCmdを打てないので,打てるようにしないとダメ(やればいいだけ)
  • 後者が良さそうなきがする.で,2nd OBC起動時やその後定期的に時刻更新してもらう.
  • 時刻ズレはきになる.100msオーダーでは平気でずれそう
    • MOBCから2nd OBCへCmdをうち,2nd OBCのUARTバッファにデータが溜まってから,そのデータを読み出すAppが動くまでのズレがある
    • そのぐらいのズレは一旦許容しても良さそう?今後,GPS timeなどが主流になったらそれに差し替えればいいし

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Jan 6, 2022

Tlm SpacePacketのheaderのイメージ

  • Primary header
    • APID: ちゃんとボードごとにユニークにする
    • Sequence count, ADC countなどのカウンタは,APIDごとに連番になるが,これはGS側でちゃんと処理する(APIDを見ずに処理できなくなる)
  • Secondary Header
    • Time field → Board Time filedへ変更し,各ボードのTIを入れる.
    • global time field : 8byte を新設
      • ISSLでは多分unixtimeやGPS timeといった絶対時刻をいれる流れになっていく予定.低リソースボードや絶対時刻をしれないボードではつかわなくてもいい.一旦8byteで実装するが,可変長対応(0も可能)ができるようにしておく.
    • On board subnet time : 4 byteを新設
      • ここに,オンボードサブネットワーク共有の時刻を入れる.とりあえずMOBCのTIか?(上で議論した方法で各ボードに配送)

副次的な効果として,

  • Packet Identifiler ,つまりTlm IDが,今全ボードを通じてユニークである必要があったが,APIDが違うので,それぞれで定義できるようになりそう.(要WINGS改修)
  • なので,今,MOBCのHKは HK,AOBCのHKは AOBC_HK としているが,AOBCも HK でよくなる(tlm idだけでなくtlm名もかぶって良くなる)
    • C2A coreのtlmを,MOBCと2nd OBCで同じDB(現状CSV)をつかえるので,結構便利になりそう?
    • ただし,WINGS GUI側の修正も必要

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Jan 6, 2022

ついでに,メモ

現在,category 8bitの上位3bitがDatarecorderかRT tlmかreplay tlmかの識別,下位5bitが,DRのパーティションになってるので,なんとかしたい.

DRかどうかなどは,APIDにつっこんでもいい?

The Space Packet Protocol (SPP) is designed as a self-delimited carrier of a data unit (i.e., a Space Packet) that contains an APID used to identify the data contents, data source, and/or data user within a given enterprise. A

https://public.ccsds.org/Pubs/133x0b2e1.pdf

なのでよさそう.

@meltingrabbit
Copy link
Collaborator Author

On board subnet time について,一時的な措置として,MOBCで上書きするoptionを残してもいいかも.つまり, On board subnet time の値が特定の値(たとえば 0xffffffff)だったら,MOBCで上書きする,てきなルールを決めておくと,一旦はNTPサーバー機能はなくても良くなる.

とはいえ,routerでNetwork層を書き換えてしまうことには留意する.

@meltingrabbit
Copy link
Collaborator Author

secondary headerにISSL FMT的なバージョンIDをu8でいれる?

@meltingrabbit
Copy link
Collaborator Author

tlm 2nd headerの議論はいかに分離

@meltingrabbit
Copy link
Collaborator Author

@meltingrabbit
Copy link
Collaborator Author

残りのTODO

@meltingrabbit
Copy link
Collaborator Author

でやってもらうので,これはclose.

AOBC_MAX_TLM_NUM が 0xff なのは流石に贅沢なので,減らす. は別issueに

@meltingrabbit
Copy link
Collaborator Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant