HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0526
DoubleQuoteプロジェクタをRS-232Cで動作させたい20解決


DoubleQuote

リンク

2008/5/26(Mon) 15:15:57|NO.16130

既に
http://hsp.tv/play/pforum.php?mode=all&num=15980
RS-232CでDVDデッキを制御したい
↑こちらで質問をさせて頂いた、DoubleQuoteと申します。
上の質問の際にはたくさんの貴重な回答、誠にありがとうございました。

DVDデッキでの試験を前に近くにあるepsonのプロジェクターELP7700に
RS-232Cが搭載されている為、そちらで試験を行ってみました。

↓考えたスクリプトです

#include "hspext.as" // 使用するCOMポートの番号 #define COM_PORT 5 sdim power_on , 32 sdim power_off , 32 sdim source_dsub , 32 power_on_data = 0x1B , 0x07 , 0x01 , 0x00 , 0x03 , 0x01 , 0xF4 power_off_data = 0x1B , 0x07 , 0x01 , 0x00 , 0x03 , 0x00 , 0xF5 source_dsub_data = 0x1B , 0x07 , 0x01 , 0x01 , 0x00 , 0x10 , 0xE7 repeat length(power_on_data) poke power_on , strlen(power_on) , power_on_data(cnt) poke power_off , strlen(power_off) , power_off_data(cnt) poke source_dsub , strlen(source_dsub) , source_dsub_data(cnt) loop /* // 確認用 dialog power_on dialog power_off dialog source_dsub */ comopen COM_PORT,"baud=9600 parity=N data=8 stop=1" if ( stat ) : dialog "COMOPENにてerrorが発生しました",1 : end comput power_on if ( stat == 0 ) : dialog "COMPUTにてerrorが発生しました",1 : end end

COMポートに関しては5番だったのでそれを指定しましたので間違いないようです。
実行してみたのですが、エラーは出ないのですが、プロジェクター側が何とも動きません。
通信は成功している(?)ようです


http://hsp.tv/play/pforum.php?mode=pastwch&num=13223

こちらの過去ログを紹介して頂いたので、参考にしてみました。

命令の末尾に"\r"を付けてみる
命令の末尾に"\n"を付けてみる
命令の末尾に"\r\0"を付けてみる
命令の末尾に0x0dを付けてみる

など試行してみましたが、結果は動きませんでした。

なにか記述で間違っているところがありましたら、ご指摘して頂けるとありがたいです。
よろしくお願いいたします。

尚、通信におけるコマンドは以下の通りとなっています。

通信速度 9600bps
パリティ 無し
ストップビット 1
BIT長 8
フロー制御 ハードウェア


電源 POWER ON 1B 07 01 00 03 01 F4
POWER OFF 1B 07 01 00 03 00 F5
入力ソース D-SUB PC1 1B 07 01 01 00 10 E7
BNC PC2 1B 07 01 01 00 30 C7
Y/Cr/Cb 1B 07 01 01 00 40 B7
コンポジット 1B 07 01 01 00 21 D6
S端子 1B 07 01 01 00 22 D5


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



この記事に返信する


f

リンク

2008/5/26(Mon) 20:51:56|NO.16139

電源ONの4byte目に、00(文字列終端記号)が入ってる。
文字列で送信しようとしたら、そこで送信がとまる。

バイナリで送信すれば良いんでね。



f

リンク

2008/5/26(Mon) 21:16:36|NO.16142

ん?ふと思ってドキュメント読んだら、バイナリ送信の命令無いのな。
computcで送信するしか無いな。



GENKI

リンク

2008/5/26(Mon) 21:26:32|NO.16143

comclose命令忘れてますよ。

> 電源 POWER ON 1B 07 01 00 03 01 F4

コマンドが文字コードと一致しないこともあるんですね。
頭をそろえてみると…。

> 1B 07 01 00 03 01 F4
> 1B 07 01 00 03 00 F5
> 1B 07 01 01 00 10 E7
> 1B 07 01 01 00 30 C7
> 1B 07 01 01 00 40 B7
> 1B 07 01 01 00 21 D6
> 1B 07 01 01 00 22 D5

となるわけですが。
うーん。文字数が終端コードの変わりになるんでしょうか。私の少ない経験知識ではお役に立てなさそうです。

よくわからないのでマニュアル探してみたんですが、RS-232Cの仕様は見つけることが出来ませんでした。
http://www.epson.jp/support/manual/elp/elp7700.htm

とりあえず、comput命令の後のstatの値を見てみてはどうでしょうか?
成功すると、送信に成功したバイト数(文字数)が代入されるはずなので
想定した値が出ているか確認してみてください。
途中にヌルが入っているので2〜3バイトでとまっていたりしないでしょうか?

ケーブルがクロスだったとかそういうことがないかも確認しておくのもいいかもしれません。



DoubleQuote

リンク

2008/5/26(Mon) 22:09:43|NO.16145

fさん、GENKIさん、返信ありがとうございます。


fさん、GENKIさん
>電源ONの4byte目に、00(文字列終端記号)が入ってる。
確かに入っていますね。ただ、computで送ったとき、statが8として帰ってきました。
これは8バイトまで送られているんですよね。つまり最後まで送られてはいる
みたいなんですね。

