Contact me: hankecnc@gmail.com

挂件 Web 界面 – 问题 #1121

推推 grbl 3年前 (2023-02-02) 201次浏览
打开
qvisionsa 开了这个issue 2018 年 12 月 30 日 · 74条评论
打开

挂件 Web 界面 – 问题#1121

qvisionsa 开了这个issue 2018 年 12 月 30 日 · 74条评论

评论

挂件 Web 界面 - 问题 #1121
qvisionsa 评论了 2018 年 12 月 30 日  

我正在为 bCNC Pendant 编写一个新的 Web 界面,使用 bootstrap 4 和很棒的字体。
在不使用 bCNC 网络服务器的情况下测试界面时,一切看起来都很好。
使用 bCNC 网络服务器,我错过了 font awesome 中的所有图标。是否有一些我必须更改或添加的配置参数?

挂件 Web 界面 - 问题 #1121
合作者
哈维 评论了 2018 年 12 月 30 日  

你好!谢谢你的关注。
请协调你的努力@PCSDIAS#930
,我很想拥有带有 2D 操纵杆垫的漂亮网络吊坠,我可以用单指轻松地慢跑,而无需看手机。

挂件 Web 界面 - 问题 #1121
合作者

我想念 font awesome 中的所有图标

请检查图标是否使用正确的 mime 类型 HTTP 标头提供。

挂件 Web 界面 - 问题 #1121

是否可以与我们分享 html、js 和 css 文件?

挂件 Web 界面 - 问题 #1121
作者
qvisionsa 评论了 2019 年 1 月 1 日 通过电子邮件
挂件 Web 界面 - 问题 #1121
作者

这是我的第一种机器控制方法。如您所见,我计划使用选项卡实现界面。屏幕截图适用于 iphone 6。
我想听听您的建议。
挂件 Web 界面 - 问题 #1121
挂件 Web 界面 - 问题 #1121

挂件 Web 界面 - 问题 #1121

在 bCNC GUI 中没有什么可发明的。恕我直言,原始布局只有两个问题:1. 调整大小在手机屏幕上效果不佳,2. 笨拙的慢跑控制。
您打算如何在您的项目中解决这些问题?

挂件 Web 界面 - 问题 #1121
作者

我将尝试解决的第一个问题(我已经足够接近了)是为小型设备调整屏幕大小。
第二个问题是小型设备的屏幕空间不足以容纳所有控件。我使用选项卡并用指尖在它们之间切换的方法为我们提供了在 Web 挂件上进行更多控制的方法。
一旦我完成编码,我会通知你。

挂件 Web 界面 - 问题 #1121
PCSDIAS 评论了 2019 年 1 月 1 日 通过电子邮件
挂件 Web 界面 - 问题 #1121
作者

@PCSDIAS @Harvie 感谢您分享您的解决方案。恕我直言,这些按钮彼此非常靠近,并且在某种程度上令人困惑。我尽量让按钮之间有距离以避免发生事故。
下面的屏幕截图是我开始实施的第二个选项卡。旋转拨盘将根据滑块给出的步进移动龙门架 (XYZ)。
挂件 Web 界面 - 问题 #1121

关于虚拟摇杆,我会尝试以下内容:http:
//yoannmoinet.github.io/nipplejs/#demo

挂件 Web 界面 - 问题 #1121
合作者
哈维 评论了 2019 年 1 月 3 日  

@PCSDIAS @qvisionsa我真的没有时间做这件事,但既然有你们两个,我希望你们能就必须做的事情达成一致,并根据你们俩的最佳想法制作一个吊坠。

我认为如果我们可以像这样在 1D 和 2D 操纵杆之间切换会很好:

http://jeromeetienne.github.io/virtualjoystick.js/examples/basic.html

有时我真的很喜欢以一定角度慢跑,尤其是当我使用慢跑来手动磨掉一些缺陷时。但我知道能够仅将慢跑锁定到单轴也很重要。但是这样的操纵杆代码可以重复用于 1D 和 2D 慢跑。

我很期待看到你们两个能一起想出什么。如果可以的话,我会很乐意合并这样的代码。

挂件 Web 界面 - 问题 #1121
PCSDIAS 评论了 2019 年 1 月 3 日  

@qvisionsa @Harvie由于有与社区共享最终代码的意图,我认为事先就最少的约束和目标达成一致将有利于我们的成功。

