注释
作者
好吧,我想我正在使用现有的 GRBL 控制器。我正在使用 grbl 1.1 |
所有者
你的代码在github上吗?如果我回顾一下您的使用方式,可能会更容易。 您可以在 ugs-platform 目录中查看 |
作者
好吧,我对编码很陌生。但是我的代码不长,所以如果你能从这里检查它,我会很高兴。 public class UGS implements ControllerListener, UGSEventListener {
public Settings settings;
BackendAPI backend;
String gcodeFile = null;
String processedGcodeFile = null;
String srp="ready";
@SuppressWarnings("unchecked")
public static void main(String args[]) {
LogManager.getLogManager().reset();
Logger globalLogger = Logger.getLogger(java.util.logging.Logger.GLOBAL_LOGGER_NAME);
globalLogger.setLevel(java.util.logging.Level.OFF);
new UGS();
}
/** Creates new form MainWindow */
public UGS() {
LogManager.getLogManager().reset();
Logger globalLogger = Logger.getLogger(java.util.logging.Logger.GLOBAL_LOGGER_NAME);
globalLogger.setLevel(java.util.logging.Level.OFF);
GUIBackend backend = new GUIBackend();
this.backend = backend;
this.settings = SettingsFactory.loadSettings();
try {
backend.applySettings(settings);
} catch (Exception e) {}
backend.addControllerListener(this);
backend.addUGSEventListener(this);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
settings.setPort("/dev/ttyACM0");
settings.setPortRate("115200");
settings.setFirmwareVersion("GRBL");
SettingsFactory.saveSettings(settings);
}
});
try {
this.backend.connect("GRBL", "/dev/ttyACM0", 115200);
Thread.sleep(8000);
} catch (Exception e) {}
}
public void sendCommand(String command) throws Exception {//GEN-FIRST:event_sendButtonActionPerformed
srp="ready";
this.backend.sendGcodeCommand(command);
}//GEN-LAST:event_sendButtonActionPerformed
public void sendGcodeFile(File gcodeFile) {//GEN-FIRST:event_sendButtonActionPerformed
try {
backend.setGcodeFile(gcodeFile);
this.backend.send();
srp="process";
} catch (Exception e) {}
}//GEN-LAST:event_sendButtonActionPerformed
public void sendPauseResume(String state) {
try {
srp=state;
this.backend.pauseResume();
} catch (Exception e) {
System.out.println("Pause/Resume Failed");
}
}
public String returnsrp(){
return srp;
}
@Override
public void fileStreamComplete(String filename, boolean success) {
System.out.println(""+success);
}
@Override
public void controlStateChange(ControlState state) {}
@Override
public void commandSkipped(GcodeCommand command) {
System.out.println("skipped : "+ this.backend.getNumRemainingRows() + " // "+ this.backend.getNumRows());
}
@Override
public void commandSent(final GcodeCommand command) {}
@Override
public void commandComment(String comment) {
}
@Override
public void commandComplete(final GcodeCommand command) {
System.out.println("complete : "+ this.backend.getNumRemainingRows() + " // "+ this.backend.getNumRows());
}
@Override
public void messageForConsole(final MessageType type, final String msg) {}
@Override
public void statusStringListener(ControllerStatus status) {}
@Override
public void postProcessData(int numRows) {}
@Override
public void UGSEvent(UGSEvent evt) {}
}
|
所有者
这有点棘手,但我会尽力描述情况。 当 GRBL 处理了来自它的接收缓冲区的消息时,它返回 那么该怎么办呢。更新程序状态的最简单方法是使用 @Override
public void UGSEvent(UGSEvent evt) {
if(evt.isSettingChangeEvent()) {
updateSettings();
}
}
在内部
具体针对您关于“我什么时候可以发送另一个文件”的问题,这里是我如何启用“发送”按钮(它对发送和恢复有双重作用): @Override
public boolean isEnabled() {
return backend.canSend() || backend.isPaused();
}
@Override
public void actionPerformed(ActionEvent e) {
try {
if (backend.isPaused()) {
backend.pauseResume();
} else {
backend.send();
}
} catch (Exception ex) {
GUIHelpers.displayErrorDialog(ex.getLocalizedMessage());
}
}
|
作者
谢谢你的帮助。我不是一个足够好的编码员来理解你的想法并将其应用到我的项目中。我决定尝试使用 softreset 来解决我的问题。它可能真的很笨,但它似乎在工作。
|
所有者
@trbLeeciN你只需要这样的东西,你只能在正确的时间点击发送按钮:
|
你好,我结束了另一个问题。当我尝试多次(一个接一个)发送文件时。我有时会收到“已经流式传输”的问题。再次尝试发送文件时。
我编辑了以下内容;
检查remaninrows是否变为0。即使 remainingrows 变成 0,filestreamcomplete 也没有调用,所以我无法继续发送文件。
你能为此提出任何解决方案吗?非常感谢您的建议和您以前的解决方案..