Contact me: hankecnc@gmail.com

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 → #5

推推 grbl 3年前 (2023-01-24) 188次浏览

在 Linux/Mono 上运行 #5

关闭
Rost3 打开了这个问题 2017 年 1 月 4 日 · 48条评论
关闭

在 Linux/Mono 上运行#5

Rost3 打开了这个问题 2017 年 1 月 4 日 · 48条评论

注释

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

我可以在 Linux 上运行 LaserGRBL 吗?Raspberry Pi 3。我的电脑太强大了(i7 内存 16GB),无法在车间使用。或者最好为它买一台便宜的旧电脑。

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

LaserGRBL 的所有代码都是 C#,所以我认为它可以使用 MonoDevelop 在 Mono 中为 Linux 编译。
我以前从来没有做过,而且我目前没有 linux 机器,所以我不能帮你完成这个任务。如果你有技能,你可以自己动手。以防万一,让我知道是否有效

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

它在 Arch Linux (xbuild) 上用最新的 mono 5.0.0 编译得很好。但是当我尝试运行时,mono LaserGRBL.exe我总是得到:

Unhandled Exception:
System.TypeInitializationException: The type initializer for 'Tools.TimingBase' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Tools.HiResTimer' threw an exception. ---> System.EntryPointNotFoundException: QueryPerformanceFrequency
  at (wrapper managed-to-native) Tools.HiResTimer:QueryPerformanceFrequency (long&)
  at Tools.HiResTimer..cctor () [0x00025] in <4bb2d302ea56443d9efd6d6ed57ceec3>:0 
   --- End of inner exception stack trace ---
  at Tools.TimingBase..cctor () [0x00000] in <4bb2d302ea56443d9efd6d6ed57ceec3>:0 
   --- End of inner exception stack trace ---
  at LaserGRBL.Program.Main (System.String[] args) [0x00000] in <4bb2d302ea56443d9efd6d6ed57ceec3>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'Tools.TimingBase' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Tools.HiResTimer' threw an exception. ---> System.EntryPointNotFoundException: QueryPerformanceFrequency
  at (wrapper managed-to-native) Tools.HiResTimer:QueryPerformanceFrequency (long&)
  at Tools.HiResTimer..cctor () [0x00025] in <4bb2d302ea56443d9efd6d6ed57ceec3>:0 
   --- End of inner exception stack trace ---
  at Tools.TimingBase..cctor () [0x00000] in <4bb2d302ea56443d9efd6d6ed57ceec3>:0 
   --- End of inner exception stack trace ---
  at LaserGRBL.Program.Main (System.String[] args) [0x00000] in <4bb2d302ea56443d9efd6d6ed57ceec3>:0

这能解决吗?

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

嗨 Jackeler,我很高兴有人试图在 Linux 中移植 LaserGRBL。

TimingBase 是一个用于精确和高分辨率计时的类。它基于
QueryPerformanceFrequency 和 QueryPerformanceCounter Windows API,我想这些 API 是操作系统特定的功能,它们在单声道上不可用。幸运的是,用类似的东西替换它们并不难。

您可以尝试用这段代码替换整个 HiResTimer 类:

	public static class HiResTimer
	{
		private const long NANO_IN_MILLI = 1000 * 1000;
		private static Stopwatch watch = new Stopwatch(); 

		static HiResTimer() //costruttore static, viene chiamato prima del primo utilizzo della classe
		{watch.Start();}

		public static long TotalMilliseconds
		{ get { return TotalNano / NANO_IN_MILLI; } }

		public static long TotalNano
		{
			get
			{
				return (long)((double)watch.ElapsedTicks / (double)Stopwatch.Frequency * 1000000000.0);
			}
		}

	}
此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5 arkypita 重新打开了这个 2017 年 12 月 3 日
此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5 arkypita 更改了标题 问题 在 Linux/Mono 上运行 2017 年 12 月 3 日
此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

感谢您的快速回复。这样可行!

然后我得到了这个:

