以下のようなハード環境とプログラムで、マイコンの変数値をPCへ取り込む環境(データロガー)を実現しております。ただし、更にデータの取り込み速度を向上させたく考えておりますが、その手段として、”バイナリー形式”での通信が適用できると情報を得ておりますが、具体的な手法が不明です。よろしくご教授をお願いします。
<環境>
・H8マイコン
・RS-232CでPCと接続
・PCでのデータ取得は、ハイパーターミナルを利用
<プログラム>
(1)送信する部分
H8のSCI3を利用して、1文字ずつ送信
以下具体的に作成したプログラムです
void sci3_tx(char data){
while (SCI3.SSR.BIT.TDRE==0);
SCI3.TDR=data;
}
(2)実際の送信
"1234"(←千二百三十四)と"3456"(←三千四百五十六)というデータを連続して送信したい場合には、
sci3_tx(1+48);
sci3_tx(2+48);
sci3_tx(3+48);
sci3_tx(4+48);
sci3_tx('\r');
sci3_tx('\n');
sci3_tx(3+48);
sci3_tx(4+48);
sci3_tx(5+48);
sci3_tx(6+48);
sci3_tx('\r');
sci3_tx('\n');
と処理し、ハイパーターミナルでデータを保存して、"1234"と"3456"を取り出しています。
<ご質問の詳細>
(1) 上記のように2つの数値をバイナリー形式で送信するためには、どのように実施したらよいのでしょうか? 例えば、バイナリーの場合2の8乗であるので、 1234を送信する場合、255+255+255+255+214で、11111111、11111111、11111111、11111111、 11010110と送信して、加算処理をすればよろしいでしょうか? (→255を11111111と送信するプログラムもいまいち不明ですが)
(2)バイナリー形式で送信する際の送信始め/終わりの区切りはどのように考えたらよろしいでしょうか?
(3)バイナリー形式を受信できるソフト(ハイパーターミナルに対応するもの)は、何になりますでしょうか?
以上、いくつかのご質問をさせていただきましたが、参考となる情報(Web、書籍)がありましたら、合せてご紹介をお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>”バイナリー形式”での通信が適用できると情報を得ております
>(1) 上記のように2つの数値をバイナリー形式で送信するためには、どのように実施したらよいのでしょうか?
0~65535のデータは、2バイトで表わせます。
例えば
0=0×256+0
255=0×256+255
256=1×256+0
511=1×256+255
512=2×256+0
|
65535=255×256+255
となります。
つまり「256で割った商」と「256で割った余り」の2バイトにすれば、0~65535の値は「常に2バイト」で済みます。
1234を送るなら
sci3_tx(1234 / 256);
sci3_tx(1234 % 256);
で、3456を送るなら
sci3_tx(3456 / 256);
sci3_tx(3456 % 256);
で済みます。
ただし、このままだと「制御コードとして、特殊な意味がある文字」もデータとして送信してしまうので、送信側で制御コードを送らないように特殊処理をしないとなりません。
例えば
void sci3_tx(char data){
if ((data < 0x20) || (data == 0x5e)) {
while (SCI3.SSR.BIT.TDRE==0);
SCI3.TDR=0x5e;
if (data < 0x20)
data += 0x40;
else
data += 0x20;
}
while (SCI3.SSR.BIT.TDRE==0);
SCI3.TDR=data;
}
など。
こうすると、制御コードは以下のような2文字の通常文字に変換され
0x00⇒^@
0x01⇒^A
0x02⇒^B
|
0x1A⇒^Z
0x1B⇒^[
|
0x1E⇒^^
0x1F⇒^_
^⇒^~
と送られるので、送信データ中に制御コードは出て来ません。
もちろん、受信側では「この逆の処理」をしないと、元のデータに戻りません。
但し、通信は「8ビットデータを送れるもの」でなければなりません。
>(2)バイナリー形式で送信する際の送信始め/終わりの区切りはどのように考えたらよろしいでしょうか?
バイナリー形式では「データ中に、すべての文字が現れる可能性がある」ので「受け取った1バイトが、データなのか区切りなのか判らない」です。
つまり、データに始めも終わりもありません。
なので「独自に、送信側と受信側で、データの始めと終りを何にするかの取り決め」をして下さい。
>(3)バイナリー形式を受信できるソフト(ハイパーターミナルに対応するもの)は、何になりますでしょうか?
出来合いの物はありません。自作する必要があります。
「バイナリーデータは、こう送ります」との、独自の約束事(前述の、制御コードを普通の文字2文字に変換する処理とか、データの始めと終りを何にするかの取り決めなどの事)を決めたのであれば、その「約束事」に添った受信プログラムが必要になります。
「約束事は自分で決めた」のですから、その「自分だけの約束事」に添った受信をするプログラムは自作するしかありません。
パソコンで受信プログラムを自作するのは難しいでしょうから、データをハイパーターミナルで受信して、ログをファイルに保存してください。
保存したログファイルを読み込んで、元のデータに戻して、数字を読める状態で表示するだけのプログラムなら、そう難しくはない筈です。
No.1
- 回答日時:
一つの方法はテキストにエンコードする。
現在Webで使ってる Base64ではなく 16進数にして一行 40バイト分くらいづつ送る。
TCP/IPと違って転送に信頼性が無いから
checksum CRC等入れると良い。
具体的には
http://www.starlet.co.jp/column/hexfile.htm
XMODEMを使う。
簡単なバイナリ-転送のプロトコルがあります。
エラーリトライをするので転送成功率が上がります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オープンアプリの 通信許可の...
-
マイコンを用いたバイナリー形...
-
Javaプログラム同士のプロセス...
-
comThread を、COM1のみで送受...
-
Connectエラーが出てしまう・・...
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
C# シリアル通信でデータ受信...
-
UWSCがうまく動かない
-
このレジの並び方は間違ってま...
-
マージャンのゲームを作りたい...
-
プロセス終了の検知について
-
VBA kernel32 の意味
-
Arduinoのプログラムで質問です。
-
家電製品の電力周波数を変える機械
-
isoをimgに変換したいのですが...
-
c++からfortranの関数を呼び出す
-
Mac 乗数の入力方法
-
clock関数は正確じゃないの?
-
N88BASICのバイナリデータをテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
VB6のwinsockでconnectできない
-
UDP通信におけるbind関数について
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
ソケットでクライアントのipア...
-
Connectエラーが出てしまう・・...
-
recv関数でフリーズしてしまう
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
同じLAN内パソコンのIPアドレス...
-
Winsockを使わずにVBでSocketを...
-
ソケットを用いた1対多通信につ...
-
ソケット通信 同じポート番号...
-
相手のIPアドレスを取得する方法
-
CreateFile関数でCOMポートが開...
-
送信したデータの一部が文字化...
おすすめ情報