実装: Unity 5.1.3-f1 on MacOS X 10.8.5
動作確認:
1. MacOS X 10.8.5
2. Windows 7pro 32bit
RS-232C通信とUDP通信を変換したい。
code
メインの処理は以下で実装
- udpRs232cScript.cs
UDP通信をリレーするudpMonitorをベースにRS-232C送受信の処理を実装した。
9600bpsで通信をする。
処理のパフォーマンスはかなり悪いので、今後改善が必要。
使い方
接続例
- UDP側 (192.168.10.3)
- UDP-RS232C変換側 (192.168.10.8)
上記の2つを以下のように接続して試した。
(Assets/ConnectionDesign/ConnectionExample1.unity)
COM5からCOM6へはクロス接続になるように、USBシリアルケーブル2本と自作のクロス接続治具を使用。
vmwareなど使えるのであれば、パイプを使えば同じことができる。
本来はCOM5から先は別のものがRS-232Cケーブルでつながっているという使用形態になるだろう。
使用例
192.168.10.8(Windows7)側でソフトを起動して以下で設定する。
- Settingボタンを押して、以下のように設定する
- OKボタンを押す
- ターミナルソフトをCOM6で立ち上げる
- ToggleCommにチェックを入れて、通信が始まる
以下の手順での使用になる (使い方にまだ制限がある)
- 192.168.10.3からポート6000でUDP送信 :
- 送信文字列が192.168.10.8のTerminalに表示される
- 返信ポート番号 (53041など)が保持される
- 192.168.10.8のTerminalから送信
- COM6->COM5->UDP(53041)経路で192.168.10.3に送信される
- 2の処理を繰り返すことができる
1の手順をやり直すと、別の返信ポート番号(例: 48136)が割り当てられ、2の手順を繰り返すことができる。
上記の手順(1)の例として、192.168.10.3(Macのターミナル)にて以下でUDP通信を確立し、192.168.10.8のTerminalにhelloが表示される。
$ echo "hello" | nc -u 192.168.10.8 6000
手順(2)の例として、192.168.10.8のTerminalで入力した文字列が192.168.10.3(Mac)のターミナルに送信される。
$ echo "hello" | nc -u 192.168.10.8 6000
abcdefghijkl
不備
- 処理に余計なwaitがかかっている。
- 使い方に制限ある。
v0.6.1 (RS-232C入力改善)
RS-232Cからの入力時の送信を速くなるようにした。
検討中
UDPのポート番号(6000と任意番号)の設定を反対にすれば、UDP接続を確立しっぱなしにしなくていい気がする。
そうした場合、192.168.10.8はUDP経路で来るものをポート番号関係なしですべてCOM5に送ることになる。何らかのフィルタが必要になるかもしれない。