0

从鼠标我有一个看起来像这样的命令:

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

XY 和 Z 是变量并且不相同。他们每秒发出 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 编辑

嗨,伙计们,他们的方式即时缓冲确实有效,但对于我使用的应用程序它不起作用。我的意思是它对我试图用它做的事情没有任何影响。执行这些命令的机器人会做出令人震惊的动作。这是因为向它发送了很多命令。

我的问题似乎比我想的更难。我已经输入了一种通过 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(我无法更改传感器的采样率!!) 输出命令:应该是 1hz,最大为 3hz 什么是或可能使这个计数器增量如此之快?我没主意了。

我只是希望程序不发送或编写这么多命令。

4

1 回答 1

1

我认为这里的问题是,每次你想在文件中写一个新行时,你都会创建一个新的 writer。您应该只创建一次编写器,然后使用该实例进行编写。

比较这两个代码及其输出:(
也使用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--;
    }
于 2013-05-07T11:07:36.453 回答