シリアル通信バイナリー変換とは?データの送信方法について解説

このQ&Aのポイント
  • シリアル通信において、バイナリー変換を行う必要があります。テラターム上でCtrl+kを押すことで入力送信モードに入ることができますが、バイナリーでキー「Ctrl」と「k」を送信しても入力送信モードには入れません。バイナリーで送信するデータは、テラタームでの「Ctrl+k」の情報とは異なるものです。
  • キー「Ctrl」と「k」を単純にバイナリーで送信しても入力送信モードに入れない理由は、バイナリーでのデータ送信は単純な文字列の送信ではなく、コマンドの送信になるためです。具体的にどのデータがどのコマンドに対応するのかについては、機器の仕様書やマニュアルを参照する必要があります。
  • バイナリーでのデータ送信には、特定のビットパターンや制御文字を使用することがあります。これらは通信する機器の仕様によって異なる場合がありますので、機器の仕様書やマニュアルを確認することが重要です。バイナリーでのデータ送信に関しては、専門的な知識や理解が必要となるため、適切な情報源を参考にすることをおすすめします。
回答を見る
  • ベストアンサー

シリアル通信バイナリー変換

機器とのシリアル通信をテラタームで行っています。 この機器の入力送信モードに入るためには、テラターム上でCtrl+kを押す必要があります。 このとき、機器へはどのようなデータがおくられているのでしょうか? テラタームを使わずに送信しようとしています。そこで、キー「Ctrl」「k」をバイナリーで送信してみましたが、入力送信モードにはいることができませんでした。バイナリーでの送信は、単純に「Ctrl」「k」を順に送っているだけで、テラタームで「Ctrl+k」を押したとき送信される情報とは違っているのではと推測しています。ただそのバイナリー情報は何にあたるのかがわからないでいます。ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.1

[CNTL]+英字 はAから順に01h~の1バイト文字が送られていたと思います。 [CNTL]+[K] では 0Bh - VT が送られると思います。 参考1 http://e-words.jp/p/r-ascii.html 参考2 http://d.hatena.ne.jp/shin_q/20110722/1311309277

unserious
質問者

お礼

ありがとうございます。 ばっちりできました! また質問の際にはよろしくお願いいたします。

