开源改变世界

webui、ftp、SD初步测试 #19

推推 grbl 3年前 (2023-02-08) 383次浏览
打开
karoria 打开了这个问题 2021 年 10 月 1 日 · 34条评论
打开

webui、ftp、SD初步测试#19

karoria 打开了这个问题 2021 年 10 月 1 日 · 34条评论

评论

webui、ftp、SD初步测试 #19
卡洛里亚 评论了 2021 年 10 月 1 日  

你好@terjeio
只是想分享我在webui、ftp和sd上玩了一段时间后的初步印象。

  1. FTP 就像一个魅力
  2. 通过 webui 和 ftp 从 sd 上传/删除文件都很完美。
  3. Webui 不响应文本框区域中的任何手动命令输入。
  4. 无法从 webui 运行程序。
  5. webui 中没有状态或坐标更新。
  6. 当我在浏览器中重新加载 webui 时,它挂起并且不显示任何数据。

看来,webui还在初期开发中。我想知道如何将 html、css、js 项目映射到内部绑定。我的意思是,如何托管服务器,使用网页向串行控制台发送命令,以便我 csn 设计自己的应用程序。

webui、ftp、SD初步测试 #19
贡献者

Webui 不响应文本框区域中的任何手动命令输入。

你的 websocket 端口是 81 吗?浏览器是否连接到它?以下是我在启动时在 Firefox 调试输出中获得的网络流量(使用 F12 打开):

webui、ftp、SD初步测试 #19

101 响应是您在打开 websocket 时希望看到的。

当我在浏览器中重新加载 webui 时,它挂起并且不显示任何数据。

它重新加载对我来说很好,查看调试输出有什么线索吗?

看来,webui还在初期开发中。

它是但应该可用,缺少的主要是访问控制——我没有花时间研究为什么它不起作用。身份验证似乎有效,因此修复起来应该不会太难。

我想知道如何将 html、css、js 项目映射到内部绑定。我的意思是,如何托管服务器,使用网页向串行控制台发送命令,以便我 csn 设计自己的应用程序。

目前您必须研究webui 服务器代码,也许还需要查看 webui 流量。
基本上你必须为不同的 uri 编写处理程序并将它们注册到 http 守护进程。基于请求 url,守护进程将回调适当的处理程序。提供文件很容易,动态内容有点复杂,因为守护进程只处理文件。因此,要么您必须将内容写入文件并返回该文件,要么像我所做的那样 – 捕获流输出并将其重定向到内存,然后从中返回数据,一个虚拟文件。有处理虚拟文件的函数调用,所以不太难。
webui_init ()函数注册处理程序并在driver_init()结束时调用功能。提示:如果您将初始化函数命名为my_plugin_init(),它将自动调用 – 无需更改任何代码。

顺便说一句,我昨天提交了更新 – 这允许将 WebUI 首选项保存到 www 文件夹。

webui、ftp、SD初步测试 #19
作者

抱歉回复你晚了@terjeio. 我无法检查你问的是什么。我的路由器有一些问题。然后我尝试使用交叉以太网电缆与 teensy4.1 直接通信但没有成功。我使用带有 USB 到以太网转换器电缆的 Mac。这会是个问题吗?另外,#define network_ipmode 值 0 和 1 都试过了。我非常熟悉 LAN 和 IP 地址分配。对于 dhcp 模式,我假设它接受 dhcp ip 分配而不是 dhcp 主机。我对吗?

webui、ftp、SD初步测试 #19
贡献者

我无法检查你问的是什么。

为什么不?您使用的是哪种浏览器?我相信现在大多数都有开发模式,F12 使用 Firefox 和 Edge 打开开发面板/窗口 – IIRC Chrome 以及其他可能。websocket 端口在控制器设置中 – $307。只需发送$307即可取回值或$307=81进行设置。如果更改它,请循环上电,因为它仅在启动时读取。

由于您已经启动并运行了 ftp 和 webui,因此您的其他网络设置都是正确的,因此无需更改它们。

对于 dhcp 模式,我假设它接受 dhcp ip 分配而不是 dhcp 主机。我对吗?

是的。

我想知道 PIO 是否使用最新的 Teensy 库,1.53 有间歇性延迟问题,这些问题已在 1.54 中修复。
第 14期看来,这一行似乎是这样的:framework-arduinoteensy 1.153.0 (1.53)这条评论中。这可能是个问题?

webui、ftp、SD初步测试 #19
作者

