Contact me: hankecnc@gmail.com

问题:使用 api 会导致主 UI 不更新状态 #128

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

问题:使用 api 会导致主 UI 不更新状态#128

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

注释

问题:使用 api 会导致主 UI 不更新状态 #128
液化火 评论了 2017 年 2 月 6 日  

版本 1.8.15

我正在编写一个新的远程吊坠来实现 3D Connection Space Mouse 的慢跑功能,使用 ps3 吊坠作为确定 api 的基础。当我订阅“Grbl:state”事件时,UI 不再更新。

` socket.on(‘connect’, function() {
console.log(‘Socket IO [Connected]: ‘ + socket_address + ‘:’ + socket_port);

	// List Serial Ports
    socket.on ('serialport:list', function (data) {
	    console.log('-------------------------');
	    console.log('Listed Serial Ports: ');

		// List Ports
		for (var i = 0; i < data.length; i++) {
			console.log("[" + i + "] Seral Port List: " + data[i].port);
		}

		console.log('-------------------------');
	});
       socket.emit('list');

    socket.on('Grbl:state', function(data){
        console.log(data);
   })

	// Open port
	socket.emit('open', controller_serial_port, { baudrate: Number(controller_serial_baud) });
	console.log('Opened Serial Port: ' + controller_serial_port + ':' + controller_serial_baud);
});`

具体来说,我可以从主 UI 发送轴移动命令;但是,状态永远不会改变以反映机器位置的变化。我在远程吊坠应用程序中收到的状态报告确实显示了正确的状态信息。

问题:使用 api 会导致主 UI 不更新状态 #128
作者

删除的问题:从标题

问题:使用 api 会导致主 UI 不更新状态 #128 AustinSaintAubin 自己分配了这个 2017 年 2 月 6 日
问题:使用 api 会导致主 UI 不更新状态 #128
贡献者
奥斯汀圣奥宾 评论了 2017 年 2 月 6 日  

我会在早上试着看看这个。我注意到,有时如果连接了另一台设备,用户界面将不会更新。但是我没有注意到我的 PS3 脚本有这个问题。

  • 您是否在 Raspberry Pi 或其他设备上运行 CNCjs 和挂件软件?
  • 您能否同时测试从两个设备连接到 UI,看看会发生什么?
问题:使用 api 会导致主 UI 不更新状态 #128
作者

@AustinSaintAubin我没有运行 PS3 脚本,我只是使用其中的几个 socket.io 片段来计算 API 的功能。

通过昨晚的进一步测试,我发现当连接到 websocket 时,您必须先调用 SerialPort.Open,然后CNCEngine才会将您的套接字添加到控制器。

