2013-05-07 2 views
0

С помощью мыши у меня есть команда, которая выглядит следующим образом:записи колеблются координаты в файл

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

The X Y и Z являются varaibles и не являются одинаковыми. Они выходят с 100 командами movej каждую секунду. Если я использую bufferwrite для записи в файл, он только записывает последнюю известную команду. Я хочу записывать как каждую команду и записывать ее в файл (даже если это то же самое!). Это должно выглядеть так:

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 EDIT

Привет ребята, они, как им буферизация делает работу, но для приложения я использую его оленья кожа Работа. Я имею в виду, что это не влияет на то, что я пытался с ним делать. Робот, выполняющий эти команды, делает ударное движение. Это связано с тем, что многие команды приписываются ему.

Моя проблема кажется более трудной, чем я думаю. Ive положил метод, который посылает координаты через порт TCP/IP, а также предикативный для записи в файл. Поскольку то, что я пытался сделать с записью в файл, - это понять, что было с ним связано. Ive противодействовал каждой команде, которая была отправлена ​​в файл и в порт TCP.

Оба пишут simoustainly в файле и в 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 (я не могу изменить частоту дискретизации датчика !!) команда выхода: она должна быть как 1Гц максимум 3 Гц Что может или может сделать это счетчик так быстро? Я из идей.

Я просто хочу, чтобы программа не отправляла и не писала так много команд.

ответ

1

Я думаю, проблема в том, что каждый раз, когда вы хотите написать новую строку в файл, вы создаете нового автора. Вы должны создать запись только один раз, а затем написать письмо с этим экземпляром.

Сравните эти два кода и их вывод:
(также использовать FileWriter.newLine() вместо "\ п")
Хорошая один:

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

Да, Спасибо за ваш ответ. Это сработало. Но, к сожалению, это было неправильно, чего я ожидал от этого. Программа продолжает отправлять большие координаты, даже если она буферизована или значение было изменено, она по-прежнему отправляет команды. Теперь я должен поместить некоторый метод в том, что говорит, если старая координата равна new, тогда не отправляйте. –

Смежные вопросы