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

シリアル通信のstxとetxの設定
 
通知
すべてクリア

[解決済] シリアル通信のstxとetxの設定


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

VisualStudio2005 CLR Windows フォームアプリケーションです。

下記のとおりString型でシリアルポートに書き込んで
いますが、stxとetxの書き込み方がわかりません。
どなたか教えてください。

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);


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

SerialPort.Write メソッド (Byte[], Int32, Int32)
http://msdn2.microsoft.com/ja-jp/library/ms143551(VS.80).aspx
を使えばよいのでは?

array<Byte>^ stx = {0x02};
this->serialPort1->Write(stx, 0, stx->Length);

>String^ a =safe_cast<String^>(split->GetValue(csv));
って単に
String^ a = split[csv];
ではだめなんでしょうか?

もっとも
>a+b+c
の値を取得するなら、String::Joinを使うとか、
そもそも、,を"に置換するだけのString::Replaceでよいかと。


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

STX/ETX を使う、というのはプロトコルレベルの話になると思うのだが
UNICODE/UTF16 の STX (U+0002) と、
ASCII の STX (H'02) と、
どちらを使うのが適切なのかは相手機器次第のような気がする
# 俺は UNICODE な STX (U+0002) をしゃべる機器は見たこと無い
エンコーディングには十分気をつける必要がある

自作ソフト間で話し合うだけなら STX など使う必要ないに1票


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

発言ありがとうございます。
仕様としてASCIIのSTXが指定されています。
参考にさせていただきます。

追加質問ですが、
シリアルデータ送信時にチェックサムも指定されており、
String型の a+b+c のバイト数を求める方法についても
アドバイスください。
お願いいたします。


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

上記も含め解決できました。
ありがとうございました。


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

>String型の a+b+c のバイト数を求める方法についても
バイト数?
Unicodeなら文字数*2で取得できますよ。
Shift_JISでならEncodingクラスを使って取得すればいいです。
http://msdn2.microsoft.com/ja-jp/library/w3739zdy(VS.80).aspx


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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