每次我打开socket.on('connect', function() { console.log('Socket IO [Connected]: ' + socket_address + ':' + socket_port);

串口列表
socket.on ('serialport:list', function (data) { console.log(data); }); socket.emit('list');

它显示我的串行端口未连接,即使我在主 UI 中有活动连接。
我昨晚开始为 CNCJS 设置一个开发环境来完成它。

问题:使用 api 会导致主 UI 不更新状态 #128
合作者

@liqdfire
在接下来的几天里,我将尝试研究一下这个问题。

顺便说一句,如果我们可以创建一个通用接口或样板代码示例来实现 cncjs pendant,那就太好了。这将节省大量时间和麻烦。

问题:使用 api 会导致主 UI 不更新状态 #128
作者

@cheton 我同意你的观点,需要为外部模块创建一个标准的 api,以便能够与 CNC 引擎连接和交互。

尽管我运行 Windows 并且项目中的大多数构建脚本都是 bash 脚本,但我一直在努力设置开发环境。即使在 Windows 上使用 bash,设置也不是很干净。我打算今晚设置一个 Ubuntu 虚拟机并在上面进行设置。

到目前为止,这是我的一些想法:

  1. 需要用每个命令发送串行端口感觉有点像泄漏抽象。哪个串行端口正在使用最好封装在 cnc 引擎中,并作为引擎状态的一部分进行报告。

  2. 需要调用“打开串行”作为不想控制连接的外部组件感觉有点奇怪,事实上在主 UI 之外,我不确定我是否愿意将串行端口的控制权交给插件。这会给有问题的外部组件提供太多的能力来终止长时间运行的 cnc 作业。

  3. 从引擎报告的 grbl:state 和 tinyg2:state 存在差异可能最好抽象为一个通用的 cnc 引擎状态。这将使添加额外的控制器更干净,因为它不需要为每个控制器创建一个新的 UI 小部件,并且如果在添加新控制器时没有维护它,则可以防止外部模块(如挂件或状态屏幕)损坏。

我非常乐意协助您完成此项目所需的任何工作。

问题:使用 api 会导致主 UI 不更新状态 #128
作者

我在 Windows 中设置了调试环境,并且能够进行一些测试。我无法在调试时重现问题,但我认为它可能与最初想到的吊坠无关。

我今天在我的机器上运行了两个作业,两次都在作业进行到一半时 UI 停止了更新。不过,工作仍然完成,版本 1.8.15。我将继续调试。

问题:使用 api 会导致主 UI 不更新状态 #128
合作者

@liqdfire
我刚刚创建了一个 cncjs-pendant-boilerplate ( https://github.com/cncjs/cncjs-pendant-boilerplate ),其中包含开发吊坠的最低限度代码。现在我可以使用这个样板重现 UI 停止更新的问题,我将调查服务器端出了什么问题。

问题:使用 api 会导致主 UI 不更新状态 #128 奇顿 添加了 ?漏洞 标签 2017 年 2 月 13 日
问题:使用 api 会导致主 UI 不更新状态 #128
合作者

我找到了这个问题的根本原因。removeConnection() 函数中有一个错误,如果索引值为 -1,则它会强制从连接数组中删除最后一项,这意味着未找到。

的语句this.connections.splice(-1, 1)将从连接数组中删除最后一项。

removeConnection(socket) {
    const index = _.findIndex(this.connections, (c) => {
        return c.socket === socket;
    });
    this.connections.splice(index, 1);
}
问题:使用 api 会导致主 UI 不更新状态 #128
合作者
  1. 需要用每个命令发送串行端口感觉有点像泄漏抽象。哪个串行端口正在使用最好封装在 cnc 引擎中,并作为引擎状态的一部分进行报告。

我设法为网络使用了一个抽象层(即Controller 类),因此 UI 小部件在发送命令或将数据写入端口时不需要处理端口。我们可以在吊坠上添加类似的东西。吊坠服务器可以拥有多个控制器实例,每个实例都连接到一个串行端口。

  1. 需要调用“打开串行”作为不想控制连接的外部组件感觉有点奇怪,事实上在主 UI 之外,我不确定我是否愿意将串行端口的控制权交给插件。这会给有问题的外部组件提供太多的能力来终止长时间运行的 cnc 作业。

CNCEngine 服务的实现类似于按引用调用,只有第一个“打开”命令会打开串口,后续对“打开”命令的调用只会将套接字添加到连接数组中。除非从 UI 或 pendant 主动发出“关闭”命令,否则端口不会关闭以保持正在运行的作业。

事实上,“打开”这个词可能会让人混淆,因为它会接管串行端口,我可能会在未来的版本中添加“连接”和“断开连接”以避免混淆。

  1. 从引擎报告的 grbl:state 和 tinyg2:state 存在差异可能最好抽象为一个通用的 cnc 引擎状态。这将使添加额外的控制器更干净,因为它不需要为每个控制器创建一个新的 UI 小部件,并且如果在添加新控制器时没有维护它,则可以防止外部模块(如挂件或状态屏幕)损坏。

你是对的。我需要改进这部分以创建一个通用状态以使其变得简单。

问题:使用 api 会导致主 UI 不更新状态 #128
合作者

已在 1.8.16 中修复

我还在 cncjs-pendant-boilerplate 中添加了几个特性,你可以进入命令行模式直接向 Grbl 发送命令。

https://github.com/cncjs/cncjs-pendant-boilerplate

问题:使用 api 会导致主 UI 不更新状态 #128