VB2008でシリアル通信をしたいと思っております。
MSDNにてSerialPortコントロールを使った例が解説されており、
http://msdn.microsoft.com/ja-jp/library/cc720852 …
それを利用して基本的な送信/受信ができることは確認しました。
次に受信データにより処理を仕分けたい、
例えば、エラーコードが帰ってきたらエラー用の処理、
正常なリターンがあれば正常処理のような動作を実装したい場合は、
どうすれば良いでしょうか。
アドバイスいただけますと助かります。
よろしくお願いいたします。

A 回答 (1件)

正常系と異常系で処理を分岐させればいいんじゃないかと。



何がわからないのかいまいち理解できず。

まさかif文とかcase文がわからないとかじゃないですよね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシリアル通信無線化

シリアル通信の無線にはどんな方法があるのでしょうか?Bluetoothでシリアル通信くらいなのでしょうか。また、Wi-Fi(無線LAN)でシリアル通信はできるのでしょうか。私はネットワーク初心者なので、そもそもなにかを勘違いしているかもしれません。親身になってくれる方教えてください。

Aベストアンサー

なんで無線の話なのにケーブルのカテゴリなの?

QMSDN Subscriptions Libraryとは?

MSDN Subscriptions Libraryと通常のMSDN Libraryは
いったいどこが違うのですか?
MSDN Subscriptions LibraryというCD、DVDを
ネットでよく見かけますが、それをインストールすると
どんなメリットがあるのですか?
ちなみにMSDN Libraryは開発用のヘルプですよね。
よろしくお願い致します。

Aベストアンサー

ここで言っている MSDN Library とは開発ツールを導入した時にインストールするモノのことですかね。
MSDN Subscriptions Library てのは MSDN Subscriptions の会員向けに定期的に提供される MSDN Library です。
つど内容が変更・追加されます。
上書き的にインストールするか並行(追加)インストールするか選べたような気がします。(インストールしてない・・・)

QopenFrameworks-複数台Arduino間のシリアル通信

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観ると,ofSerialクラスのドキュメントには
”the ofSerial class can attempt to communicate with the first available device it finds.”
とありますが,これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,
という意味なのでしょうか?
また,もしそうならば,openFrameworks上から複数台のシリアルデバイスと通信する方法はあるのでしょうか?

プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います.
よろしくお願いいたします.

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観る...続きを読む

Aベストアンサー

>これを実行すると
>ofSerial: listing devices (0 total)
>という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.

こちらについてだけ…

>VisualStudio2008 ExpressEdition
とのことですが、プロジェクトの文字セットは何になっていますか?
of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。
# ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。

上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。
という可能性はありませんか?

QSerialPort処理でInvokeメソッドを使用するとエラーが発生。

はじめまして。こんばんわ。
同一プロジェクトの複数のフォームから、RS232C接続処理を行っております。
まったく同じ処理内容なので、クラスを使用しようとしております。
しかし、データ受信時、Invokeメソッドを使用して、各フォームのイベントをCALLしますと、『InvalidOperationException』が発生し、『ウィンドウ ハンドルが作成される前、コントロールで Invoke または BeginInvoke を呼び出せません。』というエラーメッセージが表示されてしまいます。

ソースを下記に記載いたします。どなたか、原因・対処方法がわかる方がいらっしゃいましたら、御手数をおかけいたしますが、ご教示の程、よろしくお願い申し上げます。


==============================
呼び出し元フォーム
==============================
Public Class Form1

  Private cls232CIns As cls232C

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

    cls232CIns.openport()

  End Sub

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    cls232CIns = New cls232C()

  End Sub

  Public Sub DispData(ByVal data As String)

    TextBox1.Text = data

  End Sub

End Class


==============================
SerialPort通信クラス
==============================
Imports System.IO.Ports

