- PR -

マイコンとVB6アプリとのUDPでの通信

投稿者投稿内容
とろ
会議室デビュー日: 2008/12/10
投稿数: 3
投稿日時: 2008-12-10 23:22
はじめまして。

マイコンからEthernetコントローラを使いデータをUDPで送信し、
VBのアプリで受信しようと考えています。
現在は1対1の通信を考えていますが、将来は1対多、多対多などを考えています。

そこで、マイコンからブロードキャストのデータを受け取れるか?
ということを実験してみようとして、

(1)
マイコンから宛先MACアドレス(all "F"、ブロードキャストのつもり)、
宛先IP(VBが走っているPCのIPアドレス)
他必要なデータを設定し、Ethernetフレーム(UDP)を組み立て送信したところ
PCのネットワークアナライザ(PacMon)で受けていたのですが、VBアプリはデータ受信
の割り込みが入りませんでした。

(2)
マイコンから宛先MACアドレス(PCのMACアドレス)、
宛先IP(VBが走っているPCのIPアドレス)
他必要なデータを設定し、Ethernetフレーム(UDP)を組み立て送信したところ
VBアプリでデータ受信の割り込みが入り、データ受信できました。

(2)から1対1の通信ができることはわかったのですが、
マイコンからブロードキャストのデータを流せるのかがわかりませんでした。

TCP/IPの知識がないのでこのように
このような(all"F")フォーマットでブロードキャストのデータをUDPで送信することが
よいことなのかわからないのですが、
(a)(VBを使って)UDPでブロードキャストデータを受信することはできないのでしょうか?
また、
(b)ブロードキャストのデータ送信方法はMACアドレスを
all"F"で送信することでよいのでしょうか?
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2008-12-11 08:23
こんにちは。

引用:
とろさんの書き込み (2008-12-10 23:22) より:

(a)(VBを使って)UDPでブロードキャストデータを受信することはできないのでしょうか?
また、
(b)ブロードキャストのデータ送信方法はMACアドレスを
all"F"で送信することでよいのでしょうか?


(a)自宅環境等で自己責任で完結できる場合はOKですが、企業内LAN等ではやらない
 方が良いでしょう。
(b)目的から判断するとその方法では無意味でしょう。この辺りから知識を深めるべきかと。

# 基本的には独立したLAN環境を構築して周りに影響を及ぼさないことが重要です。
とろ
会議室デビュー日: 2008/12/10
投稿数: 3
投稿日時: 2008-12-16 00:45
BackDoorさん。
返事が遅くなり申し訳ありません。

引用:

BackDoorさんの書き込み (2008-12-11 08:23) より:
こんにちは。

(a)自宅環境等で自己責任で完結できる場合はOKですが、企業内LAN等ではやらない
 方が良いでしょう。
(b)目的から判断するとその方法では無意味でしょう。この辺りから知識を深めるべきかと。

# 基本的には独立したLAN環境を構築して周りに影響を及ぼさないことが重要です。




(a)についてですが、マイコン(Ethernetコントローラ搭載)基板とPCとの1対1で通信しています。企業内のLAN等に接続することは考えていません。複数のホストにしたとしても、閉じたネットワークの中で行います。
(b)についてですが、リンク先の内容を拝見させていただきました。内容はARPについてで、ARPではMACアドレスをall"F"で送信して、MACアドレスを取得していると理解しました。ARPでMACアドレスを解決してから(つまり、MACアドレスを指定)でないと、(VBのWinsock Controlを使って)UDPもしくはTCPでのデータを受信できないということでしょうか?(これはTCP/IPのきまりでしょうか?)

現状は1対1を考えていますのでMACアドレス指定(ユニキャスト)のUDPの通信でも問題ないのですが、今後の複数のホストとの通信を考えており、その際に同じデータを何回も送信するのは面倒なので、一発で送信できるブロードキャストでデータを流すことを思いつきました。

まだTCP/IPのことをよくわかっておりませんので少しでも回答をいただけると幸いです。

BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2008-12-16 08:22
返信感謝。

引用:
とろさんの書き込み (2008-12-16 00:45) より:

(a)についてですが、マイコン(Ethernetコントローラ搭載)基板とPCとの1対1で通信しています。企業内のLAN等に接続することは考えていません。複数のホストにしたとしても、閉じたネットワークの中で行います。
(b)についてですが、リンク先の内容を拝見させていただきました。内容はARPについてで、ARPではMACアドレスをall"F"で送信して、MACアドレスを取得していると理解しました。ARPでMACアドレスを解決してから(つまり、MACアドレスを指定)でないと、(VBのWinsock Controlを使って)UDPもしくはTCPでのデータを受信できないということでしょうか?(これはTCP/IPのきまりでしょうか?)

現状は1対1を考えていますのでMACアドレス指定(ユニキャスト)のUDPの通信でも問題ないのですが、今後の複数のホストとの通信を考えており、その際に同じデータを何回も送信するのは面倒なので、一発で送信できるブロードキャストでデータを流すことを思いつきました。


(a)に関しては問題ないでしょう。

(b)に関してですが「ARPを使いなさい」という意味ではなく、一般にUDPを含む
TCP/IP通信を行う機器ではIPアドレスによる通信をするための基本的な仕組み
が実装されていることを理解して欲しかった訳です。
→ マイコンの機能でこの辺りはどこまで標準実装されているのか確認すること
  から始める必要があるという意味です。
  マイコン上にARPテーブルが存在しているか確認はされましたか?

