![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在仕事で、組み込み系のシステム開発をしております。今回、私が作ったシステムではないのですが通信のテストを頼まれました。内容は
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バイトと認識していないのでしょうか?
クロスケーブルやポートに間違いはありません。
送信データ自体に問題があるような、、、。
何か私自身大きな勘違いをしているようなきはするのですが、具体的にどうなおしたらいいのかわかりません。どなたかおわかりになる方おいででしたらご教授お願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?5a7ff87)
No.6ベストアンサー
- 回答日時:
通信の諸条件があっているとしたら、
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 とか、他のデータにしてみることをお勧めします。
ありがとうございました。
結局ハードに問題があったみたいです。
送信データは
"\xFF\x03\x00\x00\x00\x00\x00 ~ \x00\x00\x00\x00\xFF"
を採用させていただきました。
通信テストは結局あいまいにおわってしまいましたが、とても勉強になりました。
まことに理想的な回答で助かりました。
お休みのところありがとうございました。
No.7
- 回答日時:
バイナリデータでなく文字列を送っているようですね。
#5の補足にあるように、
cBinary[0] = 0xFF
の形が正解です。
あと、105byteですから最後は
cBinary[104] = 0xFF
です。
それとやはり結線を確認する必要もあると思います。
通常RS232Cで接続するようなものはストレートです。
簡単に言えば、パソコンと周辺機器(例えばモデム)をつなぐためのもので通常はストレート、パソコン同士をつなぐ場合は本来の用途から外れる結線なのでクロスとなります。
Ethernetでストレート、クロスを使う場合と同じですね。
その機器がパソコンに相当する場合はクロスになりますが。
専用のケーブルなら大丈夫かも知れませんが、初めてのテストなら当然ケーブルの結線ミスで失敗している可能性もありえます(経験有り)。
あと通信条件もビット長、パリティ、ソフトフロー制御、ハードフロー制御等の条件も一致させる必要があります。
それと、送るデータが正しくても相手がきちんと動いていない可能性も当然あるわけですよね。
この場合「何の反応もありません」を結果にするしかなさそうですね。
まあ、いくつかのパターンのデータで実行するぐらいはしたほうがいいでしょうけど、データフォーマット等の仕様がわからないとねぇ。
>cBinary[0] = 0xFF
>の形が正解です。
これで自身がもてました。
結局通信テストはあいまいに終わってしまいましたがとても勉強になりました。
お休みのところありがとうございました。
感謝です!!
No.5
- 回答日時:
助言としては、
バイナリで送れといわれているのに
「という”文字列”を入れて送信しました。」
はないでしょう。
まぁ表現の間違いで、ほんとにバイナリで送っているのかもしれませんが。
>"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"が送られてきました。
受信したんですよね?この時点で、通信がまともに
できているので、仕事は完了してると思いますよ。
それ以上は上司も望んでないことだし、
もう盆休みにしましょう(^^)
この回答への補足
みなさんお休みのところごめんなさい。
ほかに聞くあてもなくて ( p_q)
よろしくおねがいします!!
>「という”文字列”を入れて送信しました。」
>はないでしょう。
はい。おそらく文字列そのまま送ってると思います。
うすうすここがおかしいかな、、。とは思っていたのですが具体的にどうすればよいのかわからなくて。
受信確認はPCとPCをつないで送受信しただけなので、
PC1で"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"
を送って
PC2で"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"
を受け取る
これでPC1からの送信が確認できたのでPCと機器をつなぎPC1→機器へ
"FF 03 00 00 00 00 00 ~ 00 00 00 00 FF"
を送りました。
反応ありませんでした。
ん?
これはバイナリで送ったとは表現しない?
もしかして
iLen = 0;
for( i = 0 ; i < lstrlen( cBinary ) ; i++ )
{
if( cBinary[i] == '0' )iBuf[iLen++] = 0;
if( cBinary[i] == '1' )iBuf[iLen++] = 1;
if( cBinary[i] == '2' )iBuf[iLen++] = 2;
if( cBinary[i] == '3' )iBuf[iLen++] = 3;
if( cBinary[i] == '4' )iBuf[iLen++] = 4;
if( cBinary[i] == '5' )iBuf[iLen++] = 5;
if( cBinary[i] == '6' )iBuf[iLen++] = 6;
if( cBinary[i] == '7' )iBuf[iLen++] = 7;
if( cBinary[i] == '8' )iBuf[iLen++] = 8;
if( cBinary[i] == '9' )iBuf[iLen++] = 9;
if( cBinary[i] == 'a' )iBuf[iLen++] = 10;
if( cBinary[i] == 'A' )iBuf[iLen++] = 10;
if( cBinary[i] == 'b' )iBuf[iLen++] = 11;
if( cBinary[i] == 'B' )iBuf[iLen++] = 11;
if( cBinary[i] == 'c' )iBuf[iLen++] = 12;
if( cBinary[i] == 'C' )iBuf[iLen++] = 12;
if( cBinary[i] == 'd' )iBuf[iLen++] = 13;
if( cBinary[i] == 'D' )iBuf[iLen++] = 13;
if( cBinary[i] == 'e' )iBuf[iLen++] = 14;
if( cBinary[i] == 'E' )iBuf[iLen++] = 14;
if( cBinary[i] == 'f' )iBuf[iLen++] = 15;
if( cBinary[i] == 'F' )iBuf[iLen++] = 15;
}
こおゆう変換しなきゃいけないのかな?
なにやらおかしな記号に変換されますよね。
この場合'F'、変換すると'■'の半角のやつ
が1バイトですよね?
とゆうことは計210バイト?
あれこれも違うかな?
cBinary[0] = 0xFF
cBinary[1] = 0x03
~
cBinary[104] = 0xFF
cBinary[105] = 0xFF
こうゆうこと?
今ちょっと手元に機器がないのですぐ確認ができないもので。
なにか思い当たる節があれば教えてください。
お願いします。
No.4
- 回答日時:
ボーレート・ストップビット等は合っている前提ですよね。
制御系の機器の場合、単純クロスでは動作しない物がたくさんあります。
(自滅させないといけないとか・接続してはいけないとか)
ピンアサイン・ピン接続方法もわかっている前提ですか?
この回答への補足
んん?
はい。ボーレート・ストップビット等は合っていると思います。念のため色々変えて送っても見ました。
>制御系の機器の場合、単純クロスでは動作しない物がたくさんあります。
>(自滅させないといけないとか・接続してはいけないとか)
>ピンアサイン・ピン接続方法もわかっている前提ですか?
すみません現時点では私には理解不のです。
用意されたクロスケーブルを使っています。
この辺から調べ始めると、、、。
No.3
- 回答日時:
いったい何のテストになるんですかね?
何でもいいわけはありません。
大体バイナリかアスキーかもわからない。
機械相手ならI/Fの仕様書がある筈で
それにそってテストしないと
意味がないです。
この回答への補足
仕様書はバージョンが違うみたいであってないようなものです。古い機器の為。
今更カスタマイズです。
私は上司に
「FF 03 始まりの FF 終わりのデータ105バイトをバイナリで送ってみて、何か反応(エラー反応等)があるから。
とりあえず機器がデータ受け取ってるかどうか確認したいだけだから。テストしといて」
といいはなち、上司はお盆休みに入りました。
連絡もつかず。一人で四苦八苦です。
私も入ったばかりの新人で知識足らずなんですが、、、。
現状はこんなとこです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) 皆さんiPhoneは、機能が少な過ぎますか?? iPhoneには、なぜ僕がAndroid合計3台持ち 2 2022/07/12 19:59
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Android(アンドロイド) iPhoneには、なぜ僕が合計3台持ちしているGalaxy A22やXperiaXZ1、arrows 4 2022/07/12 18:42
- 固定電話・IP電話・FAX 業務用ファックスについて 5 2022/09/28 19:08
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- ヒーター・こたつ・ホットカーペット FF式暖房器などはシーズンオフには片付けますか。 今、ポット式ストーブ(煙突付き)を使ってますが、F 5 2022/11/28 08:18
- Android(アンドロイド) 地上デジタル放送のワンセグ&フルセグに加えてBSやCSなどの衛星放送受信に対応したAndroid機種 3 2022/09/15 18:11
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
エクセルVBA 2千万行のCSVファ...
-
Microsoft VBAで2GBを超えるフ...
-
バイナリエディタのつかいかた
-
EXCEL VBAでテキストファイルの...
-
なぜデータの整合性を確認する...
-
EOF
-
バイナリ表記を表示するコード...
-
ページ読み込み時に自動的にsub...
-
バイナリ表示されたデータを小...
-
入力ファイルをバイナリにする利点
-
fwriteでの書き込み
-
エラー:ストリームの終わりを...
-
バッファサイズについて
-
FMFファイルの構造を知りたいの...
-
テキストデータをバイナリデー...
-
FTPでエクセルをPUTするとファ...
-
エディットボックスの改行について
-
VBA バイナリ―から文字列にす...
-
バイナリーの画像データを読み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
バイナリエディタのつかいかた
-
ページ読み込み時に自動的にsub...
-
VBA バイナリ―から文字列にす...
-
エクセルVBA 2千万行のCSVファ...
-
エラー:ストリームの終わりを...
-
EOF
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
入力ファイルをバイナリにする利点
-
DXFファイル用クラスライブラリ...
-
バイナリーデータの一部データ...
-
C言語とシリアル通信の送受信...
-
C言語の質問です。バイナリ形...
-
Javaでのエンディアン変換
-
24ビットのWaveデータの中身に...
-
bitmap画像の保存がうまくいき...
-
PHPのfgetcsvの処理容量について
おすすめ情報