つじるの忘れんぼ鉄道

DCC自動運転で秋葉原にあった交通博物館のジオラマを目指すブログ

DSair2 アクセサリ/Mapデータのバックアップ

※本内容はDesktopStationさん非公式の内容となりますのでご注意ください※

 

概要

DSair2 で設定したはずのアクセサリやレイアウトMapデータが表示されないよぉ。

とお困りのかたへ。

 

DSair2のデータ保存先

DSair2では、ユーザ側による各種設定の保存先として、以下があります。

  • Flashair のストレージ
  • ローカルストレージ(Webアプリを操作している端末内)

前者は、MP3サウンドファイルやDSbasicのBASファイルが格納されます。Webサーバ側であるFlashair内に保存されるので、どの端末のどのブラウザからアクセスしても、共通のデータを参照することができます。

一方、後者のローカルストレージは、保存操作をした端末のブラウザデータとして保存されます。そのため、異なる端末や、また同じ端末内でも異なるブラウザ(edge、chromeなど)でアクセスすると、設定したものが反映されていない状態となります。

具体的には以下が該当します。

  • キャブタブの車両スロットのアドレス(4つ分)
  • アクセサリータブ内の全設定
  • レイアウトタブ内の全設定
  • コンフィグタブ内の一部設定(Etc内のSpeed値、Protocol選択)
  • DSbasicタブ内で「Save to Memory」を選択して保存したコード

では、これらのデータが具体的にどこに保存されているかというと、ブラウザが実装している「ローカルストレージ」という領域です。HTML5で実装された機能ですね。

このローカルストレージのデータにアクセスするには、各ブラウザ側に実装されている開発ツールを使います。

Windowschromeの場合、「F12」キーを押すと起動します。

f:id:tsujiru:20190630150929p:plain

画面右側に開発ツールが表示されるので、上部メニューで「Application」を選択し、左メニューの「Storage」 ⇒「Local Storage」を選択すると DSair2 の保存データが表示されます。

各項目と値は下表の通りです。