这是我的建议。

  1. Pendant 必须能够在常见的浏览器和移动操作系统上运行。
  2. 挂件必须最多适合两页,无需在目标屏幕上左右或上下滚动。
  3. 页面必须全屏显示,以节省空间并避免分心。
  4. 在两页的情况下,主要页面必须显示最常用的命令。较少使用的命令必须留给二级页面。
  5. 从一页切换到另一页必须很容易完成。
  6. 页面不得使用任何 Internet 资源才能正常运行。
  7. 按钮必须清楚地标示并且彼此区分。
  8. 具有“正常”视力的人必须在 1 米(3 英尺)外清楚地看到按钮和信息标签。
  9. 点动控制必须同时在 X 和 Y 方向上启动,用户可以选择仅在一个轴上锁定运动。Z 轴点动将独立于 X 和 Y 轴进行控制。
  10. 点动速度由操纵杆实际位置和静止位置之间的距离根据非线性定律控制,以允许缓慢(精细)和快速(粗略)位置调整。
  11. ‘$J=’ 和 0x85 Ascii 实时命令必须用于启动和取消点动。用于启动和停止点动运动的命令必须与 CNC 控制板上运行的固件和版本一致。如果可能,代码必须识别固件并自动选择适当的点动方法。否则,将需要用户输入。
  12. 必须提供“manifest.json”文件以允许将吊坠安装为 Web 应用程序。
  13. 尽可能将断电循环后所需的信息存储在浏览器中,而不是存储在arduino闪存中,以延长其寿命。

这就是我此刻能想到的。请仅将其视为起点。

挂件 Web 界面 - 问题 #1121
合作者
哈维 评论了 2019 年 1 月 4 日  

‘$J=’ 和 0x85 Ascii 实时命令必须用于启动和取消点动。

请注意,bCNC 还支持 Grbl 0.x 和 Smoothieboard,这是不可用的。
因此,这些情况应该有回退。

挂件 Web 界面 - 问题 #1121
合作者
哈维 评论了 2019 年 1 月 4 日  

@PCSDIAS您应该可以编辑自己的评论。点击评论一角的三个点。我已经为你编辑了。

请参阅:
https ://github.com/vlachoudis/bCNC/tree/master/bCNC/controllers

有一个 _GenericController.py文件,我在其中使用了通用的慢跑方法G0
然后是GRBL1.py,我在其中覆盖了该方法以使用$J=
这就是我实现各种控制器之间差异的方式。如果控制器不提供自己的点动方法,它会从通用方法中获取。还有通用的 grbl,它被 GRBL0 和 GRBL1 继承,除非其中之一覆盖它。

现在,如果我调用self.app.mcontrol.jog("X%s"%(self.step.get())),则对 smoothieware 执行不同的代码,对 grbl1 执行不同的代码。自动检测已经存在。只需将您的代码放在正确的类中,当您切换控制器时,一切都会自动切换。这也使得 WAAAY 更容易添加对新控制器的支持。

因此,如果您实现控制器特定代码,则必须以这种方式完成。我不想if在其余的 bCNC 代码中有疯狂的树。那太乱了,难以维护,我很高兴我们摆脱了它。我花了很多时间来解决这个问题。

挂件 Web 界面 - 问题 #1121
作者

@PCSDIAS @Harvie
我读了写的建议@PCSDIAS我认为我们可以实施。
问题是什么@Harvie建议。我在我的机器上使用 xPro v2 控制器。我无法测试其他控制器。我们应该怎么做?(我还应该提醒你,我是 python 的新手,但我正在尝试)

现在,我正在测试转盘(如上一张截图)。$J 运动进展顺利,但我找不到使用 0x85 停止慢跑的方法。我阅读了提到的解决方案@PCSDIAS但它对我不起作用。我试图从 Sender.py 实现 sendHex() 函数来发送 0X85 但它没有用。

        #----------------------------------------------------------------------
	# Send to controller a gcode or command
	# WARNING: it has to be a single line!
	#----------------------------------------------------------------------
	def sendGCode(self, cmd):
		if (cmd == "$J=0"):
			if self.serial is None: return
			hxCode = '0X85'
			self.serial.write(chr(int(hxCode,16)))
			self.serial.flush()
			return

		if self.serial and not self.running:
			if isinstance(cmd,tuple):
				self.queue.put(cmd)
			else:
				self.queue.put(cmd+"\n")

我没有测试直接发送之类的self.serial.write(chr("0X85"))

你有什么建议吗?

挂件 Web 界面 - 问题 #1121
PCSDIAS 评论了 2019 年 1 月 6 日  

@Harvie,感谢您好心编辑我的最后一篇文章并教我如何做。这是我欠你的。关于您指出的 Python 文件内容,我仍在努力消化它,因为我对 Python 编程知之甚少。这样一来我的印象是,我们应该尽可能集中精力解决挂件本身的问题,即guest端的“,js”、“.css”、“.html”文件。可能,“pendant.py”文件可能会被修补以处理一些新的通信需求。这将是我的方法,因为我真的不愿意承诺自己做一些我不准备做的事情。