对不起,如果我无法正确解释你。我的意思是我的网络路由器出现故障,因此无法将我的 grblHAL 连接到我的 mac。无论如何,今天我会得到新的,但我仍然想知道与交叉电缆的直接连接及其设置。
不得不说,你不仅建设了一个精彩的项目,还是一个支持的“超人”。我可以看到你们“一人军”开发和维护的驱动数量。非常感谢这一切!

webui、ftp、SD初步测试 #19
作者

让我的路由器启动并运行。进一步使用 ip 和 webui。观察到以下情况:

  1. Websocket 连接在 chrome 开发者工具中显示失败。我将 ws 端口设置为 81。它显示:websocket 连接到 ‘ws://192.168.0.80:81/’ 失败。
  2. 只有在 my_machine.h 中将网络 ipmode 设置为 1 (dhcp) 时,网络才有效。我无法让它与静态 ip 一起工作。我想用交叉电缆直接通信。有什么线索吗?
    3.. Webui可以显示和上传文件,可以运行程序而不显示状态和轴位置。
webui、ftp、SD初步测试 #19
贡献者
  1. 你的$307设置是什么?应该是81。如果是您机器中的防火墙是否阻止端口 81 上的流量?如果流量通过您的路由器,它会阻止它吗?
  2. 静态 IP 对我有用(我没有使用专用以太网端口进行测试,但我认为它也可以)。请注意,在更改网络设置后,Teensy 需要重启电源,因为没有重置按钮。可以使用终端窗口中<ESC><CTRL>+ ,这将尝试冷重启。 这是通过辅助以太网端口吗?网络掩码、网关和 IP 地址都很好吗?平在工作?<T>
  3. 当 websocket 通信未启动时,这是可以预料的。

可以直接用wschat.html文件测试websocket通信,在103行编辑IP地址和端口号打开即可。

webui、ftp、SD初步测试 #19
作者
卡洛里亚 评论了 2021 年 10 月 2 日  

wschat.html 完美地连接和通信。但是对于webui,chrome开发者工具显示连接失败!
将对此进行更多挖掘,并会让您知道。
谢谢。
拉维

webui、ftp、SD初步测试 #19
贡献者

这很奇怪,当 webui 运行时,你能在另一个选项卡/窗口中连接 wschat.html 吗?

webui、ftp、SD初步测试 #19
作者

是的。我同时在 pc1 (windows) 中启动了 webui 并在 pc2 (mac) 中启动了 wschat.html。在 wschat 中获得成功。但是,观察到 webui 之前在 pc2 中不工作。因此,我对防火墙的疑虑较少,而对 webui 代码/库或其任何设置的疑虑更多,因为链接断开导致任何代码内的 ip 未更新?

webui、ftp、SD初步测试 #19
作者

我忘了检查同一台电脑,不同选项卡中的同一浏览器。明天会做,因为现在是晚上,我回到家了。

webui、ftp、SD初步测试 #19
贡献者

webui 中对 websocket 连接的响应是什么(查看开发输出)?
另外,请注意 websocket 一次只能为一个连接提供服务,因此请先从 webui 开始。

webui、ftp、SD初步测试 #19
作者

我确定我首先启动了 webui。它没有成功。然后我开始 wschat,这是成功的。明天将提供有关 webui 页面的开发工具信息的更多信息。

webui、ftp、SD初步测试 #19
作者
  1. 静态 IP 现在可以工作了。我对 301 美元设置的无知。我在 my_machine.h 中更改#define NETWORK_IPMODE,每次尝试时都重新编译并刷新。我忘记了 EEPROM 在闪烁时不会被擦除,它会记住旧设置。
  2. 我可以确认 webui 与首先在 chrome 浏览器上启动的 websocket 有问题。然后,在另一个选项卡中启动了成功连接的 wschat。
  3. 以下是开发工具日志:(
    索引):17 连接到开发板
    (索引):17 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36
    ( index):17 没有用于 websocket 的 IP,使用默认值
    (index):17 Socket 是 192.168.1.77:81
    (index):17 Fw identification:FW version:1.1f # FW target:grbl-embedded # FW HW:Direct SD # primary sd:/sd # secondary sd:none # authentication:no # webcommunication: Sync: 81# hostname:GRBL
    (index):17 Init UI
    (index):17 获取设置
    (index):17 获取宏
    (index):17获取首选项
    (索引):17 与“ws://192.168.1.77:81/”的 WebSocket 连接失败:
    startSocket @(索引):17
    (索引):17 ws 错误事件
    (index):17 Disconnected
    /macrocfg.json?1633243403758&PAGEID=:1 加载资源失败:服务器响应状态为 404(未找到文件)
    (index):17 错误 404:

    404:找不到请求的文件。