Public Class cls232C

  WithEvents SP1 As SerialPort
  Delegate Sub RecvDataDisp(ByVal dataR As String)

  Public Sub New()

    SP1 = New SerialPort("COM6", 9600)

  End Sub

  Public Sub openport()

    SP1.Open()

  End Sub

  Public Sub closeport()

    SP1.Close()

  End Sub

  Public Sub ReceiveData(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP1.DataReceived

    Dim getdata As String

    getdata = SP1.ReadLine
    Form1.Invoke(New RecvDataDisp(AddressOf Form1.DispData), getdata) ←ここでエラー発生

  End Sub

End Class
 

はじめまして。こんばんわ。
同一プロジェクトの複数のフォームから、RS232C接続処理を行っております。
まったく同じ処理内容なので、クラスを使用しようとしております。
しかし、データ受信時、Invokeメソッドを使用して、各フォームのイベントをCALLしますと、『InvalidOperationException』が発生し、『ウィンドウ ハンドルが作成される前、コントロールで Invoke または BeginInvoke を呼び出せません。』というエラーメッセージが表示されてしまいます。

ソースを下記に記載いたします。どなたか、原...続きを読む

Aベストアンサー

ReceiveData()では、「Form1」という暗黙のインスタンスが参照されています。
同一プロジェクトの複数のフォームから、とありますので
例えばForm1のインスタンスが無い状態でForm2上のcls232Cが機能した場合、
Form1.DispDataという関数のアドレスはForm1のインスタンスが無いので存在しないことになります。

(暗黙のインスタンスを利用して)特定のフォームを指すというクラスの設計がそもそもおかしいですよね。
「Form1」が必ず無いとcls232Cは動作しませんからね。
まずは暗黙のインスタンスを排除する必要があると思います。
例えば、Form_Loadでは
cls232CIns = New cls232C(Me)
とし、クラスでは
Private m_Form As Form
Public Sub New(oForm As Form)
SP1 = New SerialPort("COM6", 9600)
m_Form = oForm
End Sub

Invokeメソッドは
m_Form.Invoke(New RecvDataDisp(AddressOf m_Form.DispData), getdata)

とすればいいです。要は、呼び出し元のフォームを教えてあげ、Invokeするのも呼び出し元のFormに限定するわけです。
ただ、これは呼び出すフォームは必ずDispData()の実装を(訳もなく)強いられるという点など、マイナス点の多い実装です。

私ならこうします。

Imports System.IO.Ports

Public Class cls232C

Public Event Received(ByVal getdata As String)
WithEvents SP1 As SerialPort
’~略~
Public Sub ReceiveData(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP1.DataReceived
Dim getdata As String
getdata = SP1.ReadLine
RaiseEvent Received(getdata)
End Sub
こうするとForm上のcls232CにはReceivedというイベントが出来ているはずです。

Private Sub cls232CIns_Received(ByVal getdata As String) Handles cls232CIns.Received
TextBox1.Text = getdata
End Sub

ReceiveData()では、「Form1」という暗黙のインスタンスが参照されています。
同一プロジェクトの複数のフォームから、とありますので
例えばForm1のインスタンスが無い状態でForm2上のcls232Cが機能した場合、
Form1.DispDataという関数のアドレスはForm1のインスタンスが無いので存在しないことになります。

(暗黙のインスタンスを利用して)特定のフォームを指すというクラスの設計がそもそもおかしいですよね。
「Form1」が必ず無いとcls232Cは動作しませんからね。
まずは暗黙のインスタンスを排除...続きを読む

QPC同士、LANでシリアル通信

PC2台をストレートLANケーブルで接続し、シリアル通信することは可能でしょうか?もし可能でしたらその手順をご教授願います。
VC++でシリアル通信のアプリケーションを作成しており、その動作確認のできる環境を構築したいのです。上記の他にローコストで良い方法があればそれでも構いません。 お願いいたします。

Aベストアンサー

たぶん「シリアルポートに見えるドライバーを書けば」って話になりますね。

かつてOS/2環境に、Ethernet接続した端末間で、RS-232-C互換の仮想ポートを実現するvmodem(SIOの一部)というドライバーがありました。
シェアウェアのこれを使って、パソコン通信のホスト(Ethernet非対応)を
Internet回線上に乗っけた例があったりしました…
vmodemはOS/2のMultiple Virtual DOS Machine上でも有効だったからKTX/Vから行けた。

そのWindows向け実装の話は聞いたことないので無い気がします。
vmodemというありがちな名前はググっても埓があかないので…


同様の技術は、理論上はありえますが、パソコン通信も廃れきった今
たぶん、そういうドライバーを書く人がいないってことになりますね。

もしかしたら、業務用のシリアル通信ソフト向けに
どこかに存在する可能性はありますが、たぶん高価なのでは…

QMSDNのコレクションがありません。MSDNを再インストールしてください。

現在VisualStudio6を使っております。
VB6を使ってエラーが発生した時に、「OK」「ヘルプ」でヘルプを押すと、
MSDNのコレクションがありません。MSDNを再インストールしてください。
のメッセージが表示されます。

以前1年間 ユニバーサルエディションという高いサービスを1年間だけ受けていたが
今は何もMSDNのサービスを受けていません。

以前送られてきたCDが沢山あるのですが、どういうタイトル(ラベル)のCDをインストールすれば
良いのでしょうか?
最新でないと意味がないと思いますが、代用で使えるものがあるのでしょうか?

Aベストアンサー

MSDNに加入されていたのでしたら、3ヶ月に1度「MSDN Library」と書かれた
CD-ROM(大体2~3枚組)が送られて来ていたと思いますので、
その中からいずれかをインストールするといいでしょう。

ただVBの場合、6.0と.NETとでは別物と言っていいほど大きな違いがありますので、
必ずしも最新版がベストであるとは言い切れません。
もしVB6.0をパッケージで購入されたのでしたら、それに付属している物を
インストールした方がいいかもしれません。

また、MSDNライブラリはWeb上でも見る事ができます。
http://www.microsoft.com/japan/msdn/library/

MSDNライブラリの使い方については以下のページにわかりやすい解説があります。
http://homepage1.nifty.com/rucio/main/dotnet/nyumon/BEGIN8.htm

Qシリアル通信で文字バケ

picを使ってパソコンとのシリアル通信実験してるんですが、通じたり、通じなかったりで
時にはなんだか見たこともない漢字がでてきたりします。

シリアル通信は大体がアスキー文字を送っているわけでアスキーコードにない
わけのわからない漢字、記号がでてくるのはなぜなんですか?

Aベストアンサー

PICとPCとの接続方法と、PICのUSARTの設定と、PC側の使用ソフト&設定を教えて下さい。
ありそうなのは、極性が間違っているか速度が間違っていることです。

> 漢字、記号がでてくるのはなぜなんですか?
ASCII文字は最上位bitが0です。
漢字や記号(の1バイト目)は最上位bitが1です。
シリアル通信は最下位bitから順に送信します。
速度が間違っていると途中のbitを最上位bitと見間違えます。
極性が間違っているとそもそも開始地点がずれますので何が起こっても不思議はありません。

Qテキストボックスの入力可/不可を切り替えた場合のリターンキーでの移動について

VB6でマスタメンテ系のプログラムを作っています。
あるテキストボックスの内容によって、その次のテキストボックスの
入力可/不可を切り替えているのですが、1つ目のテキストボックス
に値を入力してリターンキーで移動すると、次のテキストボックスが
入力可であっても、タブはそれを飛ばしてその次の項目に位置づいて
しまいます。1つ目のテキストボックスに入力した後、イベントを
拾って、SetFocusか何かしてやらないといけないのでしょうか?
2つ目のテキストボックスに位置付ける方法があれば、アドバイス
いただければと思います。よろしくお願いします。

Aベストアンサー

Private Sub Text1_Change()
Select Case Text1
Case "1"
Text2.Enabled = False
Text3.Enabled = True
Case "2"
Text2.Enabled = True
Text3.Enabled = False
Case Else
Text2.Enabled = True
Text3.Enabled = True
End Select
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode = 13) Then
If (Text1 = "1") Then
Text3.SetFocus
Else
Text2.SetFocus
End If
End If
End Sub
というのはどうでしょう?

No.2の方の方法は、Text1入力時に、マウスで例えば終了ボタンを押すと終了できません。
LostFocusイベントでなく、Validateイベントで記述した方がいいのでは?

Private Sub Text1_Change()
Select Case Text1
Case "1"
Text2.Enabled = False
Text3.Enabled = True
Case "2"
Text2.Enabled = True
Text3.Enabled = False
Case Else
Text2.Enabled = True
Text3.Enabled = True
End Select
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode = 13) Then
If (Text1 = "1") Then
Text...続きを読む