System.DllNotFoundException: ntdll.dll
  at (wrapper managed-to-native) Tools.TaskScheduler:NtSetTimerResolution (uint,bool,uint&)
  at Tools.TaskScheduler.SetClockResolution (System.Int32 msec) [0x0000d] in <a1ec3de5fed24c81a1d181c135352908>:0 
  at LaserGRBL.Program.Main (System.String[] args) [0x00051] in <a1ec3de5fed24c81a1d181c135352908>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.DllNotFoundException: ntdll.dll
  at (wrapper managed-to-native) Tools.TaskScheduler:NtSetTimerResolution (uint,bool,uint&)
  at Tools.TaskScheduler.SetClockResolution (System.Int32 msec) [0x0000d] in <a1ec3de5fed24c81a1d181c135352908>:0 
  at LaserGRBL.Program.Main (System.String[] args) [0x00051] in <a1ec3de5fed24c81a1d181c135352908>:0 

所以我只是把它注释掉,像这样:

public class TaskScheduler
	{

		//[System.Runtime.InteropServices.DllImport("ntdll.dll", EntryPoint = "NtSetTimerResolution")]
		private static extern void NtSetTimerResolution(uint DesiredResolution, bool SetResolution, ref uint CurrentResolution);

		public static void SetClockResolution(int msec) //volendo potrebbe gestire anche 0.5 msec ma a noi basta 1-15 msec, quindi usiamo int
		{
			uint DesiredResolution = (uint)msec * 10000;
			bool SetResolution = true;
			uint CurrentResolution = 0;
			//NtSetTimerResolution(DesiredResolution, SetResolution, ref CurrentResolution);
		}

	}

这会破坏什么吗?

无论如何,我现在可以在 Linux 上启动它而不会出现直接错误/崩溃!一个视觉问题是菜单栏没有字体,但功能似乎没问题。我现在将测试与我的机器的连接是否有效!:)

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

SetTimerResolution 将 Windows 中大约 66Hz(15 毫秒)的任务切换频率更改为更高的频率,这使得 LaserGRBL 在将 g 代码流式传输到 arduino 时响应更快、速度更快。

注释掉就好了

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

好的好的,这是有道理的。

试验结果:

  • 连接到 GRBL 1.1 控制器:有效!
  • 加载 gcode 文件并发送到控制器:有效!
  • “在此处键入 gcode”字段:在任何输入时失败/崩溃:
System.NullReferenceException: Object reference not set to an instance of an object
  at LaserGRBL.UserControls.PlaceholderTextBox.waterMarkContainer_Paint (System.Object sender, System.Windows.Forms.PaintEventArgs e) [0x0000e] in <eb1043efb68f4c3593b70ed0451be259>:0 
  at System.Windows.Forms.Control.OnPaint (System.Windows.Forms.PaintEventArgs e) [0x00019] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  at System.Windows.Forms.Control.WmPaint (System.Windows.Forms.Message& m) [0x0007b] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x001a4] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message& m) [0x00000] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x0000b] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  at System.Windows.Forms.NativeWindow.WndProc (System.IntPtr hWnd, System.Windows.Forms.Msg msg, System.IntPtr wParam, System.IntPtr lParam) [0x00085] in <a98ec586cd3441aeb3d7919d9ad41ff2>:0 
  • 机器控制(移动):有效!
  • 重置+锁定按钮:有效!
  • 创建自定义按钮并发送 gcode:有效!
此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

做得好@Jakeler

在 PlaceholderTextBox 类中注释 DrawWaterMark。

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//即使在设计时绘制水印
DrawWaterMark();
}

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

必须对其进行评论ThisHasFocus()ThisTextChanged()避免错误。它在OnPaint()和中没有问题Initialize()。我现在在 fork 中进行了更改:Jakeler@ 1cea400

所以我现在能够成功地用 LaserGRBL 雕刻一些东西。更多测试结果:

  • 设置、gbrl 配置、热键:有效
  • 加载光栅图像(png):什么都不做,没有新窗口,没有错误……
  • 速度、功率覆盖弹出窗口:极小(无法使用)
  • 界面截图:
    此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
  • 配色方案:背景更改有效,但字体保持灰色,在黑暗/黑客选项中不可读
此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

