开源改变世界

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422

推推 grbl 2年前 (2023-02-04) 223次浏览
关闭
DouglasPearless 打开了这个问题 2017 年 10 月 6 日 · 57条评论
关闭

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据#422

DouglasPearless 打开了这个问题 2017 年 10 月 6 日 · 57条评论

评论

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
道格拉斯·皮勒斯 评论了 2017 年 10 月 6 日  

场景:
(1) LW 最新版本在 OSX 或 Linux (Ubuntu) 上运行
(2) Emblaser 2 使用 ESP8266 websocket 或 telnet(两种连接类型的情况相同)- 注意我已经为 ESP8266 实现了 telnet。
(3) 使用 ESP8266 或 telnet 正确连接
(4) 作业在停止前启动并运行一段随机时间,有时运行成功完成
(5) 检查 ESP 到 LW 的串行通信我观察到 Smoothie 从<Run to <Idle 根据 Smoothie 的固件,这意味着它已经清空了缓冲区并且没有从 LW 接收到更多数据

想法?

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422 DouglasPearless 更改了标题 lw.comm-server 通过作业部分关闭套接字/telnet 会话 lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 2017 年 10 月 6 日
lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员

ESP8266 和 Telnet 通信尚未完全测试。它们处于测试阶段,将在未来的版本中正式发布。

你所描述的听起来像是通信稳定性问题。gcode文件缓存在lw.comm-server中,逐行发送给机器。服务器首先发送几行来填充固件的规划器队列,然后等待“ok”发送下一行(依此类推)。如果没有收到所有的 ok,当规划器队列变空时,服务器会失去同步并停止工作。发生这种情况时,您应该能够暂停并恢复以重新启动命令流。你能检查一下吗?

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
作者
道格拉斯·皮勒斯 评论了 2017 年 10 月 6 日 通过电子邮件
lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员

如果您能向我发送一份通信日志文件,可能会有所帮助。

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422

嗨,克劳迪奥,

在阅读 lw-comms.server 源代码时,我注意到似乎有各种超时,所以我去了:

cd /Applications/LaserWeb.app/Contents/MacOS
export LOG_LEVEL=3
export SMOOTHIE_WAIT_TIME=5
./LaserWeb

我第一次能够端到端地运行 5 分钟的工作。:-)

然后我尝试了一个非常大的 50mb 文件,它运行了很长一段时间然后停止了,我无法暂停-恢复以使其继续,我确实在 logfile.txt 中注意到了这一点:

2017-10-06 10:53:39 Sent: X208.00 S0.0967 Q: 3120068
2017-10-06 10:53:39 Telnet: X208.00 S0.0967
2017-10-06 10:53:39 Telnet: 
2017-10-06 10:53:39 Telnet: ok
2017-10-06 10:53:39 Sent: X208.10 S0.0810 Q: 3120068
2017-10-06 10:53:39 Telnet: X208.10 S0.0810
2017-10-06 10:53:39 Telnet: 
2017-10-06 10:53:39 Telnet: get statuos
2017-10-06 10:53:39 Telnet: k
2017-10-06 10:53:39 Telnet: <Run,MPos:207.2342,56.2275,10.0000,WPos:207.2342,56.2275,10.0000>
2017-10-06 10:53:39 Telnet: 
2017-10-06 10:53:40 Telnet: get status
2017-10-06 10:53:40 Telnet: 
2017-10-06 10:53:40 Telnet: <Idle,MPos:208.1000,56.2500,10.0000,WPos:208.1000,56.2500,10.0000>
2017-10-06 10:53:40 Telnet: 
2017-10-06 10:53:40 Telnet: get status
2017-10-06 10:53:40 Telnet: 
2017-10-06 10:53:40 Telnet: <Idle,MPos:208.1000,56.2500,10.0000,WPos:208.1000,56.2500,10.0000>

特别感兴趣的是:

2017-10-06 10:53:39 Telnet: get statuos
2017-10-06 10:53:39 Telnet: k

想法?

如果你愿意,我可以发送整个 logfile.txt :-)

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422

我只是重新运行了大型作业和同样的事情:

2017-10-06 11:10:05 Telnet: ok
2017-10-06 11:10:05 Sent: X288.30 S0.5647 Q: 3120068
2017-10-06 11:10:05 Telnet: X288.30 S0.5647
2017-10-06 11:10:05 Telnet: 
2017-10-06 11:10:05 Telnet: get statutsk
2017-10-06 11:10:05 Telnet: 
2017-10-06 11:10:05 Telnet: <Run,MPos:287.8671,50.0313,10.0000,WPos:287.8671,50.0313,10.0000>
2017-10-06 11:10:05 Telnet: 
2017-10-06 11:10:05 Telnet: get status
2017-10-06 11:10:05 Telnet: 
2017-10-06 11:10:05 Telnet: <Idle,MPos:288.3000,50.0500,10.0000,WPos:288.3000,50.0500,10.0000>
2017-10-06 11:10:05 Telnet: 
2017-10-06 11:10:05 Telnet: get status

如果看起来(也许)没有得到“确定”,则需要重试 X 次?

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员

第一个日志看起来像 o 是在“status”的最后一个 s 之前收到的。在第二种情况下,状态和 o 之后的 LF 被完全遗漏了。这表明存在可能影响发送的 gcode 的一般通信问题。我什至不确定 telnet 是否是此类文件流的不错选择。

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员

您是否尝试过通过 websockets 进行正常的 ESP8266 通信?

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员
开胃菜 评论了 2017 年 10 月 6 日  

串行(ESP8266 上的 RX/TX)绝对需要 ok,因为这是唯一的流量控制。

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员

USB 通信具有额外的硬件流控制,可避免缓冲区溢出。

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
作者
道格拉斯·皮勒斯 评论了 2017 年 10 月 7 日  

好的,同样的问题发生在 WebSockets 上,一个相对简单的解决方案(不知道源代码 :-) )可能是这样的伪代码:

while running
  if (return_code_from_smoothie <> "ok")  //note it is likely that the command sent was executed but the reply lost
    {
        if ((status == "<Idle") ||(status == "<Run"))  //note this is just the first few characters of the string returned
             {
                    return_code_from_smoothie = "ok";   //clean up the lack of flow control
              }
    }
lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员
开胃菜 评论了 2017 年 10 月 7 日  

不,这行不通。您将失去同步并溢出固件缓冲区。状态报告(运行/空闲/位置)由独立于 gcode 执行速度的计时器查询。因此,您可以在等待一个 gcode 完成时获得多个状态报告。如果您在每个空闲或运行状态下发送新的 gcode 行,您将溢出固件缓冲区。

修补是没有意义的。您需要解决通信问题(加扰/丢失数字)。我相信这是由 ESP8266 代码引起的,因为它根本没有流量控制。

您是收集接收到的字符直到得到一个 \n 然后将空行发送到一个,还是只是通过每个接收到的字符的路径?

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
成员

顺便说一句:您可以将 Raspberry Pi 连接到机器的 USB 端口,在 Pi 上执行 lw.comm-server 并在任何网络 pc 上运行前端。这工作稳定。

lw.comm-server 在作业中途停止通过 websocket / telnet 会话发送数据 #422
合作者

这是ESP8266短缺的问题。关闭。