マイコンプラス

    二足歩行ロボットの制御やセンサの使い方、ロボットキット、ロボットの大会などについて紹介します
    スポンサードリンク

    スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。
    [ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

    マイコンプラス

    技術情報まとめ
    スポンサーサイト
    [ 2014/10/20 03:32 ] 未分類 | TB(0) | CM(0)

    中華CNC CNC3020導入記 設定編2

     前回:中華CNC CNC3020導入記 設定編

    LinuxCNCの設定


     一応,送られてきたCNCの箱の中にはA4一枚のMach3での設定方法が入っていたのですが,LinuxCNC(EMC2)のものはありません.設定についてはメールで問い合わせよ,と商品ページには書いてあったものの,とてもLinuxCNC用の資料が貰える気はしません.ですのでMach3の説明を見ながら推測してLinuxCNCでの設定値を決めていきます.
     
     CNCタブから「Setting」を選んでCNCの設定を始めます.
    Screenshot.png
     設定の名前はCNC-3020T-DJにしました.自由です.
     First Parport Addressのところには前に調べたPCIExpress-パラレル変換ボードに割り当てられたアドレスを指定します.
     Base Period Max…のところは,「Test Base Period Jitter」を押した後,ブラウザ開いたり動画見たり数分間PCに負荷を与えて出た値よりちょっとだけ大きい値に設定します.
     
     次です.これはそのままで次行きます.
    Screenshot-1.png

     パラレルポートのピンの割り当てをします.
    Screenshot-2.png
     このように設定しました.今のところうまく動いているので間違いは無いようです.

     各軸のステッピングモータの回転数と軸方向への移動距離を対応づけます.
    Screenshot-3.png
     台形ネジの精度が良くなく,ピッチが実測で3.965くらいらしいのでそのように設定します.
     Table Travelは実際の可動範囲の2倍に設定しました.これはデータによって可動範囲外に出たぞ,という警告が出てきて作業が進まなくなったからです.データの作り方や原点の合わせ方が間違っている可能性があるのでここは要検討です.
     Y軸はTable Travelは-300~300に設定し,それ以外はX軸と同じように設定しました.
     
     Z軸はこのようにしました.
    Screenshot-5.png

     「Test This Axis」というボタンを押して,移動量を決めてから試験的に各軸を動かしてみることができます.
     ちなみにY軸に関しては,ノギスを当てて移動距離を測ってみました.何回か繰り返しましたが,無負荷の状態では指令値との誤差は±0.02mm以下でした.ホントか?バックラッシを作るように動かしてから測っても同じでした.まぁ切削しながら測ってないからわからないです.
    sIMAG0161.jpg

     設定はこれで終わりです.
    Screenshot-6.png
     適用押します.
    [ 2012/12/08 03:21 ] CNC | TB(0) | CM(4)

    [C++]CSVファイルの読み込み

     CSVファイルを読み込んで,カンマを除いたデータを配列に書き込むプログラムです.
     Split(string &src, string key)でカンマの読み飛ばし,readCSV(string filename, int* p)でファイルのOpenと文字列データの数値への変換,配列への書き込みを行います.

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    #include <vector>

    using namespace std;

    vector<string> Split(string &src, string key);
    bool readCSV(string filename, int* p);

    int main(void){
    int data[256];//ファイルから読み込んだ数値を入れる配列

    readCSV("data.csv", data);//ファイルから読み込み

    //最初の10個を表示させてみる
    for(int i = 0; i < 10; ++i) {
    cout << data[i] << endl;
    }
    }

    bool readCSV(string filename, int* p) {
    fstream file;
    string str;

    file.open(filename.c_str(), ios::in);
    if(! file.is_open()) {
    return false;
    }

    while(getline(file, str)) {
    vector<string> str_line = Split(str, (string)",");
    int size = str_line.size();

    for(int i = 0; i < size; ++i) {
    stringstream sstr;
    sstr << str_line[i];
    sstr >> p[i];
    }
    p += size;
    }
    file.close();
    return true;
    }

    vector<string> Split(string &src, string key) {

    string str = src;
    vector<string> str_line;
    int str_len = str.length();
    int key_len = key.length();

    int index = 0;
    while(index < str_len) {
    int oldindex = index;
    index = str.find(key, index);
    index = (index == string::npos ? str_len : index);
    string tmp = str.substr(oldindex, index - oldindex);
    str_line.push_back(tmp);
    index += key_len;
    }
    return str_line;
    }

    [ 2012/11/30 02:15 ] C言語 | TB(0) | CM(0)


    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。