|
|||||
しかし、簡単なプログラムといってもRS232C(シリアル)のプログラム作成は面倒かもしれません。 そんな時に便利な、コマンドライン(バッチファイル)でRS232C(シリアル)通信するツールがありますので紹介します。 コマンドライン通信(RS232C)はコマンドライン(バッチファイル)でシリアル(RS232C)の送受信(DTRやRTSの制御可)するツールです。 簡単な例では以下の4行で電文の送受信が出来ます。 SendRs232c.exe "@OPEN@@@@@,%PORT%,9600,8,0,0,0" SendRs232c.exe -t2b "<STX>1234567890<ETX>" RecieveRs232c.exe 10 60 SendRs232c.exe "@CLOSE@@@@" コマンドラインツールなので受信電文のチェック処理や繰り返し処理もコマンドプロンプトのIF文やGOTO文でプログラミング出来ます。 特別な送受信処理が必要な場合は、その特別な部分(EXE等) を自作する事で実現可能です。 まずは、COMポート2つをクロスケーブルで接続し、SampleMain.batを実行してみてください。 シリアル(COM)ポートが無い場合は 仮想シリアル(COMポート)ドライバ をおすすめします。 <関連ツール> スクリプト通信テスト(RS232C/TCPIP/UDPIP) スクリプト(VBS)を使用した簡単!! 通信テスト!! 対象プロトコルはRS232C、TCP/IP、UDP/IP!! EXCEL通信テスト(RS232C/TCPIP/UDPIP) EXCEL(VBA)を使用した簡単!! 通信テスト!! 対象プロトコルはRS232C、TCP/IP、UDP/IP!! ★コマンドライン通信(RS232C)のサンプルBATプログラム・メイン(SampleMain.bat) ECHO OFF ECHO ********************************** ECHO * コマンドライン通信(RS232C)のサンプル * ECHO *このサンプルはCOMポートを2つ使用します。2つのCOMポートは* ECHO *クロスケーブルで接続されている必要があります。COMポート2つと* ECHO *クロスケーブルを準備出来ない時は、下のURLで紹介している仮想の* ECHO *シリアル(COMポート)ドライバ(フリー)を使用すると良いでしょう。* ECHO *URL:http://nonsoft.la.coocan.jp/Link/Null-Modem.html * ECHO ********************************** ECHO 準備が宜しければEnterキーを押してください。 ECHO 中止する場合はCTRL−Cキーで終了してください。 PAUSE REM ==ディレクトリの準備=============================================== IF NOT EXIST PORT2 ( XCOPY /E /I PORT1 PORT2 ) REM ==サーバー側のサンプル実行========================================= START SampleSub.bat 1 REM ==クライアント側のサンプル実行===================================== START SampleSub.bat 2 ★コマンドライン通信(RS232C)のサンプルBATプログラム・サブ(SampleSub.bat) ECHO OFF ECHO ********************************** ECHO * コマンドライン通信(RS232C)のサンプル * ECHO *このサンプルはCOMポートを2つ使用します。2つのCOMポートは* ECHO *クロスケーブルで接続されている必要があります。COMポート2つと* ECHO *クロスケーブルを準備出来ない時は、下のURLで紹介している仮想の* ECHO *シリアル(COMポート)ドライバ(フリー)を使用すると良いでしょう。* ECHO *URL:http://nonsoft.la.coocan.jp/Link/Null-Modem.html * ECHO ********************************** IF "%1%" NEQ "1" ( IF "%1%" NEQ "2" ( ECHO ... ECHO 起動引数が誤っています。 ECHO SampleSub.batを直接実行せず、SampleMain.batを実行してください。 ECHO ... PAUSE EXIT )) REM ==開始============================================================= REM 引数が1で起動された時はPORT1ディレクトリへ移動 IF "%1%" NEQ "2" (CD PORT1) REM 引数が2で起動された時はPORT2ディレクトリへ移動 IF "%1%" EQU "2" (CD PORT2) REM ==オープン========================================================= REM このサンプルは引数が1で起動された時はCOM11を使用します REM このサンプルは引数が2で起動された時はCOM12を使用します IF "%1%" NEQ "2" (SET PORT=COM11) ELSE (SET PORT=COM12) ECHO %PORT%をオープンします。 REM オープンするとバックグラウンドプロセスがタスクトレイで起動されます REM 引数説明:@OPEN@@@@@,COMX,BaudRate,ByteSize,StopBits,Parity,XonOff REM @OPEN@@@@@=COMポートオープン命令(固定) REM COMX =COMポート名(COM1,COM2,COM3...) REM BaudRate =通信速度(9600,19200,38400...) REM ByteSize =バイトのビット数(4,5,6,7,8) REM StopBits =ストップビット数(1ビット=0,1.5ビット=1,2ビット=2) REM Parity =パリティ(無し=0,奇数=1,偶数=2,マーク=3,スペース=4) REM XonOff =XON/XOFF(無し=0,有り=1) SendRs232c.exe "@OPEN@@@@@,%PORT%,9600,8,0,0,0" REM 通信相手の初期化待ちのため2秒間スリープ SleepRs232c 2.0 REM このサンプルは10回の送受信を繰り返します SET LOOP_MAX=10 SET LOOP_CNT=0 :LOOP SET /A LOOP_CNT=%LOOP_CNT% + 1 ECHO ----------%LOOP_CNT%回目の送受信---------- REM ==ログ開始========================================================= REM 送受信データをlogディレクトリに保存するモードの開始指令 SendRs232c.exe "@LOG_ST@@@" REM ==送信============================================================= REM 引数が1で起動された時は受信処理からスタート REM 引数が2で起動された時は送信処理からスタート IF "%1%" EQU "2" ( REM RTSをONします SendRs232c.exe "@SETRTS@@@" REM DTRをOFFします SendRs232c.exe "@CLRDTR@@@" REM 電文を送信します REM -t2b:<STX>,<ETX>,<F0>等をバイナリ変換 REM -f:ファイル指定 SendRs232c.exe -t2b "<STX>1234567890<ETX>" ) REM ==受信============================================================= REM 10バイトの電文を受信するまで待ちます(60でタイムアウトする指定) RecieveRs232c.exe 10 60 REM 受信タイムアウトチェック IF ERRORLEVEL 1 ( SET ERRMSG=受信タイムアウトしました。ERRCODE=101 GOTO ERR) REM 受信データを取得する環境変数を初期化 SET RCVDAT= SET RCVCTS= SET RCVDSR= SET RCVRING= SET RCVRLSD= REM 受信した電文の2バイト目から10バイト(文字列)を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -dat 2 10') DO SET RCVDAT=%%i REM CTSの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -cts') DO SET RCVCTS=%%i REM DSRの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -dsr') DO SET RCVDSR=%%i REM RINGの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -ring') DO SET RCVRING=%%i REM RLSDの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -rlsd') DO SET RCVRLSD=%%i REM 結果表示 ECHO %RCVDAT%,CTS=%RCVCTS%,RTS=%RCVDSR%,RING=%RCVRING%,RLSD=%RCVRLSD% REM 受信電文の値(文字列)チェック IF "%RCVDAT%" NEQ "1234567890" ( SET ERRMSG=受信電文が誤っているため異常終了しました。ERRCODE=201 GOTO ERR) REM 受信した電文の2バイト目から5バイト(HEX)を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -dat 2 5 hex') DO @SET RCVDAT=%%i REM 結果表示 ECHO %RCVDAT%,CTS=%RCVCTS%,RTS=%RCVDSR%,RING=%RCVRING%,RLSD=%RCVRLSD% REM 受信電文の値(HEX)チェック IF "%RCVDAT%" NEQ "3132333435" ( SET ERRMSG=受信電文が誤っているため異常終了しました。ERRCODE=202 GOTO ERR) REM 処理済み受信電文削除 DEL /F /Q rcv\*.dat REM ==送信============================================================= REM 引数が1で起動された時の送信処理 IF "%1%" NEQ "2" ( REM RTSをONします SendRs232c.exe "@SETRTS@@@" REM DTRをOFFします SendRs232c.exe "@CLRDTR@@@" REM 電文を送信します REM -t2b:<STX>,<ETX>,<F0>等をバイナリ変換 REM -f:ファイル指定 SendRs232c.exe -t2b "<STX>1234567890<ETX>" ) REM 引数が2で起動された時の送信処理 IF "%1%" EQU "2" ( REM RTSをOFFします SendRs232c.exe "@CLRRTS@@@" REM DTRをONします SendRs232c.exe "@SETDTR@@@" REM ファイルを指定して電文を送信します REM -t2b:<STX>,<ETX>,<F0>等をバイナリ変換 REM -f:ファイル指定 SendRs232c.exe -t2b -f "dat\test.dat" ) REM ==受信============================================================= REM 10バイトの電文を受信するまで待ちます(60でタイムアウトする指定) RecieveRs232c.exe 10 60 REM 受信タイムアウトチェック IF ERRORLEVEL 1 ( SET ERRMSG=受信タイムアウトしました。ERRCODE=102 GOTO ERR) REM 受信データを取得する環境変数を初期化 SET RCVDAT= SET RCVCTS= SET RCVDSR= SET RCVRING= SET RCVRLSD= REM 受信した電文の2バイト目から10バイト(文字列)を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -dat 2 10') DO SET RCVDAT=%%i REM CTSの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -cts') DO SET RCVCTS=%%i REM DSRの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -dsr') DO SET RCVDSR=%%i REM RINGの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -ring') DO SET RCVRING=%%i REM RLSDの値を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -rlsd') DO SET RCVRLSD=%%i REM 結果表示 ECHO %RCVDAT%,CTS=%RCVCTS%,RTS=%RCVDSR%,RING=%RCVRING%,RLSD=%RCVRLSD% REM 受信電文の値(文字列)チェック IF "%RCVDAT%" NEQ "ABCDEFGHIJ" ( SET ERRMSG=受信電文が誤っているため異常終了しました。ERRCODE=203 GOTO ERR) REM 受信した電文の2バイト目から5バイト(HEX)を環境変数に取得します FOR /F %%i IN ('CheckRs232c.exe -dat 2 5 hex') DO @SET RCVDAT=%%i REM 結果表示 ECHO %RCVDAT%,CTS=%RCVCTS%,RTS=%RCVDSR%,RING=%RCVRING%,RLSD=%RCVRLSD% REM 受信電文の値(HEX)チェック IF "%RCVDAT%" NEQ "4142434445" ( SET ERRMSG=受信電文が誤っているため異常終了しました。ERRCODE=204 GOTO ERR) REM 処理済み受信電文削除 DEL /F /Q rcv\*.dat REM ==送信============================================================= REM 引数が1で起動された時の送信処理 IF "%1%" NEQ "2" ( REM RTSをOFFします SendRs232c.exe "@CLRRTS@@@" REM DTRをONします SendRs232c.exe "@SETDTR@@@" REM ファイルを指定して電文を送信します REM -t2b:<STX>,<ETX>,<F0>等をバイナリ変換 REM -f:ファイル指定 SendRs232c.exe -t2b -f "dat\test.dat" ) REM ==ログ終了&削除=================================================== REM 送受信データをlogディレクトリに保存するモードの終了指令 SendRs232c.exe "@LOG_ED@@@" REM logディレクトリに保存したデータの削除 DEL /F /Q log\*.dat REM ==繰り返し========================================================= REM このサンプルは複数回の送受信を繰り返します IF %LOOP_CNT% LSS %LOOP_MAX% GOTO LOOP REM ==クローズ========================================================= REM クローズするとバックグラウンドプロセスが終了します SendRs232c.exe "@CLOSE@@@@" ECHO 正常終了しました。 GOTO END REM ==エラー=========================================================== :ERR REM エラーの時もクローズします SendRs232c.exe "@CLOSE@@@@" REM エラーメッセージ表示 ECHO %ERRMSG% REM ==終了============================================================= :END REM コマンドプロンプトを自動で閉じないようにポーズします PAUSE |