関連するQ&A

  • バイナリ通信

    ど素人の質問ですが、お助け下さい。 FTPでのデータ送信とバイナリ通信の違いをご教授下さい。 また、バイナリ通信を行うために必要なもの、設定、相手側の設定等必要なことがあればご教授下さい。

  • Arduino シリアル通信でのバイナリ受信

    詳しい方教えてください。 送信元のPCから、受信側のArduinoへ、シリアル通信によってバイナリデータを送ることで、Arduino側でのサーボモータのシリアル駆動を試みています。 PC側からのバイナリデータ送信はVB.NET側で作成済みで、USB-TTLコンバータ(FTDI Basic Breakout 5V)を使ってのサーボモータのシリアル駆動は問題ありません。 (http://micono.cocolog-nifty.com/blog/2011/04/arduino11-17d5.html と同じ処理と思ってください。) 同様な処理を、PC-Arduinoで駆動させようと思っていますが、 void loop() { int c; if (Serial.available() > 0){ c = Serial.read(); ・・・・ こちらでは、Cの値がint型の為かうまくいきません。(キャストも試しましたが・・) そもそも1バイトデータの受信Serial.read()が、int型(2バイト)なのか判りません。 方法はありますでしょうか。

  • シリアル通信プログラミングでのバイナリデータ送信

    UNIX系環境(IRIX)でのシリアル通信プログラムを作成していて、 バイナリデータの送信方法がわからず困っています。 write関数を使い、テキストデータの送信は出来ます。 write(fd,"テキスト",byte)のように。 ただ、今回はバイナリデータ送信を考えており、 例えば1byteのデータ00000001(01H)を送りたいと思っています。 このデータを送る場合、write関数で実現出来るのでしょうか? write(fd,0x01,1)←イメージです。 色々ネットで調べても出てきません。 開発がWindows環境ではないので、API関数が使えない状況で困っています(MsComm等が使えない)。また、fwrite関数は使用してはいけないみたいです。教えてください。宜しくお願いします。

  • ASCIIとバイナリの相互変換がしたい

    アスキーで入力されたバイナリを、ソケットで送信するというものと書きたいのですが・・・。 具体的には、ファイルに 0x414243 と書いてあって、これを ABC という文字列でsocket通信で送りたいのです。 (これで、バイナリレベルでは414243が送れるはず) socketの部分はできているのですが、変換でつまずいています。 まず、配列 @temp を用意して、41 42 43を順にpushしました。で、次にこれをABCに直してソケットの送信関数に渡せばいいのですが、どうやってもABCになってくれません。 pack("C*","0x41","0x42","0x43") とやれば、ABCが出てきますが、 pack("C*",@temp) では当然のようにダメ。 "0x41""0x42""0x43"を順に@tempに入れましたが、これも失敗。 Perlの16進表現はよくわからないのですが、どうしたらいいのでしょうか。

    • ベストアンサー
    • Perl
  • バイナリファイルの通信について

    Webシステムの開発を検討しています。 サーバはJavaで開発し、クライアントはIEなどのWebブラウザではなく、VBのクライアントアプリケーションで構築しようと考えいます。 その際、問題となっている事は、バイナリファイルの通信方法です。 例えば、クライアントが起動した際にサーバからイメージファイルを送信する方法など。 バイナリファイルをテキスト文字列に変換して送信することはできると思うのですが、他には、クライアントとサーバで言語が異なる場合、一般にどのようなバイナリファイルの送信方法があるのか、色々比較した上で決めたいと思っています。 色々な送信方法や、参考Webサイトなど、ご存知の方がいらっしゃいましたらご教授願います。

  • PCと機器のシリアル通信について

    現在、PCとある機器でシリアル通信を行うための プログラムを作成しています。 開発環境はVisual C++ 2008 Express Editionで、 serialportクラスを使って作成しています。 その機器のマニュアルには、 PCからENQを送信する前に機器からPCに対して DRチェック(通信可チェック) という記述がありました。 これはRS232Cケーブルをつなげば、 自動でやってくれるものなのでしょうか? それともPC、あるいは機器側で何かしなければならないのでしょうか? わかる方、ご教授お願いします。

  • シリアル通信でのバイナリデータの送受信方法

    visual studio 2008 c++ を用いて 0x00~0xFFの任意のバイトをシリアル通信で送受信するプログラムを書いています。 0x00(NUL)を含んだ文字列は、文字列処理関数では処理出来ないので、以下のようにプラグラムを書くと文字列の最後を示すのに NULL を使っている処理系なので、文字列として読み込みをしているため,NULLで止まってしまいます。 -------------------------------------------------------- 略 DWORD dwWritten; char sendBuf[32]={0}; sendBuf[0] = 0x02; //02 STX sendBuf[1] = 0x00; //00 長 sendBuf[2] = 0xC0; //C0 取得コマンド sendBuf[3] = 0x10; //10 取得コマンド sendBuf[4] = 0x03; //03 ETX sendBuf[5] = 0xD0; //D0 Sum WriteFile(hComm, sendBuf, 6, &dwWritten, NULL); //hComm 指定ポート, 略 -------------------------------------------------------- そこで,送信データをバイナリデータとして扱う関数を使う必要があると思います。 ただ,いろいろ調べたのですが,バイナリデータとして読み書きする関数が分からず困っています。 そのため,バイナリデータとして扱う関数とその使用例を教えていただきたいです。 プログラム初心者のため,問題解決のために必要なコードや情報が不足していることがあるかと思います。 その際にはご指摘いただきたいと思います。

  • C++Builder6.0でのシリアル通信

    つい先日より、C++Borland6.0を用いて、シリアル通信で外部機器とのやりとりを行なえるものを作成することになりました。 これまで、VBでのシリアル通信は行なったことがあるのですが…同様に考えていたのですがC言語が初心者なためまったくと言っていいほど今回のものはわかりません。 そこで、色々なサイトを探した結果、文字数&送信文字を限定すれば送信でき、受信バイト数を限定すればできるものが出来上がりました。(サイトのものをほぼそのまま活用している感じですけど) しかし、 1、ボタン1を押すと「Edit1に書かれているものに<CR><LF>を加えたものを送信したい」 2、ボタン2を押すと「Edit2に書かれているものに<CR><LF>を加えたものを送信したい」(1と2は、送信バイト数が違うため、送信バイト数で引っかかる) 3、「受信文字数は、受信バイト数を指定ではなく全てを受信したい」 4、「受信したものを<CR><LF>で分けたい」 などになるとさっぱりできません。 「?Ver<CR><LF>」と送ると「*.**<CR><LF>」と外部機器から返ってきて、 「?PARAMETER<CR><LF>」と送ると「PARAMETER 1=***<CR><LF>PARAMETER 2=***<CR><LF>PARAMETER 3=***<CR><LF>OK<LF>」と外部機器から返ってくるとします。 現在のソースは回答1,2に書きます。ボタン1を押すと送信され、受信されたものをメモに加えられるというものになっています。 これを、上に書かれているような4つの機能を加えたものにしたいのですが…。 (?PARAMETERに関しては送信文字数が合わずにできなかったため、ソースに記入しておりません。また、通信設定に関しては省略しております) ご教授くださる方おりましたらよろしくお願いします。

  • Word2002で文字が変換できない。

    お世話になります。 Word2002を使っています。 ナチュラルインプットだと、正常に入力できるのですが、 IMEスタンダードだと、1つのキーを打って、すぐに確定されます。 例:「あ」を打ちたくて、「A」キーを打つと「あ」と入力される   「か」を打ちたくて、「k」「A」を打つと「kあ」と入力される [Enter]キーも押された状態になっていません。 また、Ctrl押しながらWordを起動しセーフモードにすると、正常に入力できます。 通常起動するともとに戻ります。 直前に「"Windows" update」を行いましたが、それと関連しているのでしょうか。 とても困っています。 お詳しい方、ぜひご教授ください。<(_ _)>

  • Arduino互換機によるシリアル通信機機器制御

    Arduino互換、Japaninoでシリアル通信による蛍光表示管(VFD)モジュールの制御を行いたいのですが、どうすればいいでしょうか。 蛍光表示管(VFD)モジュールはFUTABA製のGP-1150Aという製品で、PCとはRS-232Cのシリアル通信にて制御できます。 例えば、 HyperTerminalで、あいうえおと入力すれば、VFDに「あいうえお」と表示され、 ESCを押して、[2J(消去コマンド)を入力すれば、モジュールがコマンドと認識して、画面が消去されます。 また、バイナリ形式で上記コマンドを16進に置き換えた、1B5B324Aというバイナリデータを送信しても画面を消すことが出来ます。 今、分かっていること ・VFDモジュールはPCとシリアル通信にて制御が出来る ・バイナリエディタで、コマンド+日本語データを作り、バイナリデータを送ればVFDモジュールを意のままに操作できる。 ・Japaninoと、VFDモジュールは、そのままでは通信が出来ない。 ・JapaninoとVFDモジュールの通信には、MAX232互換チップ等のレベル変換ICが必要 分からないこと ・どのようにJapaninoとMAX232を接続すればよいか ・スケッチをどのように書けば、バイナリデータを送ることが出来るのか。 ・Japanino上に設置されたボタン or 追加したボタンを押すことにより、データがVFD側に送られるようにする。 です。 アドバイス等、頂ければ幸いです。 どうぞよろしくお願いします。