@qvisionsa. 试图发送停止慢跑命令是我加入这个讨论的原因。我尝试了我能想到的一切,直到我放弃并决定以相反的方式去做。这个问题在两个方面得到了解决。

首先,“pendant.py”文件被修补以处理新命令“STOPJOG”,这将导致 bCNC 清空其命令队列并将所需的“0X85”代码发送到 GRBL。然后 GRBL 将清空其命令队列并停止。

挂件 Web 界面 - 问题 #1121

其次,只要操纵杆到达静止位置,挂件页面“script.js”就会向 bCNC 发送“STOPJOG”。

挂件 Web 界面 - 问题 #1121

我可能会犯错,但我想您可以在我与您共享的最后一个文件中查看此解决方案。请随时询问此解决方案是否不适合您。

我知道上述解决方案只是一种解决方案,而不是最佳解决方案。现在,我想提出我认为更通用和可扩展的东西。它包括向“Pendant.py”添加三个新的处理程序,以便:

  1. 回复页面请求“/firmware”告知CNC板固件名称和版本;
  2. 清空 bCNC 缓冲区以响应页面请求“/send?cmd=flush”;和
  3. 向 CNC 板发送扩展 ASCII 字符以响应页面请求“/send?gcode=XHH,其中 HH 是十六进制代码值。

保罗。

挂件 Web 界面 - 问题 #1121
作者

@PCSDIAS感谢您分享您的代码。我已经测试了您的解决方案,但它对我不起作用。我会再试一次,看看我是否在某个地方弄错了。看了pendant.py和sender.py的源码,
了解到pendant.py把所有从web界面接收到的命令放入队列,然后sender.py负责处理这个队列。如果我错了,请纠正我。

@Harvie @PCSDIAS有没有办法绕过这个队列并发送 Jog Cancel 命令立即执行?

挂件 Web 界面 - 问题 #1121
合作者

除非您使用 $J= 慢跑,否则 Stopjog 将不起作用

挂件 Web 界面 - 问题 #1121

