【続き】シリアル通信のstxとetxの設定 – プログラミング – Home

【続き】シリアル通信のstxとetxの...
 
通知
すべてクリア

【続き】シリアル通信のstxとetxの設定

固定ページ 1 / 2

サトウ
 サトウ
(@サトウ)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

またまた申し訳ありませんが、ご教示願います。

先ほどの件で下記のとおり、シリアルを設定すると
書きましたが、

array<String^>^split = str->Split( chars );
String^ a =safe_cast<String^>(split->GetValue(csv));
String^ b =safe_cast<String^>(split->GetValue(csv+1));
String^ c =safe_cast<String^>(split->GetValue(csv+2));
this->serialPort1->Write(a+b+c);

これだと、出力データがアスキーででませんでした。
String型から変換する必要があるのでしょうか。


引用解決済
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

だからエンコーディングに気をつけろと書いたのだが・・・

そもそもシリアルバス上の入出力データをどうやってチェックしてる?
信頼のおけるプロトコルアナライザなどで見ているかい?
測定機器が信頼できること、通信条件等が皆合致していること、を確認のうえ
出力データが何エンコーディングになっているか確認すべし


返信引用
サトウ
 サトウ
(@サトウ)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

出力データについては、専用の測定機器にてモニタしております。
当然通信条件を仕様どおりに設定して。
下記のように記述すると、問題なくAが表示されました。
this->serialPort1->Write(A);
おそらくString型が影響しているのではと。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

だからー
エンコーディングはどうなっているのかと訊いているわけだが
http://msdn2.microsoft.com/ja-jp/library/system.text.encoding.aspx


返信引用
サトウ
 サトウ
(@サトウ)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

エンコーディングは何もしていませんでした。
素人なもので話がかみ合わず申し訳ないです。
ちょっとどうやってエンコーディングしたらいいか
わかりませんが、検討してみます。


返信引用
12345
 12345
(@12345)
ゲスト
結合: 17年前
投稿: 16
 

よくわかりませんが、

array<Byte>^encodedBytes = ascii->GetBytes( csvdatatrans );
this->serialPort1->Write(encodedBytes);

では無理なのでしょうか。コンパイルできませんでした。
ご指摘ください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200708/07080038.txt

2007/08/20(月) 11:17:44
を見てください。


返信引用
12345
 12345
(@12345)
ゲスト
結合: 17年前
投稿: 16
 

参考にして下記のようにしてみましたが、
やはりアスキーで出力してくれませんでした。
String^ csvdata=csv1+csv2+csv3;
array<Byte>^encodedBytes = ascii->GetBytes( csvdata );
this->serialPort1->Write(encodedBytes, 0, encodedBytes->Length);
ほかにまだおかしなところがあるのでしょうか。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>csvdata
って、本当にASCIIコードに変換できる文字列ですか?
日本語(いわゆる全角文字とか半角カタカナ)とか入っていると当然対応するASCIIコード
がないわけですけど。


返信引用
12345
 12345
(@12345)
ゲスト
結合: 17年前
投稿: 16
 

英数字および+-のみのデータです。
下記の取り込みの時点でおかしいのでしょうか。

str = din->ReadToEnd(); //CSVデータ末尾まで読み込み
array<String^>^split = str->Split( chars );
String^ csv1 =safe_cast<String^>(split->GetValue(csv));
String^ csv2 =safe_cast<String^>(split->GetValue(csv+1));
String^ csv3 =safe_cast<String^>(split->GetValue(csv+2));
String^ csvdata=csv1+csv2+csv;


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>下記の取り込みの時点でおかしいのでしょうか。
デバッガを使うなりMessageBoxを使うなりして確認してみては?

CSVファイルのエンコードも絡んでいるっぽいけど。

それと
>String^ csv1 =safe_cast<String^>(split->GetValue(csv));
という使い方をサトウさん以外にも記述しているんですね。
一般的な書き方ではないと思います。キャスト等あまり意味ない処理が走るので
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200708/07080038.txt

2007/08/20(月) 11:17:44
で書いてあるようにインデグサを使ったほうが見やすいしわかりやすいでしょう。


返信引用
12345
 12345
(@12345)
ゲスト
結合: 17年前
投稿: 16
 

ありがとうございます。
キャスト等は修正しました。

依然としてASCIIにはできません。
2007/08/21(火) 11:20:37に記載したコードのcsvdataは
Unicodeではないのでしょうか。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>Unicodeではないのでしょうか。
ファイルの中身のエンコードなんてあなたかサトウさんしかわかりませんよ。
String型に代入した時点ではUnicodeで保持します。

>デバッガを使うなりMessageBoxを使うなりして確認してみては?
はどのようになったのでしょうか?


返信引用
12345
 12345
(@12345)
ゲスト
結合: 17年前
投稿: 16
 

リストボックスで csvdata を見ると、
元データとおりのデータ値になっていました。

this->listBox1->Items->Add(csvdata);

やはりASCII変換で変わっているような気がします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>ASCII変換で変わっているような気がします。
では変換した配列の値を確認してみては?

ASCIIコード表
http://rararahp.cool.ne.jp/vc/ascii.htm

サトウさんは何も絡んでこないけどどうしちゃったんだろうか。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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