シリアル通信のデータ取得 – プログラミング – Home

シリアル通信のデータ取得
 
通知
すべてクリア

[解決済] シリアル通信のデータ取得


輝宗
 輝宗
(@輝宗)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

 VC++のシリアル通信で取得したデータを数値データとして使いたいのですがどうしたらよい
のでしょうか?ちなみに現在のプログラムは以下のとおりです。

                    /上記略/
DCB dcb;
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = EVENPARITY;
dcb.fParity = TRUE;
dcb.StopBits = ONESTOPBIT;
SetCommState(hComm, &dcb); /* DCB を設定 */

DWORD dwErrors;
COMSTAT ComStat;
DWORD dwCount;
char ReadBuffer[10];
char *pszBuf=ReadBuffer;
DWORD dwRead;

ClearCommError(hComm, &dwErrors, &ComStat);
dwCount=ComStat.cbInQue;

ReadFile(hComm, pszBuf, 10, &dwRead, NULL);
getchar();
     CloseHandle(hComm);


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ReadBufferが取得したデータですか?

取得したデータの中身がどうなっているか分からないと、
どう扱ってよいかも分かりません。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

数値データ等の前に、どのような電文を受信するのかを書いておかないと
他の人にはわからないと思います。

例えば、10バイトのデータを受信し、これがアスキーコードとして、
INT、又は、FLOATに変換する等

又、通信を行う場合は、異常処理を含めてプロトコルを決めておく必要が
ありますが、どのようなプロトコルなのですか?


返信引用
輝宗
 輝宗
(@輝宗)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

 PICから出力した2バイトの数値データをVC++で数値として入力することを望んでいま
す。また以下の部分はこのままでよいのでしょうか?
char ReadBuffer[10];
char *pszBuf=ReadBuffer;


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

2バイトの数値データといってもいくつも考えられます。

1) 数値を2桁の文字列表記
2) 下位バイト、上位バイトの順に並べた2進表現(リトルエンディアン)
符号付き、符号なしの2パターンあります。
3) 上位バイト、下位バイトの順に並べた2進表現(ビッグエンディアン)
符号付き、符号なしの2パターンあります。
4) その他あまり一般的でない表現方法

1)なら 2文字ずつ切り出してatoi()で変換してください。
2)の符号付きなら、
short* nums = (short*)ReadBuffer;
とすれば、そのまま数値配列として参照できます。
符号なしなら unsigned shortを使ってください。
3)なら、例えば最初の2バイトについては、
int num = ((unsigned char)ReadBuffer[0]<<8)|(unsigned char)ReadBuffer[1];

とこのように、状況によっていろいろ変わりますので、
外部とデータをやり取りするプログラムに関わるのであれば、
その構造をしっかり意識しておくべきです。
(データを送る側と受ける側で勘違いがあって後々問題になったりしますし:-)


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

2バイトのデータですが、受信タイミングをはかるためせめてSTX、ETX
ぐらいのプロトコルぐらいは作っておかないと、受信するタイミングで、上位
データか下位データかの判断ができなくなるので注意が必要です。
[STX(02h)]+データ部+[ETX(03h)]


返信引用
輝宗
 輝宗
(@輝宗)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

返事が遅れてすみません。何とか問題が解決できました。

dairygoodsさん、アイススケーターさん
いろいろとアドバイスありがとうございました。


返信引用
輝宗
 輝宗
(@輝宗)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

みなさん、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました