機種:
SONY VPL-PHZ61
制御方式:
- RS232C制御
- ADCP(Advanced Display Control Protocol)制御※TCP/IPソケット通信制御
- PJLink制御※UDP&TCP/IP制御
ビデオプロジェクタ SONY VPL-PHZ61
1.RS232C制御
事前準備で用意するものはコマンドを送受信するツール、制御コマンド一覧表、通信速度他の設定です。忘れてはならないのはVP本体の電源設定で省電力モードまたはECOモードを解除し、電源コールド状態からコマンド制御で電源が立ち上がる状態にしておく事です。これを忘れると、電源のオフは効くが、電源のオンが効かない状態になります。
ターミナルソフトはYATを使用します。こちらは大変便利なフリーソフトですのでインストールしておいて損はありません。
YAT Yet Another Terminal
https://sourceforge.net/projects/y-a-terminal/
※ライセンスはGNU Library or Lesser General Public License version 2.0 (LGPLv2)です。
制御コマンドの入手ですが、正攻法は代理店経由でメーカに問い合わせる事・・・ですが、インターネットで検索をすればほとんどのプロトコルマニュアルは手に入ります。ポイントは英語で検索を行う事です。今回はSONY製品ですので近年の機種であればチェックサムが不要な簡易コマンドで制御が可能ですので特に悩まないかと思います。(昔の製品の制御はチェックサム必須だった。)
SONYのVPの制御コマンド一覧表。これはADCP(TCP制御)でも同じである
抜粋
プロジェクタの電源オン・・・power "on"
プロジェクタの電源オフ・・・power "off"
→上記2つの返答コマンド・・・ok
電源状態問い合わせ・・・power_status ?
→返答コマンド・・・standby,on
エラー返信コマンド・・・err_cmd
通信速度の仕様ですが、これまた難易度が高く、正直に書きますと経験側です。SONYは1機種ごとに正確に書いてありません。
SONYのプロジェクタのRS232C仕様
ボーレート 38400bps
データビット 8
パリティ Even
ストップビット 1
フロー制御 なし
ターミナルセッティング
CR + LF
※キャリッジリターン(16進数の0D、別表記\r)、ラインフィード(16進数の0A、別表記\n)が送信コマンドの末尾に必要、返りのコマンドにも末尾についてくる、とプロトコルマニュアルから読める。
※このうちのどれか一つでも設定が異なると、通信が確立しません。
参考制御コマンド入力画面。Alcorn McBride WinScript LiveのProduct File Createrより。WinScriptは筆者が初めて触れた仕組みであり一番親和性高く感じるプログラミングツールである
SONYのプロジェクタのRS232C仕様書
※SONYの注意点:HDBaseT on RS232Cの場合はボーレート9600bps固定、RS232C直接の場合は38400bps固定
SONYの場合はHDBaseT経由でのシリアル制御はシリアルポート直とボーレートが変わる点に注意です。また、近年の機種はボーレートの変更ができません。パリティが Evenなのも落とし穴ですので注意が必要です。
電源がコールドの状態で制御コマンドを受け付けさせるために、省エネ設定を変更する。表記の違いはあれど各社に共通しているので忘れない様に!!
ここまで材料が揃えば後はPCとVPをつないでテストするだけ!!物理層の話は今回は除外します。
YATのシリアル通信設定。こちらは初期設定。制御する側のポート番号がどれなのかは要確認
ターミナルセッティングでEOLシーケンスを<CR><LF>に設定するとコマンド送受信時に省略をすることができる
制御成功!!!
注意しなければならないのは、EOLシーケンスを<CR><LF>に設定している為上記のモニタでは表示されていませんが、<CR><LF>が送信の時にも返信の時にも末尾についている点です。
また、いつでもコマンドを受け付けるわけではありませんので、YATでコマンドの定義(右のボタン)を行い、コマンドの送受信を繰り返し、無効期間を把握する必要があります。
実際はコマンドを複雑にするくらいならば、電源オンコマンドを数回一定のインターバルで投げる様な制御でも問題ありません。但し、自動で絶対に毎回立ち上がらなければならない条件がある場合は制御プログラミングの腕のみせどころとなります。(学校の教室や会社の会議室などでは人間が操作を行うため、厳密な100.00%の制御を達成しなくても回避が出来る。)
この辺りも就職してすぐに関われたので良い経験をしてきたな、と思っています。(機器の故障もあるため、エラー検出まで含めたプログラミングが必要になり、実は簡単ではない。)
RS232Cでの制御は以上です。
2.ADCP(Advanced Display Control Protocol)制御※TCPソケット通信制御
こちらは前項のRS232Cとほぼ同じです。ターミナルソフトもYATを使用します。
但し、VPL-PHZ61では本体パスワードの変更、ADCP制御の認証(MD5ハッシュ)をオフに設定する必要があります。
※MD5ハッシュに対応したプログラムで制御を行う場合はオンでOKです。
SONYのプロジェクタのADCP(TCP)仕様
ポート番号 53595
ログインしたWebブラウザ画面
近年のネットワーク接続機器は必ずログイン時にパスワードの設定、または変更が求められる為、変更した際は必ず記録を残しておきましょう。これはSONYですがPanasonicも同様です。
Webブラウザでの制御も実装されている
ADCP(TCP制御)項目で「Requires Authentication」のチェックボックスを外すとMD5ハッシュ認証が外れる
YAT側はTCP/IPクライアントに設定し、リモートポート番号を53595に設定する。テキストセッティングはRS232Cと同じくEOLシーケンスを<CR><LF>に設定する
制御成功!!!
ADCPの場合はTCPコネクションであるため、接続開始からの応答の速度までRS232Cと若干ルールが異なる
注意点としてはADCPはTCPコネクションである為、まずポートへの接続から処理が始まる事です。いつでもポートが開いているわけではなく、プロトコルマニュアルのADCPシーケンスの項目を参照に実機で「時間が経過した場合の挙動」を必ず確認する必要があります。ターミナルソフトが実際はポートへの接続をポーリングして通信が継続しているだけで実機では時間が経過した場合のポート再接続に一工夫必要なんてケースがあります。細かく調査を行う場合はリピータhubとWiresharkでパケットを確認してみましょう。
※MD5ハッシュ認証を有効にしていると、ポートに接続した際にハッシュ値が返ってくるのでこれが「接続への合図」になる。MD5ハッシュ認証が無効の場合は"NOKEY"が返ってくるのでこれを「接続への合図」にすると良い。但し、「既に接続をしている場合」は即座にコマンドが返ってくる為、実際の制御時にはTCPのコネクションを念頭に置いたプログラミングが必要となる。
Alcorn McBride WinScript Liveでの例。ステータスコマンドの送信がポートを開く事になる為、コネクションスタートの「NOKEY」を除外する動きにしている。(chunkの都合全文字は入っていない)ポートが閉じてしまうインターバルが分からなかった記憶がある(突然ポートを閉じるのはバグらしい)
ADCP(Advanced Display Control Protocol)制御は以上で終了です。
3.PJLink制御
PJLinkはコマンドが仕様化されていますので調べる必要は特にありません。ただ、VP側でPJLinkの機能そのものが有効になっていない場合もありますので注意が必要です。
SONYの場合はWebブラウザでPJLinkの機能をオンにする必要があります。
コマンドを送信するツールはPJLinkの提唱団体である JBMIA(一般社団法人 ビジネス機械・情報システム産業協会)が作成しているテストツールを使用します。
また、PJLinkはデフォルトでハッシュ暗号化をしていますのでこちらも必要に応じて「Requires Authentication」のチェックボックスを外してください。但し、PJLink対応製品であれば認証も実装されていますのでここは有効でも構わないと筆者は考えています。自身でプログラムを作って制御を行う際は、PJLinkではなく他のイーサネット制御方法を使用した方が早いかと思います。
※SONYのパスワードは 仕様書上デフォルトの「JBMIAProjectorLink」です 。
※PJLinkはUDPで機器検索、制御をTCP/IP、ハッシュ認証必須と複雑な制御になる為ほぼモジュール提供されています。
PJLink機能のオンオフ画面
Blog内参考リンク:
JBMIA公式サイト:
Q-SYSではJBMIAがPJLinkプラグインを提供している
PJLinkテストツール。接続成功!!
PJLinkは比較的扱いやすく、またサポートされている機材も多い為、一番使われているVP制御かもしれませんね。
コマンドが統一されている為、共通のテストツールを作成する事が可能です。
Cycling'74 Max8で筆者が作成しているPJLinkテストツール。これで電源オンからステータスオンが返ってくるタイミングなどが自動計測できる
Blog内参考リンク:
以上で終了です。
実際の制御プログラムの作成の場合は、
電源オンの場合 → 電源オンコマンド → 状態取得 → 入力切替(HDBaseTでの使用の場合)
電源オフの場合 → 電源オフコマンド → 状態取得
この様な制御を掛けます。ケースバイケースですが起動条件下で絶えず一定間隔で状態取得をし、その条件と不一致する場合に状態移行を促すといった制御も場合によっては必要です。しかし、制御を行う側が複雑なコマンドを組めないケースも少なくない為、まぁこの辺りだろうと言った落としどころを見つける事になると思います。
最後に大切な事を書きますが、メーカは外部制御に関して責任を一切持ちません。どう考えてもこれはバグだろうと分かった所で対応はしてくれません。そもそも、外部制御は製品保証の対象外なのです。ですので、特定の狭いインターバルでコマンドを送ると詰まったり、フリーズしたりしたとしてもそれは制御プログラミングをしたこちら側の責任になります。従って、時間を掛けてしっかりと機器と向き合う事が大切です。
参考Blog内リンク:
就職してすぐの事から機器の制御は関わっていますが、そうした経験が無い方向けに今回の記事を書きました。本記事がどなたかの参考になれば幸いです。