MSCommでのRS-422A制御方法

解決


しんや  2004-02-19 21:33:34  No: 111907  IP: [192.*.*.*]

開発環境XP、VB6を用いてRS422A通信の制御プログラムを作成しています。
そこで、どうしても分からないことが合ったので、教えてもらいたいです。

ある制御コマンドを送信するために、
MSComm.output = Chr(&H**) & Chr(&H**) & Chr(&H92)
と入力すると、最後のChr(&H92)が認識されずエラーが帰ってきます。

次に、方法を変えてバイト型配列(Sendarr()で、
上記のコマンドを配列に格納してから、

MSComm.output = Sendarr
と入力しても、やっぱり最後の&H92の部分でエラーになります。

何かやり方が間違ってるんでしょうか?
申し訳ありませんが、よろしくおねがいします。

編集    削除
岡田 之仁  2004-02-19 22:21:27  No: 111908  IP: [192.*.*.*]

因みに・・・

OS的にも、パソコン的にも、ましてVBも、RS-422Aには
対応していません。

何か変換アダプター(メディアコンバータ)を使って、
同期・非同期通信の変換を行い、通信されているので
しょうか?

以上。

編集    削除
しんや  2004-02-19 23:22:38  No: 111909  IP: [192.*.*.*]

XP対応のPCカードタイプのアダプタを使用しています。
もしかしてこれではダメですか??

COMポートとして登録して、
大丈夫かと思って使っていたのですが。。。

編集    削除
岡田 之仁  2004-02-19 23:31:08  No: 111910  IP: [192.*.*.*]

まず・・・そのカードのメーカー型式をお知らせ下さい。

尚、そのドライバーの性能で、ハードは、RS-422だが、
ソフト的には、RS-232C互換で使えるのかどうかと言う
部分を確認しないことには、なんとも言えません。

ただ、今まで何がしか作業されてきた中で、通信できて
いたと言う事実がありますが、たまたまなのか、まだ別
の機能があって、それを盛り込めば、なんとかなるかに
ついては、ハード次第・・・

以上。

編集    削除
しんや  2004-02-19 23:44:17  No: 111911  IP: [192.*.*.*]

アドテックシステムサイエンスの
AXP-S103というカードです。

お手数掛けて申し訳ないです。

編集    削除
岡田 之仁  2004-02-19 23:55:20  No: 111912  IP: [192.*.*.*]

http://www.adtek.co.jp/seihin/pccard/axpsi0123.html
これですネ!

私は残念ながらこれを使ったことが無いので、そのものの
話としてできないので、あくまで推測ですが・・・

1.  通信する相手(機材?)とのハンドシェーク方式は
    CTS/RTS(<=RS-422の場合はそう言わないはず)
    で、ポートオープン時、制御線信号はオンされていますか?
2.  MSComm.InputModeは、バイナリモードになっていますか?
3.  あと余談ですが、割り込み送受信方法ですか?
    RThreshold、SThresholdはどうされていますか?

この辺がキチッとされていれば、カード上で非同期・同期変換
を行い、通信が可能だとは思います。

※  RS-422/485 は、時には、非常に相性が出る場合があります。
    NEC の構内モデムで、RS-422/485 使えるものでも、全二重
    が使えなく、半二重通信しかできなかったと言う組み合わせ
    もありました。その時は、確かコンテックの通信ボードだっ
    たのですが・・・

因みに、通信する相手(機材)は何でしょう・・・

以上。

編集    削除
しんや  2004-02-20 02:58:24  No: 111913  IP: [192.*.*.*]

1.フロー制御を行わないようにしていました。
  ちゃんと設定した方が良いですか?
  通信スピードは38.4kbpsです。

2.インプットもバイナリモードにする必要があるのですか?
  テキストになってました。

3.RThreshold、SThresholdは共に1に設定しています。


無知で申し訳ないです。。。
恥ずかしい限りです。

制御したい機材は古いものなのですが、
放送局用のVTRです。

編集    削除
岡田 之仁  2004-02-20 03:53:56  No: 111914  IP: [192.*.*.*]

ボーレートが高速ですネ!
送受信バッファは、通常、ハード側では、16バイト程度しか
無いので、フロー制御は必要です。

アドテックのものも、他社の製品と変わらず、同じような
通信チップを搭載しているものと思われますので、可能で
あれば、ボーレートを低速にしてやれば、状況に変化が出
る可能性があります。

あと・・・
RS-422/485では、ボーレートによって、通信可能な距離が
決められています。それは電気的減衰の為です。
そこまで高速であれば、かならいS/N比が悪くなっている
はずですので、到達郷里も短いはずです。

例えば・・・
RS-422/485での撚り対線の線の太さと、ボーレートの関係で
太ければ、同じボーレートでも到達距離は長くなります。
同じ太さでは、高速になるほど到達距離は短くなります。

19200bps  0.5φ  3.5Km以下
          0.9φ  6Km以下

19200bps  0.5φ  2.5Km以下
 9600bps  0.5φ  5Km以下

お使いの配線素材と環境によって、インピーダンスが変化します
ので、あくまで論理値として、メーカーから仕様が提供されてい
るはずです。

私も1m位の距離で、いいかげんな配線素材で、19200bpsで通信が
不可能であった・・・と言う経験があります。ですが、2400bps
なで落としたら、まずエラーは無くなりました。

ご参考までに・・・

以上。

編集    削除
岡田 之仁  2004-02-20 03:54:51  No: 111915  IP: [192.*.*.*]

なんか、タイプミスばっかり・・・すみません。

以上。

編集    削除
GOD  2004-02-20 18:26:32  No: 111916  IP: [192.*.*.*]

横槍で失礼します。
Chr(&H92)って相手機器に92Hが行っていないのでは?
Debug.Print Asc(Chr(&H92))で多分0になると思います。
ChrBとかつかってみてはどうでしょうか?

編集    削除
ねろ  2004-02-20 19:48:58  No: 111917  IP: [192.*.*.*]

制御したい機材は古いものなのですが、
>放送局用のVTRです
SONY BVH-2000あたりかな?
だとしたらソニー9ピン  プロトコール
Data rate : 38.4kb/s 固定
The Data words : Start Bit + 1 PARIT Bit +1 STOP Bit
Parity: ODD

>MSComm.output = Chr(&H**) & Chr(&H**) & Chr(&H92)
Chr(&H92) -> Chr(&H5C)なんてことは無いですよね。
# In case if the BVH-2000 receive then error or the undefined
CMD from the CONTROLLING DEVICE,the BVH-2000 will transmit
NAK and DATA which shows the error cause.
なんてなってます。

編集    削除
punto  2004-02-20 20:31:05  No: 111918  IP: [192.*.*.*]

InputMode = comInputModeBinary にしないと話にならんと思う.
Unicode -> ASCII の変換は VB がやってくれるから Chr() でいい.

編集    削除
岡田 之仁  2004-02-20 20:45:10  No: 111919  IP: [192.*.*.*]

なんか、ディ−プなものを発見しました。

一応、お知らせしておきます。

http://www.rs422.com.ar/index.htm
高価なものですが・・・完全に動作するものですから・・・

最悪の事態の救済に・・・

以上。

編集    削除
ねろ  2004-02-20 20:59:12  No: 111920  IP: [192.*.*.*]

Sony 9ピンには&h92なんてコマンドは無かったような。
それともコマンドの後にデーターが付いているのかな?
それだと最後はデーターのCHECKSUMになると思いますが。

編集    削除
punto  2004-02-20 21:09:14  No: 111921  IP: [192.*.*.*]

約5万円ねぇ・・・(422->232C の box って今いくらぐらいすんのかね?)
趣味じゃないんなら(仕事なら)買いなんだろなぁ...私ぁ買わんけど.

編集    削除
しゅう  2004-02-20 22:14:50  No: 111922  IP: [192.*.*.*]

もし、最後の&H92がサムチェックであるならば、

MSComm.output = Chr(&H**) & Chr(&H**) & Chr(&H39) & Chr(&H32)

でないでしょうか?

編集    削除
punto  2004-02-21 00:56:24  No: 111923  IP: [192.*.*.*]

大嘘こいちまった。
InputMode は関係ないやね。すまん!

InputMode を Binary にするとすべての code が受け取れるが
自分で Unicode に変換してやらにゃならんね。

編集    削除
しんや  2004-02-21 03:55:40  No: 111924  IP: [192.*.*.*]

皆様のアドバイスどおりに、
通信環境の設定、データ送信方法をやってみました。

結果は、
Chr(&H**) & Chr(&H**) & Chr(&H92)は
どうあがいてみても、エラーが出ます。
&H92がきちんと送られないようです。

でも、&H92はその前に送るコードか導き出す
エラー検出バイトなので、
コードに手を加えることによって&H92を
回避して使用するようにしました。

私の個人的な趣味にお付き合いいただいて、
まことにありがとうございました。
また何かありましたら、よろしくお願いします。

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

編集    削除
ねろ  2004-02-21 04:33:01  No: 111925  IP: [192.*.*.*]

要するにCHECKSUMのバイトがうまく生成できなかった。
ということですか。
データ-のバイトを単に足して、上位バイトを
マスクするだけで良いと思うのですが。

編集    削除