TWELITE マルチデバイス構成
TWELITE-DIPを2個追加した。
それぞれ2号機(Device ID=2)と3号機(Device ID=3)として、既に構成済みのDIP(以後、これを1号機と呼ぶ)に設定したApplication ID =20210108とともにDevice IDをTWELITE R2で書き込む。
2号機(左)と3号機(右)には電源ON表示用の白色LEDに加えて、DO1に緑LEDを配線してある。1号機とともに電源を入れてMONO STICKのシリアルポートを読みだしてみるとDevice ID=1、2、3それぞれから信号が飛んできているのがわかった。
Device IDを指定してDO1設定を行ってみる。上の状態は2号機のDO1をLow(緑LED点灯)にして3号機のDO1をHigh(LED消灯)にした状態。選択的に制御が出来ているようだ。
暫く(と言っても1分未満)受信しているとエラーが発生していた。受信プログラムをデータ長さ固定(49文字分)で書いていたらListのOut of Rangeが発生した。つまり、シリアルポートから取得したデータ長が49文字未満だったわけだ。正常受信した場合、文字列は:で始まる。以下が正常受信したときの出力表示結果。
:02811501A2810CD4DD001D19000C141A8000FFFFFFFFFF9C
length 49
一方Out of Rangeが発生した場合(以下)は見た感じ頭の数バイトが無くなっているようだ。
3D65000AE81880002CFFFFFFFE7E
length 28
まだ仮説にすぎないけれど、これはデバイスが増えたことで混信が発生して、その結果受信データが壊れるんじゃないだろうか。そもそも、個々のデバイスは全く独立して動作していて(時計同期はしていない)、個々のデバイスの都合で送信しているはずだ。つまり送りっぱなし。仮に混信が発生してもそれを知る術はないはず。となれば、受信側で受信データの有効性を確認して、有効でないと判断すれば、そのデータを捨てる必要がある。
複数デバイスからの受信内容をテーブルで表示するプログラムを書いてみた。受信したDevice IDごとにソートして、定期的な受信の度に更新する。
まぁ、データ通信の基本を書いているような気がするけれども、今更のように気が付いたりしているわけだ。もうちょっと先人の知恵を学んでから悩んだ方が良いみたい。
« ロジアナ LA1010 | トップページ | TWELITE 中継機 »
「TWELITE日記」カテゴリの記事
- TKinter afterメソッド:再帰的コールによる自動更新(2021.02.26)
- RaspiとTWELITEの会話の手助け(2021.02.17)
- なかなか会話できないRaspiとTwelite(2021.02.16)
- TWELITE 中継機(2021.01.17)
- TWELITE マルチデバイス構成(2021.01.16)
コメント