Armadilloフォーラム

デバイスファイルへの書き込みについて

ki

2019年4月1日 16時42分

お世話になります。木口と申します。

Armadilloをサービスに組み込み、お客様のIoTサービスを構築しております。
システムではEnoceanの組み込みモジュール付きのArmadilloにC言語のプログラムをいれて、
センサデータを待ち受け、ファイルに出力しています。
このシステムの試験データ作成のために
Cプログラムからデバイスファイル(/dev/ttymsc1)にセンサーデータの疑似データを書き込むプログラムを作成したのですが
書き込み途中でプログラムが停止してしまい、また、途中まで書き込まれた値もプログラムの想定とことなります。
これはデバイスファイルの仕様なのでしょうか
それともEnoceanの仕様なのでしょうか。
センサーを利用せずに任意の値をデバイスファイルに書き込み、
常駐するプログラムに読みこませる方法について
ご教示いただけないでしょうか

よろしくお願いいたします

コメント

at_koseki

2019年4月1日 18時11分

古関です。

やりたいことは、対向のEnOceanセンサーが無い状態で、
データ受信した状態と同等の試験ができる環境を構築することでしょうか?

EnOceanモジュールをCON2に接続している場合、
/dev/ttymxc1はEnOceanモジュール用のデバイスファイルですので、
ホスト側から書き込みができるのは、ESP3[※1]の仕様に定義されているパケット形式のデータです。

この時、EnOceanモジュールは、センサーデータを受信した場合、ESP3のフォーマットにしたがって、
/dev/ttymxc1にパケットデータを出力します。

擬似センサーデータを/dev/ttymxc1に書き込んでも、データはエコーバックされず、
ESP3に定義されていないWriteパケットとして、EnOceanモジュールがエラーを返すだけです。

[※1]: EnOcean Serial Protocol 3
https://www.enocean.com/esp

いくつか案を出してみました。

(1) 擬似シリアルデバイスを作る
擬似シリアルデバイスを作って、そちらにセンサーデータ書き込み、
テスト対象のプログラムに入力させる方法です。

以下に似たような事をやっている記事がありましたが、こちらで試していません。
https://qiita.com/uhey22e/items/dc41d7fa1075970e66a1

(2) RS232Cアドオンモジュールを使う
弊社のRS232CアドオンモジュールをTXD/RXDループバックするか、CON1とCON2で2個接続し、
片方からセンサーデータ書き込み、もう片方をテスト対象のプログラムに入力させる方法でしょうか。
https://armadillo.atmark-techno.com/option-products/OP-AGA-RS00-00

どちらの方法を取るにしろ、以下が懸念事項です。
・(擬似)シリアルデバイスはWritterとReaderで多重オープンした際に破綻しないようにする必要がある
・パケットの受信タイミングを真似するのは難しいので
パケットパーサーの試験にはなるが、実動作とはタイミング差がありそう
パケットパーサーの試験をするなら、シリアルからの出力を食わせないでもできそう

よろしくお願いいたします。

at_koseki

2019年4月1日 19時20分

古関です。

https://users.atmark-techno.com/comment/6874#comment-6874
↑で書いた手順はArmadillo-IoT G3 1台で完結するテスト環境です。

EnOceanモジュールを搭載したArmadillo-IoT G3を2つ用意し、
片方をレシーバーに、片方を擬似センサーの動きをさせることはできるかもしれません。
(擬似センサー側はPC + USBドングル EnOceanモジュールでも良いですが)

EnOceanモジュールはデータのSendもできますので、擬似センサーデータを
ESP3のパケット仕様にのっとってブロードキャストでSendすればセンサーがある場合と同様の環境は作れそうです。

ki

2019年4月4日 10時37分

古関様

ありがとうございます

>やりたいことは、対向のEnOceanセンサーが無い状態で、
>データ受信した状態と同等の試験ができる環境を構築することでしょうか?

こちらご認識のとおりです。
いただいたご回答のうち、Armadillo-IoT G3 1台で完結する方法をまずは試してみます。

ありがとうございます。