2013-05-07 2 views
0

을 파일에 좌표를 변동. 매초마다 100 개의 명령이 나옵니다. 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 편집

안녕 얘들 아, 그들은 방법 메신저 버퍼링 작업을 수행하지만, 응용 프로그램에 대해 나는 그것을 나던 사용 작업. 내 말은 내가 그걸로하려고 한 것에 어떤 효과가 없다는 것을 의미한다. 이 명령을 실행하는 로봇은 충격적인 움직임을 만듭니다. 이것은 많은 명령이 그것에 보내지기 때문입니다.

내 문제는 내 생각보다 어렵다고 생각됩니다. 필자는 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 센서 !!의 샘플링 속도를 변경할 수 없다) 출력 커맨드 : 그것은 3HZ 의 최대 1Hz의처럼되어야 하는지를 이 카운터가 너무 빠르게 증가했거나 가능하게 만들 수 있습니까? 아이디어가 없다.

난 그냥 프로그램이 너무 많은 명령을 보내거나 쓰지 않기를 바란다.

답변

1

필자는 파일에 새 줄을 쓸 때마다 새로운 작성자를 만들 때마다 문제가 있다고 생각합니다. 작가를 한 번만 만들고 그 인스턴스로 글을 써야합니다. ,

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

예 :

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(); } 

나쁜 일 :

좋은 일 (대신 "\ n을"의 FileWriter.newLine() 사용) :

이 두 코드 및 출력을 비교 답변 주셔서 감사합니다. 그것은 일을했다. 그러나 불행히도 내가 기대했던 것이 옳은 것이 아닙니다. 이 프로그램은 버퍼링되었거나 값이 변경된 경우에도 계속 많은 좌표로 보내지 만 여전히 명령을 전송합니다. 이제는 오래된 좌표가 새로운 좌표와 같으면 보내지 말아야 할 몇 가지 방법을 넣어야합니다. –

관련 문제