注释
https://github.com/Denvi/Candle/blob/master/src/frmmain.cpp#L3886
实际上在其他地方使用了一个 Candle 设置,所以我认为应该遵循它。
这似乎是一个非常糟糕的主意。如果用户期望机器以 mm 的速度移动,但程序运行之前设置的 仅查看源代码,我没有看到无需重新编译程序即可更改此行为的简单方法。 如果您只希望点动菜单中的步进和进给以英寸为单位,应该可以通过使用该 void frmMain::jogStep()
{
if (m_jogVector.length() == 0) return;
if (ui->cboJogStep->currentText().toDouble() == 0) {
const double acc = m_settings->acceleration(); // Acceleration mm/sec^2
int speed = ui->cboJogFeed->currentText().toInt(); // Speed mm/min
double v = (double)speed / 60; // Rapid speed mm/sec
int N = 15; // Planner blocks
double dt = qMax(0.01, sqrt(v) / (2 * acc * (N - 1))); // Single jog command time
double s = v * dt; // Jog distance
QVector3D vec = m_jogVector.normalized() * s;
// qDebug() << "jog" << speed << v << acc << dt <<s;
sendCommand(QString("$J=G21G91X%1Y%2Z%3F%4")
.arg(vec.x(), 0, 'g', 4)
.arg(vec.y(), 0, 'g', 4)
.arg(vec.z(), 0, 'g', 4)
.arg(speed), -2, m_settings->showUICommands());
} else {
int speed = ui->cboJogFeed->currentText().toInt(); // Speed mm/min
QVector3D vec = m_jogVector * ui->cboJogStep->currentText().toDouble();
sendCommand(QString("$J=G21G91X%1Y%2Z%3F%4")
.arg(vec.x(), 0, 'g', 4)
.arg(vec.y(), 0, 'g', 4)
.arg(vec.z(), 0, 'g', 4)
.arg(speed), -3, m_settings->showUICommands());
}
}
会变成类似 void frmMain::jogStep()
{
if (m_jogVector.length() == 0) return;
if (ui->cboJogStep->currentText().toDouble() == 0) {
const double acc = m_settings->acceleration(); // Acceleration mm/sec^2
int speed = toMetric(ui->cboJogFeed->currentText().toInt());// Speed mm/min CHANGE HERE
double v = (double)speed / 60; // Rapid speed mm/sec
int N = 15; // Planner blocks
double dt = qMax(0.01, sqrt(v) / (2 * acc * (N - 1))); // Single jog command time
double s = v * dt; // Jog distance
QVector3D vec = m_jogVector.normalized() * s;
// qDebug() << "jog" << speed << v << acc << dt <<s;
sendCommand(QString("$J=G21G91X%1Y%2Z%3F%4")
.arg(vec.x(), 0, 'g', 4)
.arg(vec.y(), 0, 'g', 4)
.arg(vec.z(), 0, 'g', 4)
.arg(speed), -2, m_settings->showUICommands());
} else {
int speed = toMetric(ui->cboJogFeed->currentText().toInt());// Speed mm/min CHANGE HERE
QVector3D vec = m_jogVector * toMetric(ui->cboJogStep->currentText().toDouble()); // CHANGE HERE
sendCommand(QString("$J=G21G91X%1Y%2Z%3F%4")
.arg(vec.x(), 0, 'g', 4)
.arg(vec.y(), 0, 'g', 4)
.arg(vec.z(), 0, 'g', 4)
.arg(speed), -3, m_settings->showUICommands());
}
}
我还没有测试过这个,但我明天可能会做那个,如果我让它工作的话,我会提交一个 PR。 |
作为我的快速修复,因为我很少使用度量标准,所以我只是编辑了可执行文件,将 G21 更改为 G20,并注意到通过更改 exe 的名称以将其与原始文件区分开来。这对我来说非常有效。在我看来,遵循 $13 设置中报告的机器配置将是最佳解决方案。我希望 13 美元是故意设置的,因为用户希望机器在该模式下工作。在那种情况下,遵循机器配置模式对用户来说是最不惊讶的。所有其他建议都只是为了可能性。出于你提到的原因,我同意移除 G21 不是一个好主意。添加一个按钮以允许用户选择只会增加用户界面的混乱。
|
是的,但这是一个完全不同的问题。这个“帝国慢跑”功能应该和Candle的其他功能保持一致,即遵循Candle的设置。此蜡烛设置(以及“加速”和“快速”)可能应该遵循 Grbl 设置。 |
实际上, 第 1328 至 1342 行 72a5733
直到今天,我实际上无法从这个分支(Ubuntu 64 位)编译 SW,但我想通了。为了将来参考,这些是我需要安装的包: sudo apt install qt5-default libqt5serialport5-dev qttools5-dev-tools
# the above is sufficient for master, Experimental also requires:
sudo apt install qtmultimedia5-dev qttools5-dev qtscript5-dev
我还需要将这两行添加到 #include <QDrag>
#include <QTranslator>
似乎在其他函数中处理公制与英制的方式也发生了变化: 2008 年至 2017 年的行 8fd07bf
新的 第 2179 至 2193 行 72a5733
但是,我认为这样做只是为了简化代码,我的修复可能会保持几乎相同。 |
好吧,它似乎工作。但是,我注意到的一个问题是,如果 |
尽管您担心在运行时更改 $13 是一个合理的问题,但通常应该考虑到所有 $ 设置都写入具有 100,000 次循环耐久性的 EEPROM。这可能看起来很多,但如果在 g 代码中设置 $ 命令,则每次运行时 EEPROM 都会更新。如果可能的话,应该避免这样做——这是一种非常糟糕的做法。即使来回更改 32 美元以更改激光和主轴使用之间的支持(如在 3018 类系统上所做的那样)也不是一个好主意。在激光和主轴之间切换的一个更好的解决方案是在使用激光时使用 S0/Sxxx 自动包裹 G0 移动。它比这更复杂,因为 GRBL 根据 $32 的状态改变了 M3 和 M4 的解释。无论哪种方式,感谢您为解决此 cgs/fps 问题所做的努力。
|
是的,我并没有那么多考虑正常使用。我只是想防止“我刚刚测试过它,它仍然以毫米为单位慢跑”的评论…… |
@pelowitz我认为这应该在 1.12.13b 中修复。您能否尝试一下,如果已解决,请关闭此问题? |
我会玩它。谢谢。 |
慢跑似乎被硬编码为以强制 mm 的 G21 开头。
虽然这并不少见,但应该发生的是点动命令应该遵循机器配置。
如果机器以英寸为单位报告 (GRBL $13=1),则点动 $j 应以 G20 命令开始,如果连接的机器配置为 mm,则点动应以 G21 开始。
我确信这个 OPINION 会被激怒,但如果一个人通常在 mm 中配置运行,这不会对当前正在做的事情有任何改变。但是对于那些喜欢以英寸为单位工作的人来说,慢跑的工作量最少(在创建软件时通常是一件好事)。
或者,在点动框或配置项中添加按钮控件也足够了,就像在点动命令中删除硬编码的 G21 一样。