EDGEPLANT CAN-USB I/Fからデータを取得する

付属デバイスコネクターdevice-connector-intdashを使用してEDGEPLANT CAN-USB InterfaceからCANデータを取得し、リアルタイム送信するための設定例です。

../../_images/can-usb-upstream-sample.svg

図 32 EDGEPLANT CAN-USB Interfaceからのデータを送信するための設定例

アップストリームの設定

以下のコマンドを実行して、 recoverable というIDを持つアップストリームを作成します。 指定しているのはIDのみのため、他の設定値はデフォルトのとおりになります。

$ intdash-agentctl config up --create '
    id: recoverable
  '

デバイスコネクターIPCの設定

デバイスコネクターからのデータを受け取るためにデバイスコネクターIPCを追加します。以下のコマンドを実行してください。

$ intdash-agentctl config device-connector up --create '
    id: up-can
    data_name_prefix: can/
    dest_ids:
      - recoverable
    format: iscp-v2-compat
    ipc:
      type: fifo
      path: /var/run/intdash/up-can.fifo
    launch:
      cmd: device-connector-intdash
      args:
      - --config
      - /etc/dc_conf/apt_cantrx-up.yml
      environment:
      - DC_APT_CANTRX_SRC_CONF_PATH=/dev/apt-usb/by-id/usb-xxx
      - DC_APT_CANTRX_SRC_CONF_LISTENONLY=1
      - DC_APT_CANTRX_SRC_CONF_BAUDRATE=500
      - DC_APT_CANTRX_SRC_CONF_TIMESTAMP_MODE=device
      - DC_PRINT_LOG_FILTER_CONF_TAG=up-can
      - DC_FILE_SINK_CONF_PATH=/var/run/intdash/up-can.fifo
'
  • launch で、device-connector-intdashを起動するように設定しています。

  • device-connector-intdashを実行するための設定は、パイプライン設定ファイル /etc/dc_conf/apt_cantrx-up.yml として与えています(このファイルは次の手順で作成します)。 また、パイプライン設定ファイルで使用するための環境変数を与えています( environment ) 。

  • device-connector-intdashから /var/run/intdash/up-can.fifo を介して得られたデータは、 can というデータ名称プレフィックスを与えられて、 recoverable というIDを持つアップストリームに送信されます。

device-connector-intdashのパイプライン設定

device-connector-intdash用のパイプライン設定ファイルを以下の内容で作成し、 /etc/dc_conf/apt_cantrx-up.yml として保存します。

before_task:
  # sync timestamp
  - mkdir -p /var/lock/intdash
  - |
    BASETIME_CLOCK_ID=$DC_CLOCK_ID
    meas-hook --lockfile /var/lock/intdash/dc_apt_usbtrx.lock --command "
      if command -v apt_usbtrx_timesync.sh     > /dev/null 2>&1 ; then apt_usbtrx_timesync.sh;     exit 0; fi;
      if command -v apt_usbtrx_timesync_all.sh > /dev/null 2>&1 ; then apt_usbtrx_timesync_all.sh; exit 0; fi;
      echo \"ERROR: timestamp script not found\";
      exit 1;
    "

after_task:
  - rm -f /var/lock/intdash/dc_apt_usbtrx.lock

tasks:
  - id: 1
    element: apt-cantrx-src
    conf:
      clock_id: CLOCK_MONOTONIC
      path: $(DC_APT_CANTRX_SRC_CONF_PATH)
      listenonly: $(DC_APT_CANTRX_SRC_CONF_LISTENONLY)
      baudrate: $(DC_APT_CANTRX_SRC_CONF_BAUDRATE)
      timestamp_mode: $(DC_APT_CANTRX_SRC_CONF_TIMESTAMP_MODE)

  - id: 2
    element: print-log-filter
    from: [[1]]
    conf:
      interval_ms: 10000
      tag: $(DC_PRINT_LOG_FILTER_CONF_TAG)
      output: stderr

  - id: 3
    element: file-sink
    from: [[2]]
    conf:
      flush_size: 10
      path: $(DC_FILE_SINK_CONF_PATH)
  • before_task では、EDGEPLANT CAN-USB Interfaceの同期処理の初期化を行っています。複数のdevice-connector-intdashを使用する場合に対応するためにプロセス間排他を用いています。 aftre_script でその後片付けをしています。 ( before_task では、定義されたタスクが開始される前に実行されるコマンドを、 after_task では、タスク終了後に実行されるコマンドを指定します。)

  • apt-cantrx-srcエレメントでは、環境変数として与えられた値を使ってEDGEPLANT CAN-USB Interfaceからデータを取得します。(参考: apt-analogtrx-src

  • print-log-filterでは標準エラー出力にログを出力します。(参考: print-log-filter

  • file-sinkでは、$(DC_FILE_SINK_CONF_PATH)にFIFO用データフォーマットのデータが書き出されます。これをintdash Edge Agent 2が読み取ります。(参考: file-sink

ストリーマーの起動

以上の設定ができたらストリーマーを起動します。

$ intdash-agentctl run