/preferences.json?1633243403760&PAGEID=:1 加载资源失败:服务器响应状态为 404(找不到文件)
(索引):17 错误 404:

404:找不到请求的文件。

(index):17 启用 ping
(index):17 .g, .G, .gco, .GCO, .gcode, .GCODE, .nc, .NC, .ngc, .NCG, .tap, .TAP, .txt , .TXT
(index):17 Socket is 192.168.1.77:81
(index):17 WebSocket connection to ‘ws://192.168.1.77:81/’ failed:
startSocket @ (index):17
(index):17 ws错误事件
(索引):17 断开连接
(索引):17 套接字为 192.168.1.77:81
(索引):17 WebSocket 连接到“ws://192.168.1.77:81/”失败:
startSocket @(索引):17
( index):17 ws error Event
(index):17 Disconnected
(index):17 Socket is 192.168.1.77:81
(index):17 WebSocket connection to ‘ws://192.168.1.77:81/’ failed:
startSocket @ ( index):17
(index):17 ws 错误事件
(index):17 Disconnected
(index):17 Socket is 192.168.1.77:81
(index):17 WebSocket connection to ‘ws://192.168.1.77:81/’ failed:
startSocket @ (index):17
(index) :17 ws 错误事件
(索引):17 断开连接
(索引):17 套接字为 192.168.1.77:81
(索引):17 WebSocket 连接到“ws://192.168.1.77:81/”失败:
startSocket @(索引) :17
(index):17 ws error Event
(index):17 Disconnected
(index):17 Socket is 192.168.1.77:81
(index):17 WebSocket connection to ‘ws://192.168.1.77:81/’ 失败:
startSocket @ (index):17
(index):17 ws error Event
(index):17 Disconnected
(index):17 Socket is 192.168.1.77:81
(索引):17 WebSocket 连接到 ‘ws://192.168.1.77:81/’ 失败:
startSocket @(索引):17
(索引):17 ws 错误事件
(索引):17 已断开连接
(索引):17 套接字是192.168.1.77:81
(索引):17 WebSocket 连接到 ‘ws://192.168.1.77:81/’ 失败:
startSocket @(索引):17
(索引):17 ws 错误事件
(索引):17 断开连接
(索引) ):17 Socket is 192.168.1.77:81
(index):17 WebSocket connection to ‘ws://192.168.1.77:81/’ failed:
startSocket @ (index):17
(index):17 ws error Event {isTrusted: true,类型:’error’,目标:WebSocket,currentTarget:WebSocket,eventPhase:2,…}
(索引):17 断开连接
(索引):17 套接字是 192.168.1.77:81
(索引):17 与“ws://192.168.1.77:81/”的 WebSocket 连接失败:
startSocket @(索引):17
(索引):17 ws 错误事件 {isTrusted:true,类型:“错误”,目标: WebSocket, currentTarget: WebSocket, eventPhase: 2, …}
(index):17 断开连接

webui、ftp、SD初步测试 #19
作者

如果有帮助,以下是 wschat 中的行(最新的在上面):

<空闲|MPos:-0.800,28.124,15.000|Bf:35,1023|FS:0,0|Pn:PXYZHS>
<空闲|MPos:-0.800,28.124,15.000|Bf:35,1023|FS:0, 0|Pn:PXYZHS|WCO:0.000,0.000,0.000|Ov:100,100,100>
<空闲|MPos:-0.800,28.124,15.000|Bf:35,1023|FS:0,0|Pn:PXYZHS>
<空闲|MPos :-0.800,28.124,15.000|Bf:35,1023|FS:0,0|Pn:PXYZHS>
[VER:1.1f.20210928:] [OPT:VNMSL,35,1024,3,0] [NEWOPT:ENUMS ,RT+,ES,TC,SED,ETH,FTP,SD] [FIRMWARE:grblHAL] [NVS STORAGE:*FLASH] [DRIVER:iMXRT1062] [DRIVER VERSION:210919] [DRIVER OPTIONS:USB.2] [BOARD:T41U5XBB ] [AUX IO:4,3,0,0] [NETCON:Websocket] [IP:192.168.1.77] [PLUGIN:KEYPAD v1.11] [PLUGIN:WebUI v0.01] [PLUGIN:SDCARD v1.02] ok
[消息:网络套接字流活动]

