2013-05-07 61 views
0

從鼠標我有一個看起來像這樣的命令:寫波動座標文件

movej([100, 200, 300, 1, 2, 1])= [X, Y, Z, RX, TX, RX]. 

的X,Y和Z是varaibles並且是不一樣的。他們每秒發出100個movej命令。如果我使用緩衝寫入寫入文件,它只寫入最後一個已知的命令。我想記錄每個命令並將其寫入文件(即使它是相同的!)。它應該看起來像這樣:

movej([100, 200, 300, 1, 2, 1])= [X, Y, Z, RX, TX, RX] 
movej ..... 
movej...... 
movej...... 
movej([120, 220, 330, 1, 2, 1])= [X, Y, Z, RX, TX, RX] 

我需要更改哪些代碼?

File file = new File("GcodeCoordinaten.txt"); 

    // if file doesnt exists, then create it 
    if (!file.exists()) { 
     file.createNewFile(); 
    } 

    FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
    //BufferedWriter bw = new BufferedWriter(fw); 
    fw.write(Gcode+"\n"); 
    fw.flush(); 
    //fw.close(); 

    System.out.println("Done"); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

的命令是從的MouseEvent來,其格式如下:

 Gcode = string.format("movel(p[0.%d,-0.%d, 0.%d, -0.5121, -3.08, 0.0005])"+"\n", coX1, coY1, 150); . 

2E編輯

嗨,大家好,他們的方式IM緩衝的工作,但對於應用程序,我用它不工作。我的意思是它對我試圖用它做的沒有任何影響。執行這些命令的機器人會發生震動。這是因爲許多命令都被髮送給它。

我覺得我的問題似乎比較困難。我已經提出了一個方法,通過TCP/IP端口發送座標,還有一個方法是寫入文件。正如我試圖寫入文件所要做的是理解發送給它的內容。我已經反擊了每個寫入文件和TCP端口的命令。

兩者都正在同步寫入文件和TCP端口。計數器每秒增加3000次以上!是什麼導致這種高增量?

的代碼看起來是這樣的:

  while(true){     // true when mouse is connected                  
     if (listen1.newdata = true){ // listener from the mouse/sensor 
        coX1 += getX(); 
        coY1 += getY(); 
       bufferX = coX1; 
       bufferY = coY1; 
       count++; 
       } 
       if(count == 100){ 
       averageX = bufferX/100; 
       averageY = bufferY/100; 
       newdata = true; 
       coY1 = 0; 
       coX1 = 0; 

       } 
      if (newdata = true){ 
       send(Gcode);   //This one sends to tcp/ip 
        write(Gcode;  // this one writes to file 
        counter++;   // This counter increments by more then 3000 p/s 
       } 

輸入傳感器:100Hz的(I不能改變傳感器!!的採樣率) 輸出命令:它應該是這樣的1Hz,最大的3HZ 什麼是或可能使這個計數器增量如此之快?我沒有想法。

我只是想讓程序不發送或寫入這麼多的命令。

回答

1

我認爲這裏的問題是,每次你想寫一個新行到你創建一個新的作家的文件。你應該只創建一次作家,然後用該實例寫作。

比較這兩種代碼及其輸出:
(還可以使用FileWriter.newLine()代替 「\ n」)
好一個:

int i = 100; 
    try { 
     File file = new File("GcodeCoordinaten.txt"); 

     // if file doesnt exists, then create it 
     if (!file.exists()) { 
      file.createNewFile(); 
     } 

     FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
     //BufferedWriter bw = new BufferedWriter(fw); 
     while (i > 0) { 
      fw.write("" + i + "\n"); 
      i--; 
     } 
     fw.flush(); 
     //fw.close(); 

     System.out.println("Done"); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

壞一個:

int i = 100; 
    while (i > 0) { 
     try { 
      File file = new File("GcodeCoordinaten.txt"); 

      // if file doesnt exists, then create it 
      if (!file.exists()) { 
       file.createNewFile(); 
      } 

      FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
      //BufferedWriter bw = new BufferedWriter(fw); 
      fw.write("" + i + "\n"); 
      fw.flush(); 
      //fw.close(); 

      System.out.println("Done"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     i--; 
    } 
+0

是,謝謝您的回答。它完成了這項工作。但不幸的是,這並不是我所期望的。程序一直髮送到很多座標,即使它被緩衝或者數值已被改變,它仍然在發送命令。現在我必須說一些方法,如果舊座標等於新然後不發送。 – 2013-05-08 10:39:33