- PR -

AxMsCommを使用してのバイトデータ(1byte)送信

1
投稿者投稿内容
じゅんじゅん
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-01-20 16:03
現在RS232Cでのマイコンとの通信ソフトをVB.Netにて作成中なのですが、どうやってもうまくいかない箇所があります。
概略としてマイコン側が指定のコマンド(1byteのデータ)を受け取りそれに対してマイコンが指定処理を行うというものなのです。.Net移行前でのVB6.0の時は下記の様なコードで動作させていました。

Private Sub POWER_ON()

Dim bytOutByte() As Byte
Dim strPower_On_Cmd as String

strPower_On_Cmd="83"

bytOutByte() = ChrB(Val("&h" & strPower_On_Cmd))
MSComm1.Output = bytOutByte()

End Sub

しかし、VB.NetではChrB関数が使えないと言う制限もあり試行錯誤した結果
下記の様なコードにたどり着きました。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim strCmd As String
Dim byt() As Byte

strCmd = "83"
byt = System.Text.Encoding.Unicode.GetBytes(ChrW(Val("&H" & strCmd)))

AxMSComm1.Output = byt

End Sub

しかし、ここで問題が発生しました。仕様として1byteのコマンド83を送信したいにも関わらず
送信ラインをモニタすると8300と2byte送出されており、インデックスを指定して
AxMSComm1.Output = byt(0)
とすると"'System.Runtime.InteropServices.COMException' のハンドルされていない例外が axinterop.mscommlib.dll で発生しました。"と言うエラーが出てしまいます。
どなたか1byteのバイトを送出する方法を教えて下さいませんでしょうか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-01-20 16:29
引用:

じゅんじゅんさんの書き込み (2005-01-20 16:03) より:
byt = System.Text.Encoding.Unicode.GetBytes(ChrW(Val("&H" & strCmd)))


Unicodeだからです。Asciiコードにしたいなら↓
byt = System.Text.Encoding.Default.GetBytes(ChrW(Val("&H" & strCmd)))

ついでに言うと、こんな変換を繰り返す必要なんて何処にも無いですよね。
素直に↓じゃ駄目なんですか?
Dim byt(0) As Byte
byt(0) = 83
AxMSComm1.Output = byt


_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/

[ メッセージ編集済み 編集者: mikahosi@abox9.so-ne 編集日時 2005-01-20 16:32 ]
じゅんじゅん
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-01-20 18:14
ありがとうございました。早速試してみましたが、1byteデータは確認出来ました。
しかし、ライン(TxD)を同様にモニタしてみたところ、
byt = System.Text.Encoding.Default.GetBytes(ChrW(Val("&H" & strCmd)))
AxMSComm1.Output = byt は、→ 53(オシロ上は3,5の順)

Dim byt(0) As Byte
byt(0) = 83
AxMSComm1.Output = byt  は、→ 3F((オシロ上は3,Fの順)

が送出されていました。やっぱり、83をそのまま送出させるような事は出来ないの
でしょうか....。
 
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2005-01-20 18:37
byt(0)=val("&H" & strcmd)では。
すなめり
常連さん
会議室デビュー日: 2003/01/29
投稿数: 37
お住まい・勤務地: 横浜
投稿日時: 2005-01-20 18:44
byt(0) = 83
の代わりに
byt(0) = 131

だとどうでしょう?

83と書いてましたけど、送りたいのは16進数ですよね?
10進数の131なら16進で83になります。

(追加)
byt(0) = &H83
でもいいですね。

文字列からの変換が要件であれば駄目ですが。

[ メッセージ編集済み 編集者: すなめり 編集日時 2005-01-20 18:48 ]
じゅんじゅん
会議室デビュー日: 2005/01/20
投稿数: 3
投稿日時: 2005-01-21 07:46
ご返信頂いたみなさまありがとうございます。
byt(0)=131,=val(&h83),=&h83 でうまく送出できました。
本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)