# MACアドレスによる通信はethernetヘッダのみなので、マイコン上のVBアプリ
# ではMACアドレスのブロードキャストは受け取れなくて普通です。
# そういう意味で「知識を深めて」とアドバイス致しました。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-12-16 17:22
>(1)
>マイコンから宛先MACアドレス(all "F"、ブロードキャストのつもり)、
>宛先IP(VBが走っているPCのIPアドレス)
ブロードキャストしたいのでイーサパケットとしては、オールFのブロードキャスト
なのにIPでは、VBが走っているPCのIPアドレスと相手を特定していることは矛盾
してますよね。

マイコン上のプログラムでどのようにパケットを作っているか、マイコンのOSのよう
なものに、IP通信を支援するどのような機能があるか、システムの規模、通信の特性
アプリケーションの機能がわからないと的を得たレスがつきづらいとおもいます。

(a)VBは知らないのですが、とろさんの書かれてる内容からしてUDP通信は可能ではない
 でしょうか
(b)IPアドレスもブロードキャストアドレスとする必要があります。
 どういう値になるかは、そのIPセグメント上で取り決めがあるはずです。
 その取り決めに従って、各機器に設定されているはずです。
 IPネットワークアドレスと下位はオールビットオンまたはオフの値になります。
 今は一般的にオン・オフのどちらかが一般的で、その値をデフォルトでとるのかも
 しれません。
※UNIXのifconfigにはその設定がありますが、今Windowsでipconfig打ってもないよう
 です。

とろさんが書かれてる仕様にUDPの一斉同報は一見適しているようにもおもえます。
ただ、データが相手に確実に届く必要はないのでしょうか?

ソケット(IP)プログラムでUDPの同報は特殊な部類だとおもいますが、arpはアプリケーションレベルでなく、OSレベルで実現されているもので、かなり特殊だとおもいます。
とろさんの用途とはちょっと違うかなとおもいますが、イーサ、IPの役割や連動するための仕組みを理解するにはいいですし、とろさんの環境は理解しないといけないのかなとおもいます。
ただ、arpがなくてもIP通信はできます。
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2008-12-16 20:13
なにか勘違いされてませんか?

引用:
progmanさんの書き込み (2008-12-16 17:22) より:

>(1)
>マイコンから宛先MACアドレス(all "F"、ブロードキャストのつもり)、
>宛先IP(VBが走っているPCのIPアドレス)
ブロードキャストしたいのでイーサパケットとしては、オールFのブロードキャスト
なのにIPでは、VBが走っているPCのIPアドレスと相手を特定していることは矛盾
してますよね。


VBアプリの詳細までは判りませんが、普通にIP通信用のDLLなどを利用していると
推測します。
マイコン自体はethernetパケットを受信しているはずですが、VBアプリには認識
されていないだけだと思われます。
通信の基本部分までレクチャーする気はありませんが、OSI階層モデルはご存知で
すよね?
IP通信はレイヤ3、ethernetパケットはレイヤ2と違う階層ですから認識しなくて
あたりまえだと思いますが私の認識自体が誤っているのでしょうか?

# 基本を知らずにシステムは作れません。
# どの階層で動作しているのかさえ理解できていないと困りますよ。


[ メッセージ編集済み 編集者: BackDoor 編集日時 2008-12-17 08:21 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2008-12-16 21:32
もしゼロからTCPIPプロトコルスタックを実装するつもりでいるなら、それだけで一ヶ月はかかりますよ。一般的にはOSに付属のTCPIPプロトコルスタックを使用したり、あるいはTCPIPプロトコルスタックを別途購入したりします。マイコン側のプロトコルスタックはどうしているのでしょうか?プロトコルスタックも含めて自作するつもりなのでしょうか?

仮にマイコン側で既存のプロトコルスタックを使っているとしたら、MACアドレスを意識する必要はないはずです。もしMACアドレスを指定することを要求されているのだとしたら、相当特殊なプロトコルスタックでしょうから、メーカーに直接確認を取った方が良いでしょう。もしくは使っているマイコンが何なのかを明記する必要があるでしょう。

もしTCPIPプロトコルスタックも含めて実装するつもりなら、参考書やRFC、Linuxなど既存のTCPIPプロトコルスタックの実装を参考にして勉強してください。掲示板上のやり取りだけで解説可能なものではありません。

ネットワークを使ったアプリケーションのデバッグには、最低限ネットワークモニターを使われたほうが良いでしょう。フリーウェアもふくめて様々なものがあります。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-12-17 14:39
BackDoorさん
マイコンはパケットを送出する側ですよね。
VBはDLLかOSの機能かわからないですが、なにかを利用して、一般に考えるソケットインターフェースか、より上位の方法でプログラミング可能なんでしょうね。
それでVBでつくった側が受信動作しないというのが、とろさんの投稿内容でしょう。
マイコン側での作成方法についてはとろさんはなにも触れられてないですよ。
私はマイコン側は任意のイーサパケットを送信といった方法でアプローチしてるのかな?ともおもい投稿したのですが。
そういったアプローチを想定するのは、かなり突飛なんじゃない。という指摘でしょうか?
甕星さんの投稿は、そういった意図もあるかなとおもって読んで、BackDoorさんもそういいたいのかな?とおもうのですが、真意がよくわかりません。

また私の投稿を引用されてる部分と前後のBackDoorさん投稿のつながりもよく見えません。

VBのAP(反応しない)
Windows
PC            マイコン
|            ↓UDPパケット送出
+−−−Ether −−+

という現象をとろさんはアップされてるとおもうのですが、違いますか?
  

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