Deprecated: Required parameter $default follows optional parameter $size in /www/wwwroot/grbl.cc/wp-content/themes/Git-alpha/include/avatar.php on line 78

Deprecated: Required parameter $alt follows optional parameter $size in /www/wwwroot/grbl.cc/wp-content/themes/Git-alpha/include/avatar.php on line 78
已经流媒体问题 #675 | GRBL官方网站
    开源改变世界!!

已经流媒体问题 #675

推推 grbl 2年前 (2023-01-27) 141次浏览
关闭
trbLeeciN 打开了这个问题 2017 年 6 月 19 日 · 7条评论
关闭

已经流媒体问题#675

trbLeeciN 打开了这个问题 2017 年 6 月 19 日 · 7条评论

注释

已经流媒体问题 #675

你好,我结束了另一个问题。当我尝试多次(一个接一个)发送文件时。我有时会收到“已经流式传输”的问题。再次尝试发送文件时。
我编辑了以下内容;

@Override
public void commandSkipped(GcodeCommand command) {
	System.out.println("skipped : "+ this.backend.getNumRemainingRows() + " // "+ this.backend.getNumRows());
}

@Override
public void commandComplete(final GcodeCommand command) {
	System.out.println("complete : "+ this.backend.getNumRemainingRows() + " // "+ this.backend.getNumRows());
}

@Override
public void fileStreamComplete(String filename, boolean success) {
    System.out.println(""+success);
}

检查remaninrows是否变为0。即使 remainingrows 变成 0,filestreamcomplete 也没有调用,所以我无法继续发送文件。
你能为此提出任何解决方案吗?非常感谢您的建议和您以前的解决方案..

已经流媒体问题 #675
所有者

http://winder.github.io/ugs_website/dev/backend_development/#communicator

您是在实施新控制器,还是使用现有的 GRBL 控制器?如果您使用的是 GRBL,那么 GRBL 的版本是什么?

已经流媒体问题 #675
作者

好吧,我想我正在使用现有的 GRBL 控制器。我正在使用 grbl 1.1

已经流媒体问题 #675
所有者

你的代码在github上吗?如果我回顾一下您的使用方式,可能会更容易。

您可以在 ugs-platform 目录中查看MainWindow.java或 grep for backend,了解它在 UGS 平台中用于完成特定任务的所有方式。

已经流媒体问题 #675
作者
三明治 评论了 2017 年 6 月 19 日  

好吧,我对编码很陌生。但是我的代码不长,所以如果你能从这里检查它,我会很高兴。

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) {}
    
    
}
已经流媒体问题 #675
所有者
绕线机 评论了 2017 年 6 月 19 日  

这有点棘手,但我会尽力描述情况。

当 GRBL 处理了来自它的接收缓冲区的消息时,它返回ok。这并不意味着该命令已完成执行,而是意味着 GUI 可能会发送更多命令。在 UGS 中,当ok收到an 时commandComplete触发回调,在最后一个命令中,您将看到getNumRemainingRows返回零。因此,即使 UGS 表示没有剩余,可能仍有活动命令正在完成。

那么该怎么办呢。更新程序状态的最简单方法是使用UGSEvent回调。那是“最新的”,因此是回调中最好的想法。在我的模块中,我通常会有这样的东西:

    @Override
    public void UGSEvent(UGSEvent evt) {
        if(evt.isSettingChangeEvent()) {
            updateSettings();
        }
    }

在内部updateSettings(),我将使用这些辅助方法来确定要启用的内容:

    // Controller status
    public boolean isConnected();
    public boolean isActive();
    public boolean isSendingFile();
    public boolean isIdle();
    public boolean isPaused();
    public boolean canPause();
    public boolean canCancel();
    public boolean canSend();
    public ControlState getControlState();

具体针对您关于“我什么时候可以发送另一个文件”的问题,这里是我如何启用“发送”按钮(它对发送和恢复有双重作用):

    @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());
        }
    }
已经流媒体问题 #675
作者
三明治 评论了 2017 年 6 月 20 日  

谢谢你的帮助。我不是一个足够好的编码员来理解你的想法并将其应用到我的项目中。我决定尝试使用 softreset 来解决我的问题。它可能真的很笨,但它似乎在工作。

public void commandComplete(final GcodeCommand command) {
	System.out.println("complete : "+ this.backend.getNumRemainingRows() + " // "+ this.backend.getNumRows());
	if(this.backend.getNumRemainingRows()==0){
		try {
			System.out.println(this.backend.isSendingFile());
			//this.backend.
			backend.issueSoftReset();
		} catch (Exception e) {
		}
	}
}
已经流媒体问题 #675
所有者

@trbLeeciN你只需要这样的东西,你只能在正确的时间点击发送按钮:

    @Override
    public void UGSEvent(UGSEvent evt) {
        if(evt.isSettingChangeEvent()) {
            <<your send button>>.setEnabled(backend.canSend());
        }
    }