項目名(Key) 値(Value
UNIQUEID 固定値なのでいじらない。
LOCADDR キャブタブ内スロット4つの車両アドレス
ACCTYPEIMAGES アクセサリタブ内のアクセサリイメージ設定データ(ポイント/信号機)
MAPDAT-ACCADDR レイアウトタブ内のアクセサリアドレスの設定データ
MAPDAT-WIDTH レイアウトタブ内のヨコ幅マス目数。※変更すると、登録済みのMAPDAT-ACCADDR、MAPDAT-IMAGE に影響が出るので注意。
MAPDAT-HEIGHT レイアウトタブ内のタテ幅マス目数。※変更すると、登録済みのMAPDAT-ACCADDR、MAPDAT-IMAGE に影響が出るので注意。
MAPDAT-IMAGE レイアウトタブ内のイメージ設定データ(線路レイアウト)
MAXSPEED_LOC コンフィグタブ内で設定するCabタブ内速度メータの最大速度表示設定データ
BASIC_SAVEDVAL Dsbasicタブ内で「Save to Memory」で保存したデータ。


ということで、必要なデータについて、Value値をTXTファイルやExcelシート等にコピペして保存しておけば、別の環境への引越しや、万が一のリストアに役立ちそうです。

なお「ACCTYPEIMAGES」、「MAPDAT-ACCADDR」、「MAPDAT-IMAGE」の3つのデータは、非常にながーいデータなので、最後の1文字まで漏れずにコピペできているか再確認してみてください。

 

Edgeでも同様にF12キーで開発ツールが起動し、下図のように表示/編集できます。

f:id:tsujiru:20190630171744p:plain

 

補足

本記事はDSair2 ファームウェア r2m13 におけるものです。今後のバージョンアップ等で、データ保存の仕様変更等が生じていくと思われます。その場合は、/SD_WLAN/js/ フォルダ内の「storage.js」に、下記のような保存処理が記述されているので参照してみてください。

function STORE_Save_MapDatas()
{
STORE_Save();

localStorage.setItem("MAPDAT-ACCADDR", Map_AccAddr);
localStorage.setItem("MAPDAT-IMAGE", Map_Image);
localStorage.setItem("MAPDAT-WIDTH", Map_Width);
localStorage.setItem("MAPDAT-HEIGHT", Map_Height);
}

 

 おわり

(HO)KATOクモハ12のDCCサウンド化 (3)

今回は、初めて模型のディテールアップというか、これまでやったことの無い、いかにも模型工作的なメモとなります。

ふだんから工作されているかたからすると超初歩的な内容になるかと思います。個人的には、塗装するのもえらい久しぶりで楽しめました。

 

お手本

kumaさんのクモハ12を見て、あー模型工作いいなぁ、と思っていたのがトリガーなので、下記のTogetterを参考にさせてもらいました。

 

屋根の塗装

学生時代のガンプラ、ラジコン以来のスプレー塗装してみました。と言っても、エアブラシはもっていないので、スプレー缶をヨドバシで購入。

KumaさんとJR浜松さんがジャーマングレーで塗装しているとのことなので、自分も真似してやってみる。

 

f:id:tsujiru:20190618011344j:plain

購入したスプレー缶は、タミヤの「ジャーマングレー」と、ボディ用にMrHobbyの光沢トップコート

 

f:id:tsujiru:20190618011352j:plain

ついでに、ジャンパ栓や床下機器系塗装を目的に、タミヤのエナメル塗料を購入。

 

 

●一回目:失敗

f:id:tsujiru:20190618002543j:plain

f:id:tsujiru:20190618002555j:plain

見事に、気泡ができてぷつぷつになっちゃいました。敗因はおそらく2つ。

  • 吹きすぎ
    正直、グレー素地にグレー塗りで、塗れているのかどうかよくわからず、一度に吹きすぎたことがだめだったぽい。
  • 雨の日はだめ
    雨の日などの湿度が高いときはダメだったもよう。

 

いったん薄め液で塗料を流し、いざ2回目。

 

●二回目:いちおう合格 f:id:tsujiru:20190618011208j:plain

なんとかそれっぽくなった!

ただ、ベランダでスプレーしたのが原因なのか、よく見るとホコリのようなものが2か所ほど付着してました。。。

 

ボディへの光沢トップコート

クモハ12実車は見たことが無かったので、ネットで写真を見ると、想像以上に板金仕立てというか、テカテカ反射する塗装でした。そのため、光沢のトップコートを吹いて、似たような状態を目指しました。

f:id:tsujiru:20190618011239j:plain

こちらはトップコートを吹く前。 

 

f:id:tsujiru:20190618011253j:plain

 んでこちらが吹いた後。

撮影環境が違うのでズルい感ありますが、目標に近い感じになりました。

トップコートって、素組みのガンプラにつや消しトップコートを吹く、みたいなイメージしかなかったのだけど、光沢トップコートもステキやんと感じました。

 

KATO純正ディテールアップキット

正直、ジャンパ栓やワイパーくらいは製品本体に標準で付けといてよーって感じですが、別売りになってしまっているのだからしょうがない。

 

f:id:tsujiru:20190618014353j:plain

まずは、手摺り用の穴開け。ピンバイスでの穴あけは楽しい。。。

ヌルヌルぅーってあく感じがたまらん。 

 

f:id:tsujiru:20190618014134j:plain

こちらはKATOのサイトで配布されているPDFをシール紙へ印刷したもの。使ったのは100均のセリアで売っているやつ。

 

f:id:tsujiru:20190618014143j:plain

プリンタ設定で画質「綺麗」みたいのを選択して印刷。

 

f:id:tsujiru:20190618011317j:plain

 サボに貼り付けた状態。けっこう良い感じの解像度で印刷できました。

 

f:id:tsujiru:20190618010351j:plain

ジャンパ栓は管の部分をエナメル黒で塗装。 ただエナメルって、塗料がすごい剥がれやすい。想像以上だった。勉強になった。この写真でも、左側のジャンパ栓の黒が若干剥がれちゃってます。サーフェイサーを下地にしても剥がれちゃいました。何か根本的な過ちを犯しているのだろうか。

また、ワイパーのガラスに接している棒をサーフェイサー(グレー)のみだけど塗装。

 

現状は以上となります。

 

できたらやりたいことは以下の通り。

●空気配管の追加

kumaさんに教えてもらったパーツ。これはつけたい!

弁(?)のとこを赤と白で塗装するとカッコいいの。

しかしこんな小さなパーツでも、写真付きのページがあるimonてすごいな。

 

●内装の整備

現状、デコーダとスピーカがまるまる車内に存在しているので、なにかしらの隠す策を講じたい。

 

おわり

(HO)KATOクモハ12のDCCサウンド化 (2)

ということで、製作記はここから。

 

分解

まずは分解し、どのようにDCCデコーダやスピーカを配置,配線すればよいか見ていきます。

f:id:tsujiru:20190618011552j:plain

ボディの側面、片側3か所ずつがツメで引っ掛けてあるので、ボディを外側に広げながら上方へ引くとボディと台車が外れていきます。

 

f:id:tsujiru:20190618011719j:plain

台車側の床板をもツメで引っかかているので、ツメを押し込みながら外します。上の写真は、床板とその直下にあったウェイトを取り外した状態。

 

f:id:tsujiru:20190618011808j:plain

見ての通り、標準でNEM652ピンがあります。ただ、基盤的にモータへの結線のみで、 ヘッドライト・テールライトはつながっていないので、これにただデコーダを接続しただけでは、大して嬉しくない実装です。

 

f:id:tsujiru:20190618011635j:plain

ボディと屋根もツメで引っかかっているだけなので、ボディ内側からツメを抑えて外していきます。 

 

Exp Board for KATO HOの設置

 当初の方針通り、DesktopStationさんの「Exp Board for KATO HO」を使用します。

基本的な組み込み方については、以下サイトを参照しましょう。

  

f:id:tsujiru:20190618011921j:plain

見ればわかる通り、このExp Boardはクモハ12には長いです。

 

f:id:tsujiru:20190618012004j:plain

ということで、基盤右側の点線箇所で切断。基盤の切断は初めてだったけど、想像以上に固い素材で驚いた。ある程度切込みを入れていけば、ミシっと折ることができます。

 

f:id:tsujiru:20190618012016j:plain

切断後のExp Board。右側が切断したほうです。切断面はヤスリをかけておきましょう。けっこうバリバリな状態になると思うので。

 

f:id:tsujiru:20190618212636j:plain

f:id:tsujiru:20190618012217j:plain

レール側からExp Boardへの給電経路として、銅板を細っちょろく切って、このようにハンダ付け。銅板の下側が、ウェイト兼導電板みたいなやつに接触するようにします。

 

f:id:tsujiru:20190618013537j:plain

Exp Boardをシャーシ上へ設置した状態。銀色の導電板に、取り付けた銅板がちゃんと接しているか確認。 なおNEM652ソケットは、標準状態だと床板パーツからだいぶ奥まった位置となるので、上記のようにピンソケットを取り付けることで、デコーダ側のソケットが挿しやすいようにかさ上げします。

なおこのExp Boardを取り付けるにあたって、標準で搭載されている基盤は撤去しておきます。この標準基盤、直下の導電板と導電性両面テープみたいので接着されていますが、気にせず剥がしちゃいましょう。

 

ヘッドライト・テールライト基盤への接続

Exp Boardとライト基盤間の配線を行う必要があるので、以下サイトを参照しておきましょう。

上記サイトを見てもらえばわかりますが、以下2つがポイントとなります。

  • 基盤パターンのカット 
  • 前後の基盤で配線が異なる

 

f:id:tsujiru:20190618012425j:plain

ライト基盤側にも、T(Tail)、H(Head)、C(Common)  と頭文字が印字されているので、前記サイトを参照したうえで結線する。この写真の場合、黄色い線が右側の「TAIL」から出ていますが、ライト基盤側では「H」につながっています。なおこちらは、各パーツにある矢印(→)のおしり側です。

 

f:id:tsujiru:20190618012853j:plain

逆側のライト基盤(写真右側、→の先側)は、「TAIL」が「T」へ、「HEAD」が「H」へつながってます。

青い線(Common)は、両側とも「COM」から「C」への接続でOKです。

 

f:id:tsujiru:20190618012443j:plain

 シャーシへ乗せた状態。見た通り、ExpBoard側のハンダ付けは、裏側の端子にしています。ライト基盤側のハンダが裏側であること、またExp Boardの上側ハンダとすると、床板パーツがハマらなくなるリスクが考えられたため。

スピーカ・デコーダ搭載位置

f:id:tsujiru:20190618012305j:plain

これが最も悩ましかった。Kumaさん、JR浜松さんの作例では、デコーダがLokSound micro、スピーカはキューブ型へ変更していて、モータの隣に埋め込むようにしています。私が用意したのは LokSound(非micro)+標準スピーカと少々大きいサイズのため、割り切って写真の位置に配置することとしました。床板パーツにボールペンで軽くマーキングしておきます。特に、スピーカのほうは穴をあけて埋め込むため。

 

f:id:tsujiru:20190618012323j:plain

ピンバイスで回りを開けていき。。。

 

f:id:tsujiru:20190618012341j:plain

リューター、ヤスリと色々使ってポッカリ穴を開けた状態。

 

f:id:tsujiru:20190618012608j:plain

加工後の仮設置。

 

f:id:tsujiru:20190618012708j:plain

スピーカは裏から見るとこんな感じ。

スピーカの邪魔とならないよう、こちら側のライト基盤への配線はこのようにしています。

 

室内灯の設置と接続

 ボディ側のディテールアップ作業等で外すことが多くなる見込みだったため、シャーシとボディを切り離せるような室内灯への接続を目指しました。

ちなみに利用した電子パーツは以下の通り。

テープLED:両端子 5M 12V 非防水 1チップ 薄型 LEDテープライト (電球色/白ベース)※Amazon

CRD:E-103(10mA)

結果としては少々明る過ぎると感じたので、もう1段低めのCRDにすればよかった。

 

f:id:tsujiru:20190618012932j:plain

 KATOの標準室内灯は、ボディ真ん中の内側側面を通電経路とする作りのようなので、それを真似てみた。銅板を細く切って、それを曲げて曲げて曲げてこんな形に。

 

f:id:tsujiru:20190618013014j:plain

テープLEDなので、天井にそのまま貼り付け。貼り付ける前に、銅板位置などを調整しましょう。

 

f:id:tsujiru:20190618013051j:plain

床板側は、ボディ側の銅板に接触するよう、このような銅板を接着。

 

f:id:tsujiru:20190618013101j:plain

なお、室内灯の制御は、NEM652の3番ピン経由で、Exp Boardの「AUX」から行います。LokSound的には、「AUX1」というファンクション出力です。

なおこの端子の極性ですが、「AUX(1)」がマイナス、「COM」がプラスとなるので、LED/CRDと接続する際にはお気を付けください。

 

f:id:tsujiru:20190618013112j:plain

 シャーシと床板を組み込んだ状態。

 

f:id:tsujiru:20190618013930j:plain

 ちなみに各所で使っている銅板はこれ。imon、ヨドバシなどの模型売り場や、ロフトとかでも売ってます。

 

オープンサウンドデータの書き込み

 ここまでできたら、LokSoundを接続してコマンドステーションと通信ができる状態となってます。というということで、DesktopStationさんサイトからオープンサウンドデータ「第二弾・旧型国電タイプ(吊り掛け)サウンドデータ」をダウンロードさせて頂きましょう!

なお今更ですが、データをLokSoundへ書き込むには、LokProgrammerという機器が必要になります。

 

f:id:tsujiru:20190618013716j:plain

写真右下の機器がLokProgrammerです。WindowsパソコンでUSB接続し、「LokProgrammer」という機器と同じ名称のデータ作成/書き込みソフトから書き込み処理を行います。LokSound v4の場合は、約30分かかります。v5だと数分らしい。

入手先や書き込み手順については、上記サイト内にありますのでご参照ください。

 

f:id:tsujiru:20190618013727j:plain

ちなみに私が書き込む際、 書き込み中に上記エラーとなりました。原因は、USB延長ケーブルの不良でした。。。

 

動作確認

 データ書き込み後、実際に動かして動作確認します。その時の動画がこちら。


(HO)KATOクモハ12のDCCサウンド化のデコーダ動作確認

 

 

以上で電装系の作業は完了です。

次回(3)はディテールアップ的な製作記となります。

 

つづく

(HO)KATOクモハ12のDCCサウンド化 (1)

 f:id:tsujiru:20190618010351j:plain

久しぶりの車両調達

ほぼ3年ぶりの車両として、KATOのHOクモハ12052を購入!

なぜこの車両を購入したかといえば、DesktopStationさんのオープンサウンドデータ第2弾「旧型国電タイプ」を搭載したかったから。この吊り掛け音、幼少時から乗っていた東武野田線の音にすごい似てて。。。(1年ほどまで、吊り掛けという言葉すら知らなったけど。)

 

オープンサウンドデータって?

オープンサウンドデータは、DCCを推進されているDesktopStationさんの施策のひとつで、素晴らしい音と挙動をオープンに頒布してくれているものです。

詳細は下記サイトをご参照ください。

この記事が、私と同じように「これいいな。。。」と思わせ、「これ欲しい。。。作りたい」と思ったかたの一助となれば幸いです。

私は数年前まで、模型工作や電子工作はやったことのない人間です。それでも、それなりに楽しめていますので、ぜひチャレンジして頂きたいです。そして、それを周囲の人たちに広めていって頂けたら嬉しいですね。

 

DCCサウンド化の方針

製作にあたり、事前に決めていた方針は次の通り。

  • オープンサウンドデータ第二弾「旧型国電タイプ」を導入する
  • DCCデコーダは、オープンサウンドデータが対応するESU社のLokSound を搭載する。(今回はLokSound v4.0 NEM652ピン版を使用)
  • 室内灯を設け、LokSound のAUX1へ接続する
  • DesktopStationさんの「Exp Board for KATO HO」を使用する

  • ディテールアップ的なものを意識してみる

 

 結果

ということで、まずは出来上がりの動画となります。


(HO)KATOクモハ12のDCCサウンド化

 

製作記は次回記事にて。

 

つづく

DSbasic 入門してみる(7)スイッチバック往復(機関車2両)

 

f:id:tsujiru:20180828231247j:plain

上の写真の通り、敷設した線路全体としては、スイッチバックをイメージした線路となっています。

以前に、DesktopStationソフトウェアのイベント処理では、1両をスイッチバックで自動往復させているので、今回は機関車2両を順番にスイッチバック往復させていきたいと思います。

前回の入門してみる(6)のコードをもとに作りましたが、大きな変更点は以下の通り。

  • スイッチバック往復の上り/下り方向を管理する変数「DEST」を追加。
    上り方向を1、下り方向を2 とした。

上記以外は、検知区間ごとにほぼこれまでのコピペで、DESTの値によってポイントの分岐/直進を制御する処理の追加程度です。

 コードは以下の通り。

screen(7)
s88start

print "START S88 Control -Shuttle switchback + 2xLoco-"
sleep 5000
pwr 1
acc 30,1
acc 31,1
acc 40,1
acc 41,1
sleep 5000

'動かす2両のアドレスをSlot0と1に設定する
SLOT0 = getslotaddr(0)
SLOT1 = getslotaddr(1)
print "SLOT 0 = " + SLOT0
print "SLOT 1 = " + SLOT1

'前提:2両の初期位置は、SLOT0を検知区間①、SLOT1を検知区間②にすること。
'S0Pos:SLOT0のPosition(在線する区間)を格納していく変数
S0Pos = 2
S1Pos = 1

'先発をSlot0に設定
NextLoco = 0

'スイッチバック往復時の上り(1)/下り(2)を管理
DEST = 1

'SLOT0を起動(ESU BR151)
print "BR151 booting..."
dir SLOT0,2
fnc SLOT0,0,1
sleep 5000
fnc SLOT0,1,1
sleep 2000
fnc SLOT0,3,1
sleep 2000
fnc SLOT0,4,1
sleep 2000
fnc SLOT0,9,1
sleep 2000
fnx SLOT0,2
print "BR151 boot completed"
sleep 2000
'SLOT0を発進(ESU BR151)
spd SLOT0,200

sleep 10000

'SLOT1を起動(NGC DD51)
print "DD51 booting..."
dir SLOT1,2
fnc SLOT1,0,1
fnc SLOT1,1,1
print "DD51 boot completed"
sleep 2000
fnx SLOT1,2


while 1


if s88get(2)=1 then
if S0Pos = 2 then
else
print "S88.2 Detected"
S0Pos = 2
sleep 500
'SLO0を停止
spd SLOT0,0
sleep 10000
'ポイントを分岐
acc 31,0
'SLOT1を発進
NextLoco = 1
DEST = 1
dir SLOT1,2
sleep 2000
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if


if s88get(1)=1 then
if S1Pos = 1 then
else
print "S88.1 Detected"
S1Pos = 1
sleep 1000
'SLO1を停止
spd SLOT1,0
sleep 10000
'ポイントを直進
acc 31,1
'SLOT0を発進
NextLoco = 0
DEST = 1
dir SLOT0,2
sleep 2000
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if


if s88get(3)=1 then
'検知区間③に進入した車両がSLOT0の場合
if NextLoco = 0 then
if S0Pos = 3 then
else
print "S88.3 Detected as SLOT0"
S0Pos = 3
spd SLOT0,0
sleep 10000
dir SLOT0,1
sleep 2000
'上り/下りの判定
if DEST = 1 then
acc 41,0
end if
if DEST = 2 then
acc 41,1
end if
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if
'検知区間③に進入した車両がSLOT1の場合
if NextLoco = 1 then
if S1Pos = 3 then
else
print "S88.3 Detected as SLOT1"
S1Pos = 3
spd SLOT1,0
sleep 10000
dir SLOT1,1
sleep 2000
'上り/下りの判定
if DEST = 1 then
acc 41,0
end if
if DEST = 2 then
acc 41,1
end if
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if
end if

if s88get(5)=1 then
'検知区間⑤に進入した車両がSLOT0の場合
if NextLoco = 0 then
if S0Pos = 5 then
else
print "S88.5 Detected as SLOT0"
S0Pos = 5
spd SLOT0,0
sleep 10000
dir SLOT0,2
sleep 2000
'上り/下りの判定
if DEST = 1 then
acc 40,0
end if
if DEST = 2 then
acc 40,1
end if
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if
'検知区間⑤に進入した車両がSLOT1の場合
if NextLoco = 1 then
if S1Pos = 5 then
else
print "S88.5 Detected as SLOT1"
S1Pos = 5
spd SLOT1,0
sleep 10000
dir SLOT1,2
sleep 2000
'上り/下りの判定
if DEST = 1 then
acc 40,0
end if
if DEST = 2 then
acc 40,1
end if
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if
end if

if s88get(6)=1 then
'検知区間⑥に進入した車両がSLOT0の場合
if NextLoco = 0 then
if S0Pos = 6 then
else
print "S88.6 Detected as SLOT0"
S0Pos = 6
spd SLOT0,0
sleep 10000
dir SLOT0,1
sleep 2000
'上り/下りの判定
if DEST = 1 then
acc 30,0
end if
if DEST = 2 then
acc 30,1
end if
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if
'検知区間⑥に進入した車両がSLOT1の場合
if NextLoco = 1 then
if S1Pos = 6 then
else
print "S88.6 Detected as SLOT1"
S1Pos = 6
spd SLOT1,0
sleep 10000
dir SLOT1,1
sleep 2000
'上り/下りの判定
if DEST = 1 then
acc 30,0
end if
if DEST = 2 then
acc 30,1
end if
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if
end if

if s88get(7)=1 then
'検知区間⑦に進入した車両がSLOT0の場合
if NextLoco = 0 then
if S0Pos = 7 then
else
print "S88.7 Detected as SLOT0"
S0Pos = 7
spd SLOT0,0
sleep 10000
dir SLOT0,2
sleep 2000
'下りに切り替え
DEST = 2
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if
'検知区間⑦に進入した車両がSLOT1の場合
if NextLoco = 1 then
if S1Pos = 7 then
else
print "S88.7 Detected as SLOT1"
S1Pos = 7
spd SLOT1,0
sleep 10000
dir SLOT1,2
sleep 2000
'下りに切り替え
DEST = 2
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if
end if


wend

end

BASファイルはここです。 

 

で、実際に動かした動画はこちら。

youtu.be

  

今後

手持ちの線路、機器でやりたいことはいったんできた。

次は、複数の車両を同時に動かす自動運転したいな~

ということで、レイアウトをちょっと変更し、待避線を追加したい。

 あと、動かしたい内容でコードを書きつづけるのも、今後の拡張性を考えると限界が見えてきたので、進行方向の閉塞状況をチェックしながら車両が勝手に動き続けるようなロジックを追加していきたい。うむ、ハードル高い。。。

 

つづく

 

DSair2 Flashairの無線LAN接続について

以前にやーさんも記事にされていましたが、Flashairの無線LAN接続にはいくつかの選択肢があります。主に以下3つのモードです。

  • 親機モード(APモード:アクセスポイントモード)
    Flashair自身が無線LANの親機となって、無線アクセスポイントとして動作する。
    Flashairのデフォルト動作はこれ。
  • 子機モード(STAモード:ステーションモード)
    既設の無線アクセスポイントへ子機として接続して動作する。
  • インターネット同時接続モード(APモードとSTAモードを同時に提供)
    同時に機能することで、Flashair自身やFlashairの子機となったデバイスに対して、上位側のネットワーク経由でのインターネット接続ができるように動作する。つまりルータ的にふるまってくれる。

詳細は、以下のメーカーサイトの説明を参照ください。


けつろん

上記をみると、同時接続モードが一番便利そうじゃないですかー。ということで、いろいろいじってみましたが、私の家庭内LAN環境を前提とした結論は、おとなしくデフォルトの「親機モード」を利用する、でした。

 

インターネット同時接続モードの感想

そもそも、デフォルトの親機モードの何が嫌だったのかというと、子機となったスマホやPCがインターネット接続できなくなっちゃうこと。今時、自分がメインで利用しているデバイスがインターネット接続できない状態になるなんて考えられない。

ということで、まずはこの同時接続モード(APPMODE=6)を試したけれど、子機から親機(Flashair)への通信や、子機からインターネットへの通信が使い物にならないレベルで遅くなる事象が発生し、解決もできなかったので諦めました。具体的には、子機からDSair2の画面をブラウザで表示するのに数分かかる、またpingを打つと、遅延がひど過ぎて数秒を要するもしくはタイムアウトする。

子機モードの感想

同時接続モードの次に子機モードを試した。同時接続モードで発生していたネットワーク遅延周りの事象は改善され、それなりに便利に使えてた。

ただ、Bonjourによるホスト名アクセス(http://flashair)が、Win10 PCからだと正常にアクセスできるのに、スマホ(Android7/8)からだと名前解決ができずアクセスできない。IPアドレスを指定してアクセスするとOKなのだが、我が家の無線APルータ Aterm との相性なのかは分からないけど、なぜかそのような状態となってしまった。

 また、DSair2と無線APが別の部屋となるため、Flashairの無線LAN接続そのものが、不安定なのも気になった。ときどーーき、途中で車両操作できなくなることがあったので解消したかった。

親機モードの感想

ということで、結局デフォルトの親機モードに戻ってきた。

私はDSbasicのコード書きなどをメインPCから行いたいため、有線LAN接続のみであったPCにUSB接続の小さい無線LANアダプタをつけ、Flashairとの通信のみ無線LANを利用するようにした。これで、通常のインターネット通信等は有線LANで行い、Flashair(というかDSair2)との通信(=192.168.0.0/24セグメントとの通信)のみ無線LANで行われる環境となった。

なおこのような使い方の場合、既設の家庭内LANのネットワークアドレスが「192.168.0.0/24」ではないことが前提となる。というのも、親機モード時のFlashairのネットワークアドレスは「192.168.0.0/24」から変更できないため。子機モードならFlashairのIPアドレス等は変更できるんだけど、親機モードだと変更できなかった。

親機モードだと、DSair2に接続したスマホはインターネット接続できなくなってしまうけれど、基本的にはPCでの操作がメインとなるのだし諦めました。

 

ということで、何を言いたい記事だったのかよく分からなくなってしまったけど、備忘録ということで。。。

 

おまけ

参考までに、各モードでのFlashairのCONFIGファイル。

親機モード

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.JPG
APPMODE=4
APPNAME=flashair
APPSSID=flashair-tsujiru
APPNETWORKKEY=12345678
VERSION=F15DBW3BW4.00.02
CID=02544d535733324755e3546c7a012101
PRODUCT=FlashAir
VENDOR=TOSHIBA
APPAUTOTIME=3000000
MASTERCODE=b072bff3e12b
LOCK=1
WEBDAV=2
UPLOAD=1
DHCP_Enabled=YES
Preferred_DNS_Server=192.168.10.1
Preferred_DNS_Server=192.168.10.1
Alternate_DNS_Server=192.168.10.1

 

子機モード

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.JPG
APPMODE=5
APPNAME=flashair
APPSSID=自分ちの無線APのSSID
APPNETWORKKEY=上記SSID接続用のキー
VERSION=F15DBW3BW4.00.02
CID=02544d535733324755e3546c7a012101
PRODUCT=FlashAir
VENDOR=TOSHIBA
APPAUTOTIME=3000000
MASTERCODE=b072bff3e12b
LOCK=1
WEBDAV=2
UPLOAD=1
DHCP_Enabled=NO   ※ここから3行はFlashairに固定IPを振りたい場合
IP_Address=192.168.10.110
Subnet_Mask=255.255.255.0
Preferred_DNS_Server=192.168.10.1
Preferred_DNS_Server=192.168.10.1
Alternate_DNS_Server=192.168.10.1

 

同時接続モード

[Vendor]

CIPATH=/DCIM/100__TSB/FA000001.JPG
APPMODE=6
APPNAME=flashair
APPSSID=flashair_tsujiru
APPNETWORKKEY=********
VERSION=F15DBW3BW4.00.02
CID=02544d535733324755e3546c7a012101
PRODUCT=FlashAir
VENDOR=TOSHIBA
APPAUTOTIME=3000000
MASTERCODE=b072bff3e12b
LOCK=1
WEBDAV=2
UPLOAD=1
BRGSSID=自分ちの無線APのSSID
BRGNETWORKKEY=上記SSID接続用のキー
DHCP_Enabled=NO  ※ここから3行はFlashairに固定IPを振りたい場合
IP_Address=192.168.10.110
Subnet_Mask=255.255.255.0
Preferred_DNS_Server=192.168.10.1
Preferred_DNS_Server=192.168.10.1
Alternate_DNS_Server=192.168.10.1

  

おわり

DSbasic 入門してみる(6)往復運転 + 機関車2両

前回の往復運転コードをベースに、機関車2両を互いに発進させるコードを作ります。

と、気軽に始めたはいいものの、いざコードを作り始めると、考えなければいけないことが多く、いきなり難易度が上がったような気がしてきた。。。

忘れないように流れを図にまとめてみました。

 

f:id:tsujiru:20190502004818p:plain

f:id:tsujiru:20190502004833p:plain

f:id:tsujiru:20190502004850p:plain

f:id:tsujiru:20190502004905p:plain

f:id:tsujiru:20190502004920p:plain

 

2台の機関車を行ったり来たりさせたいだけなのに、結構大変。。。

ちなみにここでは、Slot0(アドレス4) と Slot1(アドレス51)の2つの車両を動かす前提でコードを書いています。(下図の4と51)

f:id:tsujiru:20190502013409p:plain

 

コードは下記のとおりです。

※ブログに貼り付けるとタブインデントが消えちゃって可読性悪いですね。。。

GoogleDriveにアップしましたので、DSbasic - Google ドライブ からダウンロードしてください。(今回のコードは[006_s88-shuttle_2xloco_20190501.BAS]というファイルです)

screen(7)
s88start

print "START S88 Control -Shuttle + 2xLoco-"
sleep 5000
pwr 1
acc 31,1
acc 41,1
sleep 5000

'動かす2両のアドレスをSlot0と1に設定する
SLOT0 = getslotaddr(0)
SLOT1 = getslotaddr(1)
print "SLOT 0 = " + SLOT0
print "SLOT 1 = " + SLOT1

'前提:2両の初期位置は、検知区間①、②にすること。
S0Pos = 2
S1Pos = 1
'先発をSlot0に設定
NextLoco = 0

'SLOT0を起動(ESU BR151)
print "BR151 booting..."
dir SLOT0,2
fnc SLOT0,0,1
sleep 5000
fnc SLOT0,1,1
sleep 2000
fnc SLOT0,3,1
sleep 2000
fnc SLOT0,4,1
sleep 2000
fnc SLOT0,9,1
sleep 2000
fnx SLOT0,2
print "BR151 boot completed"
sleep 2000
spd SLOT0,200

sleep 10000

'SLOT1を起動(NGC DD51)
print "DD51 booting..."
dir SLOT1,2
fnc SLOT1,0,1
fnc SLOT1,1,1
print "DD51 boot completed"
sleep 2000
fnx SLOT1,2


while 1


if s88get(2)=1 then
if S0Pos = 2 then
else
print "S88.2 Detected"
S0Pos = 2
sleep 500
'SLO0を停止
spd SLOT0,0
sleep 10000
'ポイントを分岐
acc 31,0
'SLOT1を発進
NextLoco = 1
dir SLOT1,2
sleep 2000
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if


if s88get(1)=1 then
if S1Pos = 1 then
else
print "S88.1 Detected"
S1Pos = 1
sleep 1000
'SLO1を停止
spd SLOT1,0
sleep 10000
'ポイントを直進
acc 31,1
'SLOT0を発進
NextLoco = 0
dir SLOT0,2
sleep 2000
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if


if s88get(3)=1 then

'検知区間③に進入した車両がSLOT0の場合
if NextLoco = 0 then
if S0Pos = 3 then
else
print "S88.3 Detected as SLOT0"
S0Pos = 3
spd SLOT0,0
sleep 10000
dir SLOT0,1
sleep 2000
fnx SLOT0,2
sleep 2000
spd SLOT0,200
end if
end if

'検知区間③に進入した車両がSLOT1の場合
if NextLoco = 1 then
if S1Pos = 3 then
else
print "S88.3 Detected as SLOT1"
S1Pos = 3
spd SLOT1,0
sleep 10000
dir SLOT1,1
sleep 2000
fnx SLOT1,2
sleep 2000
spd SLOT1,200
end if
end if

end if

wend

end

キモは、流れ図内にも吹き出しで記載していますが、「NextLoco」値による、命令対象となる機関車の判断ロジックかと思います。(上記の赤文字箇所)

たった2両でこれなので、これ以上増やす場合は、配列とか定義していかないと厳しいのかもしれません。私はプログラマーではないので、そういったコーディングがどこまで可能なのか心配。。。

 

 実行すると、こんな感じでメッセージ出力します。

f:id:tsujiru:20190502012452p:plain

  

実際に動かした動画はこちら。


DSbasic 機関車2両による自動往復運転

 

次は、これをスイッチバック全体で往復させる自動運転かな~

 

つづく