開発環境XP、VB6を用いてRS422A通信の制御プログラムを作成しています。
そこで、どうしても分からないことが合ったので、教えてもらいたいです。
ある制御コマンドを送信するために、
MSComm.output = Chr(&H**) & Chr(&H**) & Chr(&H92)
と入力すると、最後のChr(&H92)が認識されずエラーが帰ってきます。
次に、方法を変えてバイト型配列(Sendarr()で、
上記のコマンドを配列に格納してから、
MSComm.output = Sendarr
と入力しても、やっぱり最後の&H92の部分でエラーになります。
何かやり方が間違ってるんでしょうか?
申し訳ありませんが、よろしくおねがいします。
因みに・・・
OS的にも、パソコン的にも、ましてVBも、RS-422Aには
対応していません。
何か変換アダプター(メディアコンバータ)を使って、
同期・非同期通信の変換を行い、通信されているので
しょうか?
以上。
XP対応のPCカードタイプのアダプタを使用しています。
もしかしてこれではダメですか??
COMポートとして登録して、
大丈夫かと思って使っていたのですが。。。
まず・・・そのカードのメーカー型式をお知らせ下さい。
尚、そのドライバーの性能で、ハードは、RS-422だが、
ソフト的には、RS-232C互換で使えるのかどうかと言う
部分を確認しないことには、なんとも言えません。
ただ、今まで何がしか作業されてきた中で、通信できて
いたと言う事実がありますが、たまたまなのか、まだ別
の機能があって、それを盛り込めば、なんとかなるかに
ついては、ハード次第・・・
以上。
アドテックシステムサイエンスの
AXP-S103というカードです。
お手数掛けて申し訳ないです。
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 使えるものでも、全二重
が使えなく、半二重通信しかできなかったと言う組み合わせ
もありました。その時は、確かコンテックの通信ボードだっ
たのですが・・・
因みに、通信する相手(機材)は何でしょう・・・
以上。
1.フロー制御を行わないようにしていました。
ちゃんと設定した方が良いですか?
通信スピードは38.4kbpsです。
2.インプットもバイナリモードにする必要があるのですか?
テキストになってました。
3.RThreshold、SThresholdは共に1に設定しています。
無知で申し訳ないです。。。
恥ずかしい限りです。
制御したい機材は古いものなのですが、
放送局用のVTRです。
ボーレートが高速ですネ!
送受信バッファは、通常、ハード側では、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
なで落としたら、まずエラーは無くなりました。
ご参考までに・・・
以上。
なんか、タイプミスばっかり・・・すみません。
以上。
横槍で失礼します。
Chr(&H92)って相手機器に92Hが行っていないのでは?
Debug.Print Asc(Chr(&H92))で多分0になると思います。
ChrBとかつかってみてはどうでしょうか?
制御したい機材は古いものなのですが、
>放送局用の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.
なんてなってます。
InputMode = comInputModeBinary にしないと話にならんと思う.
Unicode -> ASCII の変換は VB がやってくれるから Chr() でいい.
なんか、ディ−プなものを発見しました。
一応、お知らせしておきます。
http://www.rs422.com.ar/index.htm
高価なものですが・・・完全に動作するものですから・・・
最悪の事態の救済に・・・
以上。
Sony 9ピンには&h92なんてコマンドは無かったような。
それともコマンドの後にデーターが付いているのかな?
それだと最後はデーターのCHECKSUMになると思いますが。
約5万円ねぇ・・・(422->232C の box って今いくらぐらいすんのかね?)
趣味じゃないんなら(仕事なら)買いなんだろなぁ...私ぁ買わんけど.
もし、最後の&H92がサムチェックであるならば、
MSComm.output = Chr(&H**) & Chr(&H**) & Chr(&H39) & Chr(&H32)
でないでしょうか?
大嘘こいちまった。
InputMode は関係ないやね。すまん!
InputMode を Binary にするとすべての code が受け取れるが
自分で Unicode に変換してやらにゃならんね。
皆様のアドバイスどおりに、
通信環境の設定、データ送信方法をやってみました。
結果は、
Chr(&H**) & Chr(&H**) & Chr(&H92)は
どうあがいてみても、エラーが出ます。
&H92がきちんと送られないようです。
でも、&H92はその前に送るコードか導き出す
エラー検出バイトなので、
コードに手を加えることによって&H92を
回避して使用するようにしました。
私の個人的な趣味にお付き合いいただいて、
まことにありがとうございました。
また何かありましたら、よろしくお願いします。
ありがとうございました。
要するにCHECKSUMのバイトがうまく生成できなかった。
ということですか。
データ-のバイトを単に足して、上位バイトを
マスクするだけで良いと思うのですが。