RPU-10講座/コラム3 パケットモニタ

公開日:  最終更新日:2014/06/05

すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。

RPU-10講座/第十一章 3つのサーボ動作」にて、「RSC-U485を使って簡単なパケットモニタ」って話を書きましたが、どんなプログラムでやっているかちょっと紹介します。RSC-U485ですが、これをパソコンでセットアップすると、COMポートとして扱うことができます。で、ひたすら、そのポートに流れているデータを表示するプログラムを作りました。


RPU-10やRS301は、RS485を使ってサツマイモのように芋づるにケーブルを接続されています。例えば、RPU-10からサーボ1に通信する場合、実は全サーボにパケットを送信し、そのうち、「サーボIDが1のサーボ」だけが動作を実行するようになっています。つまり全通信パケットは、このネットワークにつながってさえいれば読み取ることができます。


RSC-U485も1つのRS485通信機器ですから、ここに接続すれば、やはりすべての通信パケットを見ることができます。



すごく手抜きなプログラムですが、テストには重宝します。このプログラムは、GDL2.0の「x86コンソールアプリ」にてビルドするように作りました。起動するとDOS窓が開き、モニタを開始します。見やすいように通信タイムアウトが発生すると改行するようにしてあります。COMポートを切り替えるのに、ビルドしなおさないといけないような手抜きプログラムですが、良かったら使ってみてください。


同様の機能を持つプログラムは、もう1つRPU-10があれば、それを使っても作れると思います。


   1: //—————————————————————————————-
2: // RSC-U485を使ったパケットモニタ
3: // RSC-U485をメインハブに接続することにより、RS485に流れているデータをモニタします。
4: // ビルドは、Best Technologyから配布されているGCC Developer Liteを使用して、「x86
5: // コンソールアプリ」設定にて行います。
6: //
7: //—————————————————————————————-
8: #include <stdio.h> // 標準ヘッダー
9: #include <windows.h> // Windows API用ヘッダー
10:
11: #define D_COMPORT “COM9” // 使用COMポート
12: // 環境に合わせて適宜変更してください。
13:
14: //—————————————————————————————-
15: // COMポートをクローズします。
16: // 引数 HANDLE 通信ハンドル
17: // 戻り値 void
18: //—————————————————————————————-
19: void commClose( HANDLE hComm )
20: {
21: if( hComm != INVALID_HANDLE_VALUE ) CloseHandle( hComm );
22: hComm = INVALID_HANDLE_VALUE;
23: }
24:
25: //—————————————————————————————-
26: // COM(シリアル通信)ポートオープン
27: // 引数 char* COMポート名
28: // 戻り値 HANDLE 通信ハンドル
29: //—————————————————————————————-
30: HANDLE commOpen( char* pcComName ){
31: DCB dcb;
32: COMMTIMEOUTS cto;
33: HANDLE hComm;
34:
35: hComm = CreateFile(
36: pcComName, // シリアルポート名
37: GENERIC_READ|GENERIC_WRITE, // アクセスモード
38: 0, // 共有モード
39: NULL, // セキュリティ属性
40: OPEN_EXISTING, // 作成フラグ
41: FILE_ATTRIBUTE_NORMAL, // 属性
42: NULL // テンプレートのハンドル
43: );
44: if( hComm != INVALID_HANDLE_VALUE ){
45: // 通信設定
46: if( GetCommState( hComm, &dcb ) == 1 ){ // DCB を取得
47: dcb.DCBlength = sizeof(DCB); dcb.fBinary = 1;
48: dcb.BaudRate = 115200; dcb.ByteSize = 8;
49: dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT;
50: dcb.fParity = TRUE; dcb.fRtsControl = RTS_CONTROL_DISABLE;
51: dcb.fDtrControl = DTR_CONTROL_DISABLE;
52: dcb.fOutxCtsFlow = 0; dcb.fTXContinueOnXoff = 0;
53: dcb.fInX = dcb.fOutX = 0;
54: dcb.XonChar = 0x11; dcb.XoffChar = 0x13;
55: dcb.XonLim = 100; dcb.XoffLim = 1500;
56: }
57: else commClose( hComm );
58: if( SetCommState( hComm, &dcb ) == 1 ){ // DCB を設定
59: if( SetupComm( hComm, 1600 , 1600 ) != 1 ) commClose( hComm );
60: if( PurgeComm( hComm, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR ) != 1 ) commClose( hComm );
61: }
62: else commClose( hComm );
63: }
64: if( hComm != INVALID_HANDLE_VALUE ){
65: GetCommTimeouts( hComm, &cto );
66: cto.ReadIntervalTimeout = 100;
67: cto.ReadTotalTimeoutMultiplier = 100;
68: cto.ReadTotalTimeoutConstant = 100;
69: cto.WriteTotalTimeoutMultiplier = 100;
70: cto.WriteTotalTimeoutConstant = 100;
71: if( SetCommTimeouts( hComm, &cto ) != 1 ){
72: commClose( hComm );
73: }
74: }
75:
76: return hComm;
77: }
78:
79:
80:
81: //—————————————————————————————-
82: // メイン処理
83: // 回りっぱなしのけっこういい加減なサンプルなので、あくまでも参考用です。
84: //—————————————————————————————-
85: int main( )
86: {
87: unsigned char ucData; // 受信データバッファ
88: DWORD dwReqLen; // 要求受信データ長
89: DWORD dwRecvLen; // 受信データ長
90: HANDLE hComm; // 通信ハンドル
91:
92: // 通信ポートを開く
93: printf( “RSC-U485 PACKET MONITOR [%s]\n”, D_COMPORT );
94: hComm = commOpen( D_COMPORT );
95: if( hComm == INVALID_HANDLE_VALUE ){
96: puts( “COMPORT OPEN ERROR. PACKET MONITOR WILL EXIT.” );
97: return 1;
98: }
99:
100: while( 1 ){
101: ReadFile( hComm, &ucData, 1, &dwRecvLen, NULL );
102: if( dwRecvLen == 1 ){
103: printf( “%02X”, ucData );
104: }
105: else{
106: printf( “\n” );
107: }
108: }
109:
110: return 0;
111: }





※注意:本BLOGにてRPU-10での再プログラミングについての情報を公開していますが、これらはSISOが個人的に再プログラミングを行った時の技術情報を整理して紹介しています。GDLへのRPU-10ライブラリ同梱については、 Best Technologyさんのご好意で、趣味人への1つのチャンスとして同梱してくださっていると理解しています。そのため、RPU-10の再プログラミングについては、くれぐれもご自身の責任で、また、Best TechnologyさんやFUTABAさんに問い合わせたりすることの無いようにお願いいたします。
 

  • このエントリーをはてなブックマークに追加
  • Pocket

関連前後記事

Comment

  1. […] RPU-10講座/コラム3 パケットモニタ […]

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

PAGE TOP ↑