你好@Jakeler
我对您在单声道方面的进步和成果感到非常满意。当我用旧版本的 LaserGRBL 进行第一次实验时,我无法走得更远。我最大的问题是我使用的 mono 版本非常旧 (3.2.8) 并且有几个错误阻止 winform 程序正常运行。我在树莓派上完成了这些测试,因为我没有可用的真正的 Linux PC。

使用 Arch Linux (xbuild) 和 mono 5.0.0 我希望你能取得比我更好的结果。但是我记得最大的问题是光栅导入表单。不是因为我的矢量化/line2line 代码,而是因为我正在使用的 WinForm 布局。

我看到一些问题应该与您现在遇到的问题相同。即连接按钮、停止-继续按钮等的错位。LaserGRBL 的整个界面是使用“TableLayoutPanel”设计的,这使我能够使其在不同的分辨率、调整大小、不同的字符串翻译中使用的不同空间等情况下工作得很好.

也许应该重新设计某种形式以使用更简单和固定的布局模式在单声道中工作。

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

我应该有一台旧笔记本电脑,我可以牺牲它来安装 linux。我很乐意帮助你完成这项工作。

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

根据 Mono 文档,对 Windows Forms 2.0 的支持已经完成,但似乎与 Windows 上的不一样。我还注意到,将窗口大小调整得更小不会将停止-继续按钮移回,导致它们在某个时候消失。总体而言,大多数元素看起来不太正确。我也更喜欢更现代的风格,而不是 Linux 上的 Windows 2000 主题。

我对 C# 和 Windows GUI 的东西没有任何经验,所以我不确定我是否可以做到这一点或帮助你很多。现在看代码,我开始有点理解了,但仍然……此外,一些代码用意大利语注释,我不明白。
我可以帮助您设置 Linux 以解决开发、测试和其他相关问题。当软件工作时,我可以为 Linux 发行版做适当的打包,以便每个人都可以轻松地安装和更新它。

你不一定需要额外的硬件,如果你有一个半像样的 PC,你可以像使用 VirtualBox 的虚拟机来宾一样运行它。因此,您可以让 Windows 主机保持运行状态,并可以快速启动另一个虚拟操作系统。(我经常以相反的方式这样做,在我的 Linux PC 上使用 Windows 作为来宾,特别是对于开发非常有用)

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者
阿尔基皮塔 评论了 2017 年 12 月 4 日  

我可以在物理机或虚拟机上安装 linux,这对我来说不是问题。唯一的问题是找时间:-)

无论如何,我会利用您的空闲时间来获取一些可以加快此步骤的信息。

  • 您使用什么发行版?你能给我一个可安装的 ISO 的链接吗?
  • mono 编译器或 IDE 是否已经存在于发行版中,或者您必须稍后安装?安装步骤是什么?

更多:当我做我以前的尝试时,我记得我不能直接从 monodevelop 图形化编辑我的 winform UI,因为它们只支持编辑 GTK Form。情况还是一样吗?我的意思是,您是否能够打开一个表单,如 mainform,并从 monodevelop 以图形方式编辑它?

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者
阿尔基皮塔 评论了 2017 年 12 月 4 日  

更新; 我已经安装了带有 mono v5.4.16 和 monodevelop 7.1 的 Linux Mint。两者都是最新版本。
正如您在图片中看到的那样,我遇到了 resgen.exe 的问题。有什么提示吗?

使用 xbuild 编译

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者

更新:已解决(切换到.net 4.5)

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5

很高兴看到你在上面!我今天没有太多时间回答,反正现在一切都解决了吗?让我知道进展如何以及您是否需要帮助。;)

此问题已移至讨论区。 您可以在那里继续对话。 去讨论 →  #5
所有者
阿尔基皮塔 评论了 2017 年 12 月 5 日  

您可以在 Linux 分支下的https://github.com/arkypita/LaserGRBL上找到我的结果https://github.com/arkypita/LaserGRBL/tree/Linux

我上次尝试做一个 linux 版本时发现的所有问题仍然存在。最大的问题是在 tablelayout 面板上,没有得到很好的支持。这打破了我所有的布局。图像处理功能也存在一些问题。

现在光栅图像形式打开,但由于布局问题无法使用。

喜欢 (0)