パソコンで鉄道模型を制御するための基礎検討(10)
PC上のGUIプログラム開発概要
PC側で動かす「Nゲージ制御盤」関連のプログラムについて順次追記する予定です。
やりたいことは図のような制御盤をPC画面上でデザインし、マウスによるNゲージレイアウトのマニュアル操作や自動運転ができるようにする事です。
なお掲載前に基本的な動作テストはしていますが、いろいろな環境や大規模ハード構成でのテストは未実施です。
また現在 鉄道模型マニア(susukuma鉄道模型チャンネル)からの要望やフィードバックは無しで試作してます。
さらに私はハード屋でソフトウェア開発は専門ではなく、きれいなコードではないかもしれません。
という状況ではありますがご参考としてプログラムを公開します。
やりたいことは図のような制御盤をPC画面上でデザインし、マウスによるNゲージレイアウトのマニュアル操作や自動運転ができるようにする事です。
なお掲載前に基本的な動作テストはしていますが、いろいろな環境や大規模ハード構成でのテストは未実施です。
また現在 鉄道模型マニア(susukuma鉄道模型チャンネル)からの要望やフィードバックは無しで試作してます。
さらに私はハード屋でソフトウェア開発は専門ではなく、きれいなコードではないかもしれません。
という状況ではありますがご参考としてプログラムを公開します。
プログラムは以下の機能別に分けて作ることにしました。
1.制御盤エディタ
GUIで制御盤のデザインをする。
2.ハードウェア情報自動抽出シリアルネットワークに接続されたハードウエアの種類や接続順を制御盤エディタが入力できるフォーマットで出力する。
3.制御盤GUIによるハードウエア操作制御盤にPCと接続された信号機やポイント、コントローラー(パワーパック相当)の状態を表示し、マウスで操作する。
4.自動運転機構自動運転プログラムを読み込んで実行する。
プログラム言語と実行環境
プログラム言語はPython (version:3.*.*) です。
後述のプログラムを実行するにはpythonのインストールが必要です。
インストール方法やpythonの詳細はネット上の情報や解説本が豊富にありますのでそちらを参照してください。
pythonをインストール後にGUI用にpygame、USB-Serial I/Fを使う場合はpyserial、bluetooth無線接続を使う場合はbleakの各モジュールを追加インストールする必要があります。
コマンドウインドウを開き、以下のコマンドで追加できます。
以降で紹介するプログラムを実行するにはプログラムや必要データを置いたフォルダに移動します。
windows10やwindows11ではフォルダ(エクスプローラー)の上部アドレスバーにcmdと打つか フォルダ内で(何も選択されていない状態で)shift+右クリックして「PowerShellウィンドウをここに開く」をクリックすることで そのフォルダをカレントディレクトリとしたコマンドウインドウを簡単に開くことができます。
そのコマンドウインドウまたはPowershell内で
windowsなら上記の起動コマンドを *.bat ファイルに記述しておけば batファイルをマウスクリックして起動することもできます。
なお、pythonプログラム(*.py)と制御盤のデータ(*.txt)はいずれもテキストファイルですが、日本字のコードはUTF-8になっています。
中身を見たり編集するとき日本字が文字化けしたら、UTF-8が扱えるテキストエディタ(windows10/11のメモ帳など)を使うか、テキストファイルを環境に合ったコードに変換してください。
なおテキストファイルのコードをUTF-8以外に変換した場合はpythonプログラムの先頭行の
# -*- coding: utf-8 -*-
の日本文字コード宣言も変更する必要があります。
後述のプログラムを実行するにはpythonのインストールが必要です。
インストール方法やpythonの詳細はネット上の情報や解説本が豊富にありますのでそちらを参照してください。
pythonをインストール後にGUI用にpygame、USB-Serial I/Fを使う場合はpyserial、bluetooth無線接続を使う場合はbleakの各モジュールを追加インストールする必要があります。
コマンドウインドウを開き、以下のコマンドで追加できます。
pip install pygame
pip install pyserial
pip install bleak
pip install pyserial
pip install bleak
以降で紹介するプログラムを実行するにはプログラムや必要データを置いたフォルダに移動します。
windows10やwindows11ではフォルダ(エクスプローラー)の上部アドレスバーにcmdと打つか フォルダ内で(何も選択されていない状態で)shift+右クリックして「PowerShellウィンドウをここに開く」をクリックすることで そのフォルダをカレントディレクトリとしたコマンドウインドウを簡単に開くことができます。
そのコマンドウインドウまたはPowershell内で
Python プログラム名.py (・・・)
とタイプすればプログラムを実行できます。windowsなら上記の起動コマンドを *.bat ファイルに記述しておけば batファイルをマウスクリックして起動することもできます。
なお、pythonプログラム(*.py)と制御盤のデータ(*.txt)はいずれもテキストファイルですが、日本字のコードはUTF-8になっています。
中身を見たり編集するとき日本字が文字化けしたら、UTF-8が扱えるテキストエディタ(windows10/11のメモ帳など)を使うか、テキストファイルを環境に合ったコードに変換してください。
なおテキストファイルのコードをUTF-8以外に変換した場合はpythonプログラムの先頭行の
# -*- coding: utf-8 -*-
の日本文字コード宣言も変更する必要があります。
制御盤エディタ ikcpedit.py
制御盤をデザインするためのGUIエディタです。
制御盤エディタプログラムikcpedit.pyや制御盤のサンプルデータ、飾りで入れてる山や木の画像データ、
さらにおまけで文字フォントの検索スクリプトもまとめてzip圧縮したものを添付します。
上記ファイルを右クリックして「名前を付けてリンク先を保存」でダウンロードし、展開してください。
ikcpedit.pyの起動はコマンドウインド内で
python ikcpedit.py 制御盤データファイル名.txt ・・・
で行ないます。制御盤データは複数ファイル指定可能です。
添付したサンプルデータで起動するには
python ikcpedit.py sample_panel1.txt
またはフォルダ内のバッチファイル sample_panel1_ikcpedit.bat をダブルクリックしてください。
なお、制御盤データの指定を省略するとcontrol_panel_数字.txtのファイルを探して 数字が1~100の範囲内で一番大きいものが読み込まれます。
ファイルが1つも見つからない場合は空の画面が開きます。
wまたはWキーを押すと制御盤データをcontrol_panel_数字.txtに出力します。
数字は1から順に100までまだ使われていないファイル名を探して出力します。
undo機能は付けていませんので、ときどきWキーで編集途中のデータを残す使い方を想定しています。
制御盤のデザインは特定のキー(大文字/小文字区別なし)を押すことで動作モードを選んで行ないます。
その他のキーやマウスの操作はHキーを押すと起動に使ったコマンドウインドウ側に表示されます。
そのhelp表示をpdfにしたものを添付します。
ikcpedit_help.pdf
画面サイズは大雑把に[Page up]キーで拡大、[Page down]キーで縮小できますが
本エディタではできない画面の縦横比変更や細かいサイズ調整、文字や画像ファイルの貼り付け等は
入力する制御盤データ(*.txt)を直接テキストエディタで編集することで可能です。
制御盤エディタプログラムikcpedit.pyや制御盤のサンプルデータ、飾りで入れてる山や木の画像データ、
さらにおまけで文字フォントの検索スクリプトもまとめてzip圧縮したものを添付します。
上記ファイルを右クリックして「名前を付けてリンク先を保存」でダウンロードし、展開してください。
ikcpedit.pyの起動はコマンドウインド内で
python ikcpedit.py 制御盤データファイル名.txt ・・・
で行ないます。制御盤データは複数ファイル指定可能です。
添付したサンプルデータで起動するには
python ikcpedit.py sample_panel1.txt
またはフォルダ内のバッチファイル sample_panel1_ikcpedit.bat をダブルクリックしてください。
なお、制御盤データの指定を省略するとcontrol_panel_数字.txtのファイルを探して 数字が1~100の範囲内で一番大きいものが読み込まれます。
ファイルが1つも見つからない場合は空の画面が開きます。
wまたはWキーを押すと制御盤データをcontrol_panel_数字.txtに出力します。
数字は1から順に100までまだ使われていないファイル名を探して出力します。
undo機能は付けていませんので、ときどきWキーで編集途中のデータを残す使い方を想定しています。
制御盤のデザインは特定のキー(大文字/小文字区別なし)を押すことで動作モードを選んで行ないます。
キー:モード内操作の概要
-------------------------
M: 対象物の選択、移動、反転、回転、ID番号変更などを行なう
L: 線路に相当するライン描画
A: 3灯信号機追加 (SIG3_S基板の1/2)
B: 6灯信号機追加 (SIG6_S基板)
P: ポイント追加 (PMD_S基板)
O: スローポイント追加 (SPD_S基板)
S: センサー追加 (SIG3_S基板の1/2またはSIG6_S基板の1/2)
C: コントローラー追加 (PWR_S基板)
Y: スイッチ追加 (SW_S基板の1/4)
T: Tileを追加 (四角形または画像)
-------------------------
M: 対象物の選択、移動、反転、回転、ID番号変更などを行なう
L: 線路に相当するライン描画
A: 3灯信号機追加 (SIG3_S基板の1/2)
B: 6灯信号機追加 (SIG6_S基板)
P: ポイント追加 (PMD_S基板)
O: スローポイント追加 (SPD_S基板)
S: センサー追加 (SIG3_S基板の1/2またはSIG6_S基板の1/2)
C: コントローラー追加 (PWR_S基板)
Y: スイッチ追加 (SW_S基板の1/4)
T: Tileを追加 (四角形または画像)
その他のキーやマウスの操作はHキーを押すと起動に使ったコマンドウインドウ側に表示されます。
そのhelp表示をpdfにしたものを添付します。
ikcpedit_help.pdf
画面サイズは大雑把に[Page up]キーで拡大、[Page down]キーで縮小できますが
本エディタではできない画面の縦横比変更や細かいサイズ調整、文字や画像ファイルの貼り付け等は
入力する制御盤データ(*.txt)を直接テキストエディタで編集することで可能です。