webui、ftp、SD初步测试 #19
作者

这就是我的 webui 屏幕显示的方式。坐标不在那里。“JOG”、“RUN”、“IDLE”等状态也不存在 。
webui、ftp、SD初步测试 #19

webui、ftp、SD初步测试 #19
贡献者

这很奇怪 – Chrome 问题?您是否尝试过使用其他浏览器?
是否有可能在开发输出中看到网络流量——是否有任何响应标头返回?如果是,请与 wschat.html 流量进行比较。“失败”没什么用。我想知道连接是否完全失败或者是否返回了状态代码。

这是在 websocket 连接上调用的函数,也是可以添加某种调试输出的地方。
一个简单的方法是打开洪水冷却剂:

coolant_state_t state = { .flood = 1 };
hal.coolant.set_state(state);

WebUI 中丢失的数据很容易解释,因为这些是从 websocket 流中提取的——没有连接,没有数据可以显示。

Yoy 可以忽略 404 响应 – 直到您在 WebUI 中保存首选项,这些才会显示。请注意,只有最新的提交才能保存这些。

webui、ftp、SD初步测试 #19
作者

我的天啊。正确的。铬问题。但我们不能真正称之为浏览器问题。wschat 在 chrome 中运行良好!我已经检查了 webui 工作的 safari 浏览器!但同样不适用于歌剧!我不擅长编码,但我会尝试自己找出问题。如果我能得到任何东西,我会在这里发布。我怀疑 index.html.gz 有问题。会挖掘更多。谢谢。

webui、ftp、SD初步测试 #19
贡献者

好的,这里有一个浏览器兼容性列表

index.html.gz是最小化 javascript 代码的压缩版本。这意味着当前的源代码是您必须深入研究的内容。

请注意,我只在提供的index.html.gz中将一些硬编码字符串更改为“grblHAL” ,我的计划是尝试为所有 grblHAL 设置添加适当的支持,我只是想看看如何构建它。

webui、ftp、SD初步测试 #19
作者

著名的。谢谢。

webui、ftp、SD初步测试 #19
作者

我认为,luc 主要为所有 ESP 板开发 ESP3D,这些 ESP 板的网络应用程序存储内存非常少,因此他可能选择了 gulp 和其他基于此的库。如果我们从一个完整的网络应用程序重新开始,它应该比理解和编辑 ESP3D 代码花费的时间更少(因为我们有足够的存储空间)。我具有开发 nodejs Web 应用程序的初级到中级技能。我真正不知道的唯一一件事是将服务器端代码绑定到 js。是否有现成的 api 可供我用作模板?

webui、ftp、SD初步测试 #19
贡献者

是否有现成的 api 可供我用作模板?

Websocket 通信可以“按原样”使用,因为它只是标准 grbl 请求/响应协议的串行流包装器。
然而,这个协议可能不是最容易在 javascript 中处理的,因为它需要自定义解析。基于 JSON 格式数据的协议会更容易吗?g2core有一个基于 JSON 的协议值得一看吗?

通过向核心添加一些函数指针,即使在运行时也可以用新的协议替换标准的 grbl 协议。这可能是核心的一部分或在插件中。

在协议之上使用 http 请求(rest API?)也可能是一种选择,WebUI 使用它但依赖于 websocket 连接来取回一些响应——也许是因为那是唯一可行的解​​决方案?

http 请求和响应有一个缺点——开销,这是您无法避免的。我不知道这是否是个问题,尤其是对于高速激光雕刻?

我不完全确定您将什么定义为 API,因为可能定义了多个级别的 API,如果从浏览器中看到,那么grblHAL WebUI API 可以作为一个示例,因为它解析 http 请求并通过 html 返回响应和一个 websocket 流。

webui、ftp、SD初步测试 #19
作者

好的。我的印象是您修改了 ESP3D 代码以适应 grblHAL 但现在我可以理解 server.c 是您作为“中间件”编写的文件。如果我错了,请纠正我。
我将尝试理解 server.c(我在 C 和 C++ 方面很差,所以这不是我的菜)以及 ESP3D webui(我对 html、css 和 js 精通,所以我能理解的更多).
我会玩几天,以获得更多的洞察力。如果我能得到有用的结果,我会很乐意为这个美妙的项目做出贡献。

