通信のデータ長やパリティ、ポーレート等の設定を”SETTINGS”でおこない、ポートをオープンして外部機器にデータを送る際、ここでは、データをバイナリデータで送らなければなりません。
STX,アドレス,チェックサム,ETXの順にそれぞれアスキーコードで16進数に変換して送ってますが、うまく通信できません。
教えて頂けませんか。
素人でごめんなさい。
この部分のサンプルプログラムがあれば最高なんですが・・・。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>送信してデータが送られているようです。


>(RS232C→RS485変換にて計測機器に送信。その際LEDが瞬間的に点灯します)

送信できている証拠として、LED点灯ですか...
確かに計測機器に何らかの信号は送られているのでしょうが、
これでは正しいデータかどうかがわかりませんね。

一つずつつぶしていきましょう。
まずラインモニタ等で、本当にパソコンから正しい信号を送っているかどうかの
検証をして下さい。
ラインモニタがなければ別のパソコンでバイナリ通信ができる通信プログラム
でもいいです。その場合バイナリをASCIIコードなどで文字表示できるソフトで。
私は確か簡単なプログラムを作って検証しました。

またソフト的に気になる点を書きます。
1)バイナリ通信では、Byte変数を使う
2)透過コードの扱い
バイナリ通信ではテキスト通信の時のようにSTX(Start of Text)のような
特定の1バイトのコードに意味を持たせることができないので、
透過コードといって、有効データの通信の始まり、終わりを数バイトの
コードで表します。
これは機器によって異なるので、機器の仕様書を見てください。

私が扱った機器では、10Hと02Hが連続するとSTX、10Hと03Hが連続するとETX、
その間のコードが有効データでした。
有効データの中にはデータバイト長やチェックサムが入るので、例えば
偶然にノイズで10H+02Hと10H+03Hが入っても、有効かノイズかの判断が
できます。

以上のことを確かめて見てください。
    • good
    • 0
この回答へのお礼

バイナリ形式とメーカーから教えられたのに、再度確認するとテキスト形式でコマンドを送ることが判明しました。
ヒントのラインモニタで確認しながら接続。
通信はうまくいきました。
お騒がせいたしました。
どうもありがとうございました。

お礼日時:2001/10/21 23:01

私も9766さんと同じようなバイナリデータの通信プログラムをVB


で作りました。
9766さんの場合、どの部分がどのようにうまく通信できないでしょうか?
それを教えていただければ何かお役に立てるかもしれません。

基本的なことですが、InputModeプロパティは大丈夫でしょうね?
ComInputModeBinary(=1)にしないとダメですから。

この回答への補足

どうもありがとうございます。

MSComm1.CommPort=1
MSComm1.Settings="9600,n,8,1"
MSComm1.PortOpen=True
MSComm1.InputMode=comInputModeBinary

送信してデータが送られているようです。
(RS232C→RS485変換にて計測機器に送信。その際LEDが瞬間的に点灯します)
データが間違っていても何らかの信号が帰ってくるはずなんですが・・・。
メールを出しても返事のない人みたい。(おこられてしまうかな)
接続は間違いありません。
ヒントをおしえてください。

補足日時:2001/10/15 19:39
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRS232Cストレートとクロスケーブルについて

先日、RS232Cパラレルケーブル(DSUB25オスーDSUB25メス)を購入したのですが、ストレート結線が必要なのにその確認を見落としてました。
実際にそのケーブルを利用して、ある周辺機器に情報を転送しようとしたのですが、ケーブルが認識できないというエラーが出ました
そこで、もしやストレートとクロスを間違えてしまったのかと思ってます…
(ドライバはインストールしたし他に考えられるエラー対策もしました)
そこで質問したいのですが、ケーブルの外観からはストレートとクロスの区別はつきませんよね?
ただケーブルが梱包されていた袋には、RS232Cケーブル(全結線)と書いてありました。
全結線という事は全ストレート結線の略で合っているということですか?
また、テスターを使って確認できるとネットで調べたのですが確認方法がよく解りません。
一箇所づつ同じピン配置の所をプローブして抵抗が0Ωなのを確認しそれを25ピン全部すればいいのでしょうか?
どなたか詳しい方ご返答の方よろしくお願いします

Aベストアンサー

既に皆様からお答えが出ているので蛇足に成るかもしれませんが通常、梱包に何も書かれていない場合はストレートです。
クロスの場合はクロスケーブルの表示が有るはずです。

