评论
奇怪,可能是 Teensy 崩溃,但我不能立即理解为什么您在重新启动时收到 TSender 消息。如果在建立连接后串行端口上有传入数据(并且如果控制器重置,则在设置中指定的 resetdelay 之后显示此消息:应用程序)。 Tsender 是否在没有任何错误消息的情况下退出? |
顺便说一句,我将使用最新更新重建 grblHAL 并重新运行测试。 |
好吧,那么我相信这一定是由于从串行流(在控制器中)读取数据已经以某种方式一遍又一遍地重复序列而变得混乱。 我现在也在使用 USB 串行 2 进行测试,也许我应该终止它并使用 USB 串行 1 进行测试以避免重复工作? 作为旁注,可以提到我通过不处理错误而故意让 TSender 中的某些数据易受攻击(目前)——但是这应该会在退出前导致错误消息。如果发生这种情况,串行数据在链中某处出现乱码。我还没有决定发生这种错误时要采取什么行动——通常我不喜欢继续处理…… |
我用最新的更新重建了。(顺便说一句,需要一种方法来自动插入我的更改,如 ioports)。 我已将 USB Serial 设置为 1 并重新运行测试,所以继续你的测试。 |
我的测试在 4 小时以上后变得混乱,打开终端并看到与您类似的重复消息。我之前没有注意到(在您的屏幕截图中)第二个 Bf: 值在两个值之间交替,这可能是一个线索(第二个值是 RX 缓冲区中可用的字节数)。所以我发出了一个重置命令 (CTRL-X),因为这会刷新输入缓冲区 – 在 PJRC usb 驱动程序和由 grblHAL 添加的驱动程序中。奇怪的是,启动消息反复出现,表明重置命令以某种方式被重新读取。 这是 PJRC 驱动程序或我的代码中的错误吗?交替的 Bf: 值表示数据实际被读入 grblHAL RX 缓冲区。轮询数据时,我做的第一件事是获取 PJRC 驱动程序可用的字符数,如果没有可用的轮询则完全跳过。 我在 3 月 7 日改为获取可用字符数,因为我想从 PJRC 驱动程序读取一个数据块,以避免过于频繁地禁用中断(PJRC 驱动程序在读取单个字符时执行此操作)。从我阅读代码的方式来看,这让我想知道这是否是 PJRC 错误…… 我也对 USB 串行 1 进行了类似的更改,这也会失败吗? |
我的测试(USB Serial 1)已经运行了 2.5 小时。应该需要大约 12 小时。会让你知道会发生什么。 |
在稍微修改代码后,我运行了一个 USB Serial 2 测试以完成,在 MSP432 上并行运行的测试(TSender 在同一台机器上运行)也成功完成。 我所做的修改表明 PJRC 代码可能存在错误 – 或者它不是设计为在中断上下文中运行(轮询是从系统定时器中断完成的),即使 PJRC 声称如此。 修改后的代码:
原文(删除第一行,第二行更改):
代码更改是从 我将运行一些进一步的测试,看看从中断上下文运行轮询是否是这个问题背后的真正原因,或者 PRJC 驱动程序中是否存在一个简单的错误。 USB Serial 1 轮询是从前台进程完成的,如果这没有失败,我不会感到惊讶。 |
使用 USB 串行 1,我现在进行了 14 1/2 小时的测试运行(忘记覆盖进给率)。所以,你是对的,没有失败。推送更改后,我将重建并使用 USB Serial 2 进行测试。 顺便说一下,Teensy 4.1 正在进行 Beta 测试,我已经申请了 Beta 副本。希望我能得到一个。它肯定会支持以太网,因此您肯定会从我这里听到一些关于此的问题。 |
提交cc7c59a应该有望结束 USB 传奇。我对 USB 1 和 2 进行了多次长时间测试,没有出现任何问题。 PJRC 驱动程序不喜欢在中断上下文中运行,我猜 USB IRQ 的优先级低于系统定时器 IRQ,这就是它随机失败的原因。 |
好的,今天将下载、构建和测试。感谢您解决这个问题,这不是一个简单的问题。 |
我不知道这是 grblHAL 问题还是 TSender。我一直在尝试获得一个易于重现的案例,但遇到了一些麻烦。现在有几次长时间运行的作业,TSender 将退出,当我重新启动时,我收到此消息。 关闭消息框没有任何作用——我必须重新启动 Teensy 才能让它运行。附加的 zip 包含一个长文件(同心圆作为片段 fr5000.cnc)似乎经常重现问题。同心圆分段 fr5000.zip
我一直在开启主动缓冲并将进给率覆盖率调至 200% 的情况下运行。
有时 TSender 不会退出,只是停止。运行时间停止前进,开始/停止/保持按钮什么都不做。文件打开不执行任何操作。重新启动 TSender 获取 MPG 模式消息。
请注意,我尚未将 grblHAL 更新为最新更改。