webui、ftp、SD初步测试 #19
贡献者

如果我错了,请纠正我。

您是完全正确的,WebUI 代码(尚未)由我修改。server.c(和commands.c)是 WebUI 协议的后端/中间件。

webui、ftp、SD初步测试 #19
作者

谢谢(你的)信息。

webui、ftp、SD初步测试 #19
作者

让我告诉你,所有基于网络的协议都运行得非常快。之前我在 grbl_esp32 项目中使用了 ESP3D webui,但由于 wifi,文件上传速度非常慢。我总是喜欢 FTP 客户端(我使用 FileZilla),它在从 SD 上传和删除文件和文件夹时非常方便,并且使用 teensy4.1 的本地以太网,速度非常快。由于有以太网,webui 中的上传速度也很快。这是为了信息/反馈目的。

webui、ftp、SD初步测试 #19

我正在尝试激活 webui,但出现此错误

webui、ftp、SD初步测试 #19

我有 grblHAL Teensy 4.1 Pro 控制器

#define USB_SERIAL_CDC 2 // 1 个用于 Arduino 类库,2 个用于 PJRC C 库。注释掉以使用 UART 通信。
//#define USB_SERIAL_WAIT 1 // 在启动 grblHAL 之前等待 USB 连接。
//#define BLUETOOTH_ENABLE 1 // HC-05 模块设置为 1。需要并声明一个辅助输入引脚。
//#define HUANYANG_ENABLE 1 // Huanyang VFD 主轴设置为 1 或 2。启用主轴插件。
//#define MODBUS_ENABLE 1 // 自动方向设置为 1,辅助输出引脚上的方向信号设置为 2。
#define WEBUI_ENABLE 1 // 启用 ESP3D-WEBUI 插件以及网络和 SD 卡插件。
//#define WEBUI_INFLASH 1 // 将 WebUI 文件存储在闪存中而不是 SD 卡中。
#define ETHERNET_ENABLE 1 // 以太网流。启用网络插件。
//#define SDCARD_ENABLE 1 // 从 SD 卡运行 gcode 程序,启用 sdcard 插件。
//#define QEI_ENABLE 1 //启用正交编码器接口。最大值为 1。需要编码器插件。
//#define KEYPAD_ENABLE 1 // I2C 键盘设置为 1,串行数据等其他输入设置为 2
//#define PLASMA_ENABLE 1 // Plasma/THC 插件。要完成的。
//#define MCP3221_ENABLE 1 // 通过 MCP3221 ADC 启用模拟输入。
//#define PPI_ENABLE 1 // 激光 PPI 插件。要完成的。
//#define ODOMETER_ENABLE 1 // 里程表插件。
//#define OPENPNP_ENABLE 1 // OpenPNP 插件。要完成的。
//#define FANS_ENABLE 1 // 通过 M106/M107 启用风扇控制。启用粉丝插件。
#define EEPROM_ENABLE 1 // I2C EEPROM 支持。24LC16 (2K) 设置为 1,24C32(4K – 32 字节页面)设置为 3,其他大小设置为 2。启用 eeprom 插件。
//#define EEPROM_IS_FRAM 1 // 当启用 EEPROM 且芯片为 FRAM 时取消注释,以消除写入延迟。
//#define SPINDLE_SYNC_ENABLE 1 //启用主轴同步支持(G33,G76)。!!注意:Alpha 质量 – 仅为测试或验证启用。
// 目前仅适用于 BOARD_T41BB5X_PRO 和 BOARD_T41U5XBB_SS。
//#define ESTOP_ENABLE 0 // 启用后,只有实时报告请求才会在复位引脚有效时执行。
// 注意:如果留下注释,则默认设置由 COMPATIBILITY_LEVEL 确定。

// 如果所选的板图支持三个以上的电机联动和/或
轴的自动调整 // 可以在此处启用。
//#define X_GANGED 1
//#define X_AUTO_SQUARE 1
//#define Y_GANGED 1
//#define Y_AUTO_SQUARE 1
//#define Z_GANGED 1
//#define Z_AUTO_SQUARE 1
// 对于联动轴,限位开关输入(如果可用)可以配置为充当最大行程限位开关。
// 注意:如果板图已经定义了最大限制输入,则此配置将被忽略。
//#define X_GANGED_LIM_MAX 1
//#define Y_GANGED_LIM_MAX 1

喜欢 (0)