クロスではないです。



DoubleQuote

リンク

2008/5/26(Mon) 22:13:46|NO.16146

fさん

もし、computcでやるのであれば

computc 0x1B computc 0x07 computc 0x01 computc 0x00 computc 0x03 computc 0x01 computc 0xF4

こんな感じでよろしいですか?



f

リンク

2008/5/26(Mon) 22:48:30|NO.16147

送信するデータがちゃんとした物か、内容を確認してみた。

修正部分
	repeat length(power_on_data)
mes "" + strlen(power_on) + ":" + strf("%02x",power_on_data(cnt)) poke power_on , strlen(power_on) , power_on_data(cnt) poke power_off , strlen(power_off) , power_off_data(cnt) poke source_dsub , strlen(source_dsub) , source_dsub_data(cnt) loop

結果
0:1b
1:07
2:01
3:00
3:03
4:01
5:f4

・・・。そもそもちゃんとしたデータが出来上がっておらんようだな。
4バイト目の0がstrlenでカウントした時にヌル扱いでカウントアップされてない。

素直に
	for i,0,7
poke power_on , i , power_on_data(i) poke power_off , i , power_off_data(i) poke source_dsub , i , source_dsub_data(i) next
と書いた方が面倒な話は無いな。

送信は、態々聞かずともやってみれば良いんでね。
ループでやってもよし。



DoubleQuote

リンク

2008/5/26(Mon) 23:36:43|NO.16148

fさん

なるほど、strlenは00のヌル文字以降はカウントアップしていかないんですね

peekで一文字ずつ取り出してみました。


#include "hspext.as" onexit *exit // 使用するCOMポートの番号 #define COM_PORT 5 sdim power_on , 32 sdim power_off , 32 sdim source_dsub , 32 power_on_data = 0x1B , 0x07 , 0x01 , 0x00 , 0x03 , 0x01 , 0xF4 power_off_data = 0x1B , 0x07 , 0x01 , 0x00 , 0x03 , 0x00 , 0xF5 source_dsub_data = 0x1B , 0x07 , 0x01 , 0x01 , 0x00 , 0x10 , 0xE7 for i,0,7 poke power_on , i , power_on_data(i) poke power_off , i , power_off_data(i) poke source_dsub , i , source_dsub_data(i) next /* // 確認用 dialog power_on dialog power_off dialog source_dsub */ comopen COM_PORT,"baud=9600 parity=N data=8 stop=1" if ( stat ) : dialog "COMOPENにてerrorが発生しました",1 : end for i,0,7 computc peek(power_on,i) if ( stat == 0 ) : dialog "COMPUTにてerrorが発生しました",1 : end next computc 0x0d end *exit comclose end

これでも、やっぱし動かないですね・・・何がいけないのでしょう・・・



f

リンク

2008/5/27(Tue) 00:29:55|NO.16150

とりあえず、マニュアルに終端コードが0x0dだと書いていないならcomputc 0x0dはいらんだろう。

送信するべきデータは送れている筈だが、それでも動作しないとなると、見落としが無いか
マニュアルを詳細に調べるしか無いのではないか。1バイトづつ送信するのがまずいと言うなら、
windowsAPIからバイナリ送信するしか無いだろう。

また、機器からの応答等が帰ってきていないか確認してみるべきかも知れない。
この例では電源ONのコマンドだが、他の場合はどうか等も確認してみてはどうか。



f

リンク

2008/5/27(Tue) 00:32:27|NO.16151

念のためだが、メインの電源が落ちていないか。



yamineko

リンク

2008/5/27(Tue) 00:33:00|NO.16152

割り込み質問させてください、すみません。
HSPって、Cのsizeof()みたいな命令って無いんでしょうか?

そうだとすると、バイナリを扱いにくいなぁと思った事がありまして…

なんか、関連ありそうなので申し訳ないと思いつつも、
割り込んでしまいました。



yamineko

リンク

2008/5/27(Tue) 00:46:37|NO.16153

そういえば、外部の物を操作するときは、
データが確実に送れているかどうかを、まず確認した方が良いかもしれません。

二台目のPCとか、シリアルポートを二つ使うとか、
とりあえず送ったデータをディスプレイしてくれる機器とか…

何も無かったらさすがに確認のしようがありませんが。

もし、送れていても動かないときは、送信タイミングの問題かもしれません…
たしかシリアルって送信速度が複数ありましたよね?



DoubleQuote

リンク

2008/5/27(Tue) 04:51:54|NO.16155

fさん、yaminekoさん、助言ありがとうございます。

fさん
>とりあえず、マニュアルに終端コードが0x0dだと書いていないならcomputc 0x0dはいらんだろう。
書いてありませんでした。ですが、過去ログにこれでうまくいった(?)情報があったので
実験でやってみたのですが消し忘れました。申し訳ありません。結果無理でしたが。

>1バイトづつ送信するのがまずいと言うなら、
1バイトずつ送るのとすべてを送るのとでは、やはり待ち時間等の違いが出てしまい
結果が変わってしまうのでしょうか?