Qシリアル通信の電圧変換

シリアル通信に関する質問です。

出力が3.3Vのマイコンから入力電圧が5V必要なサーボコントローラの間で、シリアル通信をしたいのですが、どうやったらいいのでしょうか?

信号の方向は、

マイコン(3.3V)→サーボコントローラ(5V)です。

昇圧回路?とかを通すのでしょうか?その辺はよくわかってませんが。。

Aベストアンサー

No1,3です。
 サーボコントローラのボードを見た感じではシリアル入力なるものがTTLレベルなのかCMOSレベルなのか判然としません。おそらくCMOSレベルかと思いますので直結できません。TTLレベルであれば直結も可能です。そこで74HC05のようなオープンドレインタイプの論理ICを入れると5Vの回路とインタフェースできます。
http://www001.upp.so-net.ne.jp/FITDESIGN/manu6.htm
(ここのコラム2の最初の図のような方法です。サーボコントローラ上に余分な抵抗を実装する必要がありますが。)
 しかし、機器間の距離がかなり短い場合を除いて、この方法はお勧めしません。なぜかといいますと、論理ICの電流ドライブ能力が低く、数mものばすとコードの抵抗によって通信ができなかったり、誤動作したりするからです。
 こうした場合にはやはりある程度の電圧振幅と電流ドライブ能力のあるRS-232CのインターフェースICが適しています。これをマイコン側に使えば、サーボコントローラ側はRS-32Cの端子に接続するだけで、余分な加工が要りません。
NO1のURLにあげているような
+3V to +5.5V RS-232 Transceivers
となっているICがいいでしょう。やや入手性に問題がある製品もありますので入手しやすいものをお使いください。

No1,3です。
 サーボコントローラのボードを見た感じではシリアル入力なるものがTTLレベルなのかCMOSレベルなのか判然としません。おそらくCMOSレベルかと思いますので直結できません。TTLレベルであれば直結も可能です。そこで74HC05のようなオープンドレインタイプの論理ICを入れると5Vの回路とインタフェースできます。
http://www001.upp.so-net.ne.jp/FITDESIGN/manu6.htm
(ここのコラム2の最初の図のような方法です。サーボコントローラ上に余分な抵抗を実装する必要がありますが。)
 しかし、機器...続きを読む

QMSDNをインストールしたい

こんにちわ。
VBをインストールし終って、MSDNもインストールしようと思ったのですが、CDを入れても反応せず、中身を見ると「MSDN」というフォルダと「MSDN332.INF」しかありません。どうやってインストールするのでしょうか?

Aベストアンサー

それは、Disc2です。
Disc1からインストールしてください。


人気Q&Aランキング