@qvisionsa如果可以的话,我想建议您采取另一种行动。今天下午我下载了 bCNC 0.9.11 版的新副本并将其安装在 PC 的临时文件夹中。通过这种方式,我有两个并行的 bCNC 0.9.11 安装,旧的和新的。旧装置服务于我开发的吊坠,新装置服务于原始吊坠。除了这个区别外,新旧安装都可以正常工作。不可能同时运行这两个程序,因为我只有一个 GRBL 板可用,但我认为这对于测试目的并不重要。
然后我做了我告诉你做的事。

  1. 停止原来的 pendant 并关闭新的 bCNC 程序。
  2. 将“index.htm”和“Pendant.py”重命名为“index.html.bak”和“Pendant.py.bak”以便备份。我没有处理“CNC.py”文件,因为我错误地将它包含在 zip 文件中。它不会干扰这个问题。
  3. 将我发送给您的相同文件复制到相应的文件夹中,除了“CNC.py”。
  4. 重新启动新的 bCNC 安装并在 Google Chrome DevTools ( https://developers.google.com/web/tools/chrome-devtools/?hl=en-us ) 中打开 pendant 以观察 bCNC 服务器之间的消息交换和吊坠页面。打印屏幕如下。
  5. 在 bCNC 终端窗格中观察 bCNC 和 GRBL 之间的消息交换。打印屏幕如下
  6. 可以无误地启动和停止所有三个轴的点动。

我觉得此时你应该抛开GUI的形式,专注于挂件页面和bCNC服务器本身的通信。重复上述经验,以获得对该方法有效的信心。之后您可以返回 GUI 珩磨。

Chrone 开发者工具
挂件 Web 界面 - 问题 #1121

bCNC 终端 花括号中的数字只是调试过程的剩余部分。 观察 \x85 字符是如何表示的
挂件 Web 界面 - 问题 #1121

挂件 Web 界面 - 问题 #1121

我不知道 pedant 服务器提供任何命令来清除 bCNC 队列。我搜索了原始的“Pendant.py”和“index.html”文件,但没有成功。这就是为什么我在“Pendant.py”文件中实现了队列清除补丁。

希望这对你有帮助

保罗

挂件 Web 界面 - 问题 #1121
合作者

不可能同时运行这两个程序,因为我只有一个 GRBL 板可用

https://github.com/grbl/grbl-sim

挂件 Web 界面 - 问题 #1121

@Harvie感谢您指出了这一点。

挂件 Web 界面 - 问题 #1121
作者
qvisionsa 评论了 2019 年 1 月 7 日  

@Harvie @PCSDIAS
我正在发送我正在设计的网络界面。还没有完成…旋转刻度盘(第二个选项卡)上的运动仅适用于 Y 轴。如果您认为这是正确的方式,请告诉我。

我的代码在 index2.html

Pendant.py 必须修改为

		global webpath

		#handle certain filetypes
		filetype = page.rpartition('.')[2]
		if   filetype == "css": self.do_HEAD(content="text/css")
		elif filetype == "js":  self.do_HEAD(content="application/x-javascript")
		elif filetype == "json": self.do_HEAD(content="application/json")
		elif filetype == "jpg" or filetype == "jpeg" : self.do_HEAD(content="image/jpeg")
		elif filetype == "gif": self.do_HEAD(content="image/gif")
		elif filetype == "png": self.do_HEAD(content="image/png")
		elif filetype == "ico": self.do_HEAD(content="image/x-icon")
		elif filetype == "svg": self.do_HEAD(content="image/svg+xml'") #[+]
		elif filetype == "ttf": self.do_HEAD(content="application/font-sfnt'") #[+]
		elif filetype == "eot": self.do_HEAD(content="application/vnd.ms-fontobject'") #[+]
		elif filetype == "woff": self.do_HEAD(content="application/font-woff'") #[+]
		elif filetype == "woff2": self.do_HEAD(content="application/font-woff2'") #[+]
		else: self.do_HEAD()

		if page == "": page = "index.html"
		try:
			f = open(os.path.join(webpath,page),"rb") #[+]
			self.wfile.write(f.read())
			f.close()
		except IOError:
			self.wfile.write("""<!DOCTYPE html>

@PCSDIAS明天我会以新的头脑再次测试你的解决方案。

挂件 Web 界面 - 问题 #1121
作者
qvisionsa 评论了 2019 年 1 月 7 日  

@PCSDIAS查看您的终端,我看到您对 X 轴的进给和运动很小。您是否测试过更高的值?像 F1000 和 X10

挂件 Web 界面 - 问题 #1121

@qvisionsa该代码每秒对操纵杆从静止位置的位移进行 20 次采样。当位移大于最小值时,将计算与其成比例的进给率,并计算刀具在 50 毫秒内以该进给率移动的增量距离。生成具有这些进给率和增量距离的慢跑 gcode 并将其发送到 GRBL。在我的例子中,最大进给率为 250 毫米/分钟,这个距离永远不会超过 0.2 毫米。
范围/操纵杆值和速率之间的关系是立方的,以便进行精细(慢速)和粗略(快速)调整。极端范围/操纵杆值对应于 250 的进给率,这是我的机器的最大值。
由于数字精度,我必须设置一个最小值而不是零作为静止位置。如果没记错的话,这个最小值是 0.5。

挂件 Web 界面 - 问题 #1121
PCSDIAS 评论了 2019 年 1 月 10 日  

@qvisionsa你不需要相信我。安装 Serial Sniffer,例如https://freeserialanalyzer.com并记录 bCNC 和 GRBL 之间的消息交换。

即使取消点动命令向前传递并立即发送,队列中等待的剩余命令会发生什么情况?他们无论如何都会被派遣,运动不会停止。

挂件 Web 界面 - 问题 #1121
合作者
哈维 评论了 2019 年 1 月 10 日  

我认为 SENDHEX 85 命令不能进入 bCNC 缓冲区。

@qvisionsa不用担心 sendhex。将其作为 url 编码字节发送就足够了。

https://freeserialanalyzer.com

@PCSDIAS不需要这样的嗅探器,因为 bCNC 有这个内置功能。只需启动 bCNC 并在串行连接中选择调试选项。它会将所有串行流量转储到黑色的小命令行窗口。

挂件 Web 界面 - 问题 #1121

如果你有没有这个选择的旧版本,你可以手动输入,例如:spy://COM1?raw

挂件 Web 界面 - 问题 #1121
合作者

在最新的 git 版本中,我在"controller": "GRBL1"状态 JSON 中添加了标志,因此您的新吊坠可以判断是否可以使用$J=慢跑……

$ curl http://localhost:8080/state
{"G": [], "color": "OrangeRed", "state": "Not connected", "controller": "GRBL1", "msg": "", "wz": 0.0, "wy": 0.0, "wx": 0.0}
挂件 Web 界面 - 问题 #1121

@哈维

There’s no need for such sniffer as bCNC has this builtin. Just launch bCNC and select the debug option in serial connection. It will dump all serial traffic to little black command line window.

Thanks for pointing out this nice feature. bCNC always surprising me, in the good sense.

In latest git version i’ve added “controller”: “GRBL1” flag to status JSON, so your new pendant can tell if it’s possible to use $J= jogging or not…

This will allow the automatic selection of the jogging method commands. In order to implement the joystick jogging method with variable step and feed rate the script on the guest side will need to know the maximum feed rates for each axis. These are

喜欢 (0)