>windowsAPIからバイナリ送信するしか無いだろう。
この場合はかなり複雑なモノになってきそうですね。
ちょっとググってみただけですが・・・

>この例では電源ONのコマンドだが、他の場合はどうか等も確認してみてはどうか。
電源ボタンを押す事により電源を入れ、ソース切り替える指令をRS-232Cで送ってみたのですが
駄目でした。

>念のためだが、メインの電源が落ちていないか。
↑の実験を行っていますし、メイン電源は確実に入っています。

computは終端文字列があるとそれ以降は送られないと言う事で良いんですよね?


yaminekoさん
>データが確実に送れているかどうかを、まず確認した方が良いかもしれません。
PC二台でやりましたが、送受信に関して問題なく送られている事を確認しました。

>もし、送れていても動かないときは、送信タイミングの問題かもしれません…
一文字ずつ送っている際の待ち時間をwait 3としてやってみましたが変化無いですね。

>たしかシリアルって送信速度が複数ありましたよね?
comopenの時に指定するやつですよね?これはコマンドで指定されているとおり
記述してあります。



これちょっとあきらめた方が良いのかなぁ・・・



StarratS

リンク

2008/5/27(Tue) 06:57:19|NO.16159

>HSPって、Cのsizeof()みたいな命令って無いんでしょうか?
>そうだとすると、バイナリを扱いにくいなぁと思った事がありまして…

どうしてそう思うのだぃ?
HSPには基本型以外にユーザーが任意で型付けできない言語なんだよ?
まさか配列のサイズをsizeofで得ようなんて考えてないよね?
(http://quasiquote.org/hspwiki/HSP3%e3%81%ab%e8%bf%bd%e5%8a%a0%e3%81%97%e3%81%a6%e6%ac%b2%e3%81%97%e3%81%84%e6%a9%9f%e8%83%bd%e3%81%ae%e3%83%aa%e3%82%b9%e3%83%88)



f

リンク

2008/5/27(Tue) 07:50:39|NO.16162

1byteずつ送信したとて、大して問題は無いと思うが・・・試した事は無い。
computは「文字列」を送信するからな。「文字列」はNULLが出たらそこが終端だ。

諦めずとも、メーカに問い合わせると言う手段がある。
RS-232Cで制御したい旨伝え、アドバイスを貰うと良い。

差し支えなければメーカ名型番を聞いた上でそのマニュアルがこちらで手に入るなら、
見てみたい物だが。


意見が上がっているが、確かに、きちんと外部に出力されているか確認する手段が有るなら、
確認しておいた方が良いな。
データがバイナリなのでハイパーターミナルは使えんな。
vectorか窓の社で漁ればシリアルのアナライズソフトが幾つかあったと思う。



f

リンク

2008/5/27(Tue) 13:00:15|NO.16163

ああ、すまない。メーカと型番は書いてあったのだな。
http://www.epson.jp/support/manual/elp/elp7700.htm

ここのマニュアルをぱっと流し見たが、シリアル制御について書いて無いな・・・。



f

リンク

2008/5/27(Tue) 13:05:38|NO.16164

・・・・・。

取扱説明書p13に、「クロスケーブルで接続します。」とあるんだが。



やみねこ

リンク

2008/5/27(Tue) 14:58:19|NO.16171

>StarratSさん

APIの戻り値をdupptrしてて思いついたのですが、

そういえば、
sizeofって構造体の宣言からデータサイズを拾うんでしたっけ?
だとしたら、戻り値の構造体の宣言が無いHSPでは無意味でした…

ありがとうございました。



GENKI

リンク

2008/5/27(Tue) 22:30:09|NO.16198

取説:http://www2.epson.jp/support/manual/data/elp/elp7700/402118202.PDF
13ページ
> Contro(l RS-232C)端子
> コンピュータのシリアルポートとプロジェクターのControl 端子を市販のD-Sub 9pin(シ
> リアル)クロスケーブルで接続します。

うお。ほんとだ、こんなところに。

そしてこの取説を見つけておきながらのコメントが…

> ケーブルがクロスだったとかそういうことがないかも確認しておくのもいいかもしれません。

これ。orz
すみません思い込みで書いてしまいました。



DoubleQuote

リンク

2008/5/28(Wed) 10:11:20|NO.16213

fさん

なるほど。クロスケーブルなんですね。申し訳ありません。ストレート使ってみました。
クロスケーブルを入手してすぐに実験してみます。ありがとうございます。

とりあえずそれまで解決印は保留とさせて頂きます。



DoubleQuote

リンク

2008/5/28(Wed) 22:42:46|NO.16238

プロジェクターが始動しました!!

やはり、原因はクロスケーブルだったようです。

クロスケーブルを探したところ、意外と高く、しかもDsub9Pinメス - Dsub25Pinオスという
組み合わせて1700円とちょっとお高かったので、9Pin同士のオスメスの途中を切って
半田ごて片手にクロスケーブル化しました。およそ2時間30分かかりましたよ。

みなさん、貴重な知恵を与えて頂き、誠にありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.