テスターで計る場合はストレートの場合は同一ピン番同士が繋がっていればOKですが、粗悪品の場合にたまに隣のピン同士がショートしている事が有ります。
隣のピン同士だけでなく1→1以外の全ピン、2→1~2以外の全ピン、3→1~3以外の全ピン・・・と24まてチェックして診る事も必要と思います。(ただし使われてないピン同士ならショートしてても関係なし)

下記はピン接続です、ご参考までに。

信号 D-SUB 25ピン  D-SUB 9ピン
TXD-------2-------------3--------送信データ
RXD-------3-------------2--------受信データ
RTS-------4-------------7--------データ送信要求
CTS-------5-------------8--------データ送信可
DSR-------6-------------6--------接続可
GND-------7-------------5--------グランド
DCD-------8-------------1--------キャリア検出
DTR------20-------------4--------接続要求
RI--------22-------------9--------リング情報

既に皆様からお答えが出ているので蛇足に成るかもしれませんが通常、梱包に何も書かれていない場合はストレートです。
クロスの場合はクロスケーブルの表示が有るはずです。

テスターで計る場合はストレートの場合は同一ピン番同士が繋がっていればOKですが、粗悪品の場合にたまに隣のピン同士がショートしている事が有ります。
隣のピン同士だけでなく1→1以外の全ピン、2→1~2以外の全ピン、3→1~3以外の全ピン・・・と24まてチェックして診る事も必要と思います。(ただし使われてないピン同士...続きを読む

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

Q機器とRS232Cクロスケーブルでのデータのやり取りについて

現在仕事で、組み込み系のシステム開発をしております。今回、私が作ったシステムではないのですが通信のテストを頼まれました。内容は

RS232Cのクロスケーブルで
よくわかりませんが何らかの機器を制御する機械と
接続。
FF 03 ~ FF で終わる105バイトの
バイナリデータを送信すると機器が何らかの(LEDがついたり)反応がある。

とのことでした。
~の部分は何でもいいようです。
VC++にて「WriteFile」を使い

BOOL WriteFile(
HANDLE hFile,  // シリアルポートへのハンドラ
LPCVOID lpBuffer,// 送信バッファへのポインタ
DWORD nNumberOfBytesToWrite, // 送信データ数
LPDWORD lpNumberOfBytesWritten,// 実際に送信したデータ数
LPOVERLAPPED lpOverlapped  // 非同期I/O動作の場合のオーバーラップ構造体へのポインタ
);

この関数の
lpBuffer に
"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"
という文字列を入れて送信しました。

テストでパソコン同士を232Cクロスケーブルでつなぎ
送信したろころたしかに
"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"
が送られてきました。

しかしこれを機器に送信しても何の反応もありません。???
"FF030000000000 ~ 00000000FF"
これもダメでした。
この場合"FF"をバイナリの1バイトと認識していないのでしょうか?
クロスケーブルやポートに間違いはありません。
送信データ自体に問題があるような、、、。
何か私自身大きな勘違いをしているようなきはするのですが、具体的にどうなおしたらいいのかわかりません。どなたかおわかりになる方おいででしたらご教授お願いします。

現在仕事で、組み込み系のシステム開発をしております。今回、私が作ったシステムではないのですが通信のテストを頼まれました。内容は

RS232Cのクロスケーブルで
よくわかりませんが何らかの機器を制御する機械と
接続。
FF 03 ~ FF で終わる105バイトの
バイナリデータを送信すると機器が何らかの(LEDがついたり)反応がある。

とのことでした。
~の部分は何でもいいようです。
VC++にて「WriteFile」を使い

BOOL WriteFile(
HANDLE hFile,  // シリアルポートへのハンドラ
LPCVOID l...続きを読む

Aベストアンサー

通信の諸条件があっているとしたら、

lpBuffer に
"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"



"\xFF\x03\x00\x00\x00\x00\x00 ~ \x00\x00\x00\x00\xFF"

と、\xなんとか の形にしてみてください。
これで、バイナリの文字列が作れます。

ただし、\x00 は、C言語では、'\0' とみなされることがありますので、「なんでもいい」のでしたら、\x00 は避けて、\x01 とか、他のデータにしてみることをお勧めします。

Q座標A(X,Y)の線分(aX,aY)(bX,bY)に対称な座標の求め方

VBで図形を入力した線分に対称に反転した図形と書こうとしています。
その為に必要な座標A(X,Y)の線分(aX,aY)(bX,bY)に対称な
座標B(X',Y')の求め方についてご教授お願いいたします。

Aベストアンサー

 次の関係から連立方程式を解いてください。

 点P(aX,aY)、点Q(bX,bY)とすると、

・直線PQと直線ABは垂直に交わる。 ⇒2つの直線の傾きを掛けると-1になる。

・2点ABの中点Mが直線PQ上を通る。⇒直線PQの方程式に点M((X+X')/2, (Y+Y')/2)を代入する。

QRS232Cケーブル ストレートとクロスを見分ける方法

こんにちは、
SW_HUBでストレートケーブルとクロスケーブルを使うものがあるのですが、これらをケーブルを見分ける方法ってあるのでしょうか?
よろしくお願いします。

Aベストアンサー

4.8.9.25ピンの場合があるのですが.
2-3.3-2が多くの場合のクロスケーブルの接続方式です(両者ともに信号線。制御線はいろいろな接続方式があるので.簡単には区別つきません。大きく分けて7種類*コネクタの形状。小さく分けると機械の数だけ存在します。)。
ただし.まれに「片一方だけ」という結合方式をとっている場合があります。

ところで.SW_HUBに接続可能なRS-232Cケーブルはあるのかな?。

Q算術記号(+,-,/,*)を文字としてあらわして計算に使用する方法

ビジュアルベーシック初心者です。
タイトルでは誤解をうむと思いますが、やりたいことは以下のようなことです。

kigouという変数をstringsで宣言しそこに文字として算術記号を代入する。  例 kigou = "+"

このkigou変数を用いて、実際の計算をする。
例 i = 1 kigou 2
この場合、kigou変数には+が代入されているので、iの値は3になる。

このように、kigouに入れる算術記号を任意にかえ、kigouという変数を用いて実際の計算をさせたいのですが、正しい記述方法などがわかりません。方法はありますか?

Aベストアンサー

#3です。
プログラムは、どれだけ多く使われるかによって、作るのにどれだけ手間をかけてもよいか、が決まるものです。例えば、それだけの需要があれば、次のようなプログラムを作っても採算がとれるはずです。

例えば、
keisan (2, +, 3) よりも一歩進めて、keisan ("(2 + 3) * 4") の値が 20 となるような function keisan を作ることは可能です。中級者以上の練習問題に適していると思います。

Q対応OS USB RS232C

USB接続の機器説明欄には、対応OSが注意書きで載っていますが、
RS232C接続の機器の方には記載がありません。

これは、RS232Cでの接続であればOSは関係ないということでしょうか?

Aベストアンサー

いいえ、ちょっと違います。

USBの通信そのものはOSに依存することなく普通に行えます。
質問の場合の対応OSは、デバイスドライバーが対応するOSを示しています。

当然RS232C通信も同様です。
RS232C通信で特殊な制御を行う場合は、専用のデバイスドライバーを必要とすることがあり、この場合は対応OSについての記述が示されます。

QAlt+P,Alt+NをPostmessageで送るには

あるアプリがあり、そのハンドルを取得してからメッセージを送るプログラムを作っています。
PageUp,PageDownをそれぞれAlt+P,Alt+Nに変換して送るものです。
関数・定数宣言部は省略しています。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim hTest As Long
  hTest = FindWindow(vbNullString, "Test")
  If KeyCode = 33 Then 'PageUp
    PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
    PostMessage MPL, WM_KEYDOWN, VK_N, 0
    PostMessage MPL, WM_KEYUP, VK_N, 0
    PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0
  ElseIf KeyCode = 34 Then 'PageDown
    PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
    PostMessage MPL, WM_KEYDOWN, VK_P, 0
    PostMessage MPL, WM_KEYUP, VK_P, 0
    PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0
  End If
End Sub

送り先(Test.exe)では、
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim L As String
  L = ""
  If Shift = 4 Then L = "Alt + "
  Label1.Caption = L & KeyCode
End Sub

ラベルで「Alt+P」などが来ているかどうか見ています。こちらのウィンドウで「Alt+P」を押すとちゃんと表示されます。

しかし、この2つを組み合わせるとPのみやNのみしか送られてきません。どこかおかしいのでしょうか。

Alt+PなどをPostMessageで送る方法でよい方法があれば、お教え下さい。
よろしくお願いします。

あるアプリがあり、そのハンドルを取得してからメッセージを送るプログラムを作っています。
PageUp,PageDownをそれぞれAlt+P,Alt+Nに変換して送るものです。
関数・定数宣言部は省略しています。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim hTest As Long
  hTest = FindWindow(vbNullString, "Test")
  If KeyCode = 33 Then 'PageUp
    PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
    PostMessage MPL, WM_KEYDOWN, VK_N, 0
    PostMessage MPL,...続きを読む

Aベストアンサー

ALTキーとの組み合わせでしたら、WM_SYSCHARのほうがいいのでは?
たぶん、送り先もVB製でしたら内部でTranslateMessageような感じですし。


あと、
>PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0

MPLってなんですか?
>hTest = FindWindow(vbNullString, "Test")
で取得したウィンドウにPostMessageするんじゃないんですか?


次に、
>Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

KeyDownイベントに処理が書かれてますが、このイベント自体は呼ばれてますか?キー操作を受け付けるコントロールが張り付いてるのにKeyPreviewプロパティがFalseなんてことは無いですか?

#ちなみに、普通はVK_ALTではなくVK_MENUですので。

QRS232CのDTRの電流

RS232CのDTRを駆動電源として(レギュレータを介して)絶縁型のRS232CトランシーバICを駆動させようとしていますが、うまく動きません。DTRからの電圧を見ていると、7.5V出ていた部分がトランシーバICをつけると4.1Vに落ちます。ICの消費電流が100mAなので、DTRからの電流が足りないのでしょうか。

2006年頃のRS232C(D-sub9ピン端子)付きのノートPCを使っていますが、DTRの出力電流はどのくらいのmAまで取れるものでしょうか。

また、USB-RS232C変換ケーブルを使うと、DTRで使える電流は増えるものでしょうか?

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

Aベストアンサー

RS/EIA232x規格上、流せる電流の大きい側を制限する項目がある
(ノイズ放出軽減の為立ち上がり・立下り時間を不必要に鋭くしない、
短絡時の危険防止の為の電流制限)ので、
電源としては小さい電力しか取出せません。

数字はうろ覚えで不正確なので、厳密には規格の数字を確認して頂くとして、
大体のイメージとして...

・(DTR 出力の内部抵抗値の規定は存じませんが)電流が 1mA 取り出されると
端子電圧が 1V程度ドロップします。
・相手の内部抵抗は 5kΩ 程度、と想定されてます
・短絡電流が 10mA 程度に制限されています。

以上から、12V出力の時に 5~7mA 取出すと5~7V下がって7~5V程度となり、
レギュレータに与える電圧の下限に、というあたりが限界かと思います。
信号の出力電圧は規格上 +-5~15Vで、最低の 5Vだったりするとまず使えないでしょう。

>また、USB-RS232C変換ケーブルを使うと、DTRで使える電流は増えるものでしょうか?
「RS/EIA232x規格」である以上は増えないでしょう。

よくあったシリアルマウスは、信号線から電源を取って動作しますが、
その電流は 5mA 程度だそうです。

電流をかせぐ為に RTS も併用する手もあります。
単純に結ぶと、もし出力論理が不一致だと短絡しますから、
(といっても電流制限されるはずですが)
ダイオードで逆流防止した上で結ぶといいです。

が、
>ICの消費電流が100mAなので、
100mAには遠く及びません。

RS/EIA232x規格上、流せる電流の大きい側を制限する項目がある
(ノイズ放出軽減の為立ち上がり・立下り時間を不必要に鋭くしない、
短絡時の危険防止の為の電流制限)ので、
電源としては小さい電力しか取出せません。

数字はうろ覚えで不正確なので、厳密には規格の数字を確認して頂くとして、
大体のイメージとして...

・(DTR 出力の内部抵抗値の規定は存じませんが)電流が 1mA 取り出されると
端子電圧が 1V程度ドロップします。
・相手の内部抵抗は 5kΩ 程度、と想定されてます
・短絡電流が 10mA 程度に制限...続きを読む

Qバイナリデータの書き換え

はじめまして、今回分からない点があり投稿させていただきました。
http://www.vector.co.jp/soft/win95/util/se079072.html

上記ののバイナリエディタの機能の一つにある
『指定した文字列』を『任意の文字列』に置換する方法を教えていただけませんか?

私が出来てる部分は、ファイルを16進数で読み込み置換するまです。

これをファイルとして出力する方法がわかりません。
ご教授お願いします。

Aベストアンサー

>最後に質問なんですが、このプログラムは、上、中、下
>で言うとどれくらいのレベルですか?

バイナリデータを扱うという点では「中」くらいですね。

ファイル操作については、普通はまずテキストデータを扱うところから始めます。メモ帳等で開いて自分で簡単に中身を確認できますからね。
で、.NETなら本当はここで文字コードについて理解が必要になってきますんで。


人気Q&Aランキング

おすすめ情報