29章:非同期なサーバーソケットによる自動彫刻機の制御

    作成2016.02.01
     11章の改良です。


  1. 自動彫刻機の原型
     MPLAB_X_IDE_v2.25とPIC18F4553マイコンの復習の3次元パソコン制御ルータ加工機の製作(22章〜24章)で製作した自動彫刻機を改造しました。
     原型ではUSB送受信を使用しまましたが、設置場所がUSBケーブルの長さに制約されます。(パソコンがノート型なら移動が容易ですが、デスクトップ型の移動は面倒です。)
     送受信部分をWi−Fiモジュール ESP−WROOM−02 DIP化キットに変更します。


  2. 加工用DCモータの変更
     加工工具は先端軸径:直径2.35mmのダイヤモンドビットを使用しているのですが、加工物の素材によっては、より大きなトルクを必要とする場合があります。
     多種の素材に対応するため、DCモータをDCモーター RE−280RA−2865からDCモーター RS−385PH−4045に変更しました。
    DCモーター RS−385PH−4045主な仕様は以下の通りです。
    ・電圧範囲:3.0〜9.0VDC(標準6.0V)
    ・無負荷時電流:0.48A(0.62Amax)
    ・無負荷時回転数:12100回転/分(±10%)
    ・負荷電流:2.7A(3.5Amax)
    ・定格負荷時回転数:10300回転/分(±10%)
    ・負荷:90g.cm
    ・負荷出力:9.5W
    ・効率:60%
    ・静止電流:15A
    ・静止トルク:610g・cm
    **電源電圧6V、最大電流4Aの電源が必要です。


  3. 加工DCモータ用電源回路
     加工DCモータ用電源回路を以下のように変更しました。





  4. 加工DCモータ用電源回路外観
     加工DCモータ用電源回路外観を以下に示します。





  5. ダイヤモンドビット与圧調整重りの設置
    加工物の素材によってダイヤモンドビット与圧を調整する必要があるため、重りによる調整を可能にしました。


  6. ESP−WROOM−02用電源回路
     ESP−WROOM−02用電源回路を以下に示します。





  7. ESP−WROOM−02用電源回路外観
     ESP−WROOM−02用電源回路外観を以下に示します。
    注(1)ESP−WROOM−02のスケッチ書込み時は0ピンをLowに接続します。
    注(2)スケッチ書込み後は0ピンをHighに接続します。





  8. ESP−WROOM−02用スケッチ
     16章と同一です。
    (1)メニュー「ファイル」_「スケッチの例」_「ESP8266WiFi」_「WiFiClient」で作 成されるスケッチを参考に以下のように修正しました。
    //WiFiClient 非同期
    #include <ESP8266WiFi.h>
    const char* ssid     = "SSID";//無線LANのSSD
    const char* password = "password";//無線LANのパスワード
    const char* host = "192.168.11.2";//パソコンのIPアドレス
    const int httpPort = 13000;//TCPサーバのポート
    static String gSendText="";
    
    void setup() {
      Serial.begin(115200);//シリアルポートを115200bpsで開始
      delay(10);
      // We start by connecting to a WiFi network
      Serial.println();
      
      WiFi.begin(ssid, password);//無線LANに接続要求
      
      while (WiFi.status() != WL_CONNECTED) {//接続完了まで待ちます。
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");  
    }
    
    void loop()
    {
      delay(500);
    
      // Use WiFiClient class to create TCP connections
      WiFiClient client;
    
      if (!client.connect(host, httpPort)) {//TCPサーバへの接続要求
        //Serial.print("x");
      }
      else
      {
        if(gSendText.length() > 1)
        {
          client.print(gSendText);//データを送信
          gSendText="";
        }
        else{client.print("a");}//"a"を送信
        delay(10);
        // Read all the lines of the reply from server and print them to Serial
        while(client.available())
        {
          String line = client.readStringUntil('\n');//受信します。
          Serial.print(line+"\r\n");
          gSendText=line + "=OK\r\n";//送信データのセット
        }
      }
    }
    


  9. スケッチの解説
    (1)以下を修正します。
    const char* ssid = "SSID";//無線LANのSSD
    const char* password = "password";//無線LANのパスワード
    const char* host = "192.168.11.2";//パソコンのIPアドレス
    const int httpPort = 13000;//TCPサーバのポート

    (2)Serial.begin(115200);
     シリアルポートを115200bpsで開始します。
    (3)WiFi.begin(ssid, password);//無線LANに接続要求
     無線LANに接続を開始します。(無線LANが動作しているのが前提です。)
    (4) while (WiFi.status() != WL_CONNECTED)
     接続完了まで待ちます。
    (5)client.connect(host, httpPort):TCPサーバへの接続要求
    (6)client.print(gSendText):gSendTextにデータがセットされている場合データを送信します。
    (7)client.print("a"):gSendTextにデータがセットされていない場合"a"を送信します。
    (8)String line = client.readStringUntil('\n'):受信します。

    上記シーケンスのポイント
    *標準的なTCPサーバとクライアントの通信手順となっています。
    *最初にクライアントからサーバに接続要求をします。
    *接続したら、クライアントからサーバにデータを送信します。
    *次にサーバからクライアントにデータを送信します。
    *サーバはクライアントにデータを送信後、接続を切断し接続待ちの状態で待機します。
    *サーバはほとんどの時間で接続待ちの状態で待機することになります。
    *接続待ちの状態では、どのクライアントからの接続要求も受け付けるため、複数のクライアントとの通信が可能です。


  10. スケッチの書込み
    (1)ESP-WROOM-02のフラッシュ書き換え時のピン設定
    *ENピン:(Chip Enable.)→High(10kΩプルアップ)
    *GPIO-15ピン:(Type I/O MTDO;HSPI_CS; UART0_RTS)→LowHigh(10kΩプルダウン)
    *GPIO-2ピン:(Type I/O UART Tx during flash programming)→High(10kΩプルアップ)
    *GPIO-0ピン:(Type I/O SPI_CS2)→Low(10kΩプルダウン)(Lowでラッシュ書き換えモード)
    *TXピン:USBシリアル変換モジュールのRX
    *RXピン:USBシリアル変換モジュールのTX
    *GNDピン:USBシリアル変換モジュールのGND

    (2)ESP-WROOM-02の電源を投入します。
    (3)メニュー「ツール」_「ポート」_「COM14」を選択します。
    (4)メニュー「スケッチ」_「マイコンボードに書込む」を選択します。
    (5)書込みが完了します。
    (6)GPIO-0ピン:(Type I/O SPI_CS2)→High(10kΩプルアップ)に戻します。
    (7)ESP-WROOM-02の電源を再投入します。


  11. PIC18F4553用ソースプログラム
     11章のプログラムに対して、ZサーチコマンドZS#送り量#を追加しました。これは、WiFi無線通信のロスタイムを無くすためです。
     詳細は下記の29-1.txtファイルを参照願います。
    [29-1.txt]をダウンロードする。

    注(1)上記ソースプログラムには割込み処理として、シリアル受信処理とタイマー0割込み処理が設定されていますが、タイマー0割込み処理は使用していません。


  12. 非同期なTCPサーバープログラム
     プロジェクトの種類は、C#「Windowsフォームアプリケーション」を使用しました。本プログラムはマルチスレッドを使用しており、プログラム構造が複雑で難解です。

     完成プログラム(MyTcpListener.exe)は以下からダウンロードできます。
    [29-1.zip]をダウンロードする。

    解凍するとAsynchronous2フォルダーがあります。フォルダー内に
    (1)Asynchronous2.sln等のソースファイル群
    (2)Asynchronous2.exe:実行ファイル
    (3)フォントフォルダー(加工用ビットマップファイル)
    があります。

    注(1)TCPサーバのポートは13000に設定してあります。
    注(2)接続の切断はアプリケーションの終了で行います。
    注(3)プログラムの詳細はソースファイルを参照願います。


  13. 操作方法
    ***WiFi接続
    (1)Asynchronous2.exeをダブルクリックで起動します。
    (2)接続ボタンを押します。




    ***圧力センサーの検出値の取得
    (1)送信 Dataに「AD#」を設定して「\t\n送信」ボタンを押します。
    (2)圧力センサーの検出値を受信します。




    ***DCモータのON/OFF
    (1)DCモータのONの場合、送信 Dataに「DC#1#」を設定して「\t\n送信」ボタンを押します。
    (2)DCモータのONの場合、送信 Dataに「DC#0#」を設定して「\t\n送信」ボタンを押します。(1以外はOFFとなります。)




    ***XYZステージの相対値移動
    (1)XYY方向とも0.5mmプラス方向に相対移動する場合、送信 Dataに「MR#96#96#96#」を設定して「\t\n送信」ボタンを押します。
    (2)移動後の絶対座標を受信します。
    (3)送信 Dataに「MR#-96#-96#-96#」を設定するとマイナス方向に移動します。
    *プラス・マイナスの方向はバーニア目盛の方向と一致させました。




    ***XYZステージの絶対値移動
    (1)XYY方向とも原点する場合、送信 Dataに「MA#0#0#0#」を設定して「\t\n送信」ボタンを押します。
    (2)移動後の絶対座標を受信します。
    (3)送信 Dataに「MA#-96#-96#-96#」を設定するとX=-0.5mm,Y=-0.5mm,Z=0.5mmに移動します。
    *プラス・マイナスの方向はバーニア目盛の方向と一致させました。




    ***Zサーチ
    (1)送信 Dataに「ZS#20#」を設定して「\t\n送信」ボタンを押します。
    (2)20パルス毎に接触判定を行うZサーチ動作が実行されます。




    *以上が基本コマンドの全てです。
    *パソコン側から、以上の基本コマンドを送信して、3次元パソコン制御ルータ加工機を制御することになります。
    *具体的な制御は、加工物の材質、形状、加工形状等に依存するため、目的に応じた最適化が必要です。
    *XYZステージはバックラッシュがあるため、位置決めの際一方向から追い込む必要があります。
    *加工後のXYZ移動は、XYZ同時に行うと引っかかる場合があり、XYZの移動順序も最適化する必要があります。
    *加工速度は加工物の材質に依存します。
    *ダイヤモンドピットはガラスや石のように硬くて脆い素材に適するようです。
    *ダイヤモンドピットの加工速度は、一般的には遅く、ダイヤモンドピットの加工速度に応じた位置の制御が必要となります。
    *パソコン側の制御ソフトは目的に応じて、最適化が必要となります。


  14. 自動運転操作
    (1)原点ボタンはコマンド「MA#0#0#0#」と等価です。原点復帰動作をします。
    (2)Z サーチボタンは「ZS#20#」と等価です。Z サーチ動作を実行します。

     以下は自動彫刻の操作となります。
    (1)Width間隔tpHeight間隔を80に設定します。(0.42mm間隔)
    (1)「加工面計測」ボタンを押すとオープンファイルダイアログが表示されますので「ファイル名.bmp」を開きます。
    (2)加工面計測が実行されます。(測定は3絵素ごとに行われます。)
    (3)計測完了後に「計測保存」ボタンを押すと計測結果がファイルに出力されます。



    (4)最後の「加工実行」ボタンをおすと加工が実行されます。





  15. 加工結果
     加工結果外観を以下に示します。





  16. 非同期なサーバーソケットによる自動彫刻機の制御まとめ
    (1)WiFi無線は非同期なサーバーソケットを使用するのが良いと思われます。
    (2)非同期なサーバーソケットのソースコードは難解ですが、動作が安定します。
    (3)非同期なサーバーソケットは毎回クライアント側からサーバ側に接続要求を出し、一連の通信が完了すると接続が切断されます。
    (4)サーバ側からクライアント側へのコマンド送信は接続要求を待つ必要があり、ロスタイムが発生します。
    (5)Zサーチを各ステップ毎にステージコマンドで操作すると時間がかかるため、Zサーチコマンドで一連の動作が完了するように変更しました。
    (6)自動彫刻機は木工細工のステージのため、バッゥラッシュが大きく高速の加工はできませんが、時間をかければ、漢字の彫刻が可能であることが確認できました。
    (7)彫刻の途中でエラー停止すると回復が厄介なのですが、非同期なサーバーソケットを使用することにより動作はかなり安定しました。




30章:高品位DC12Vブラシ付モータPWN10EB12CBのサーボ制御に行く。

トップページに戻る。