将正确的 Gcode 字符串发送到串行端口?

2023-12-06

我正在尝试发送 gcodeg28通过线路连接到我的 RepRap 3D 打印机port.Write("g28");.

我的程序连接到正确的串行端口,但是当我尝试以字符串形式发送信息时,对 com 端口的访问被拒绝。这很奇怪,因为在向串行端口发送 Gcode 之前,串行端口已打开。它甚至发回了一些数据。那里有什么问题,我该如何解决它?

以下是我正在使用的代码行。 gcode 命令列表可在此处找到page.

我尝试过添加一个"\n"在字符串的末尾,但它不起作用。

    //Fields
    List<string> myReceivedLines = new List<string>();


    //subscriber method for the port.DataReceived Event
    private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        while (sp.BytesToRead > 0)
        {
            try
            {
                myReceivedLines.Add(sp.ReadLine());
            }
            catch (TimeoutException)
            {
                break;
            }
        }
    }


    protected override void SolveInstance(IGH_DataAccess DA)
    {

        string selectedportname = default(string);
        DA.GetData(1, ref selectedportname);
        int selectedbaudrate = default(int);
        DA.GetData(2, ref selectedbaudrate);
        bool connecttodevice = default(bool);
        DA.GetData(3, ref connecttodevice);
        bool homeall = default(bool);
        DA.GetData(5, ref homeall);

        SerialPort port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One); 

        port.DtrEnable = true;   
        port.Open();             

        if (connecttodevice == true)
        {
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            DA.SetDataList(0, myReceivedLines);
        }

        if (homeall == true)
        {
            port.Write("g28");
        }

    }

通常,当我创建 Com 端口时,它是一个类级别对象,我在启动期间初始化一次。我会将您的初始化代码从您的方法中移出,并移至您可以在启动期间调用一次的构造函数或方法中。这应该可以防止您尝试多次打开它,并且仍然可以使其响应接收到的数据。


我不确定你的架构,看起来你可能计划有多个端口,但是 回答您在评论中的问题,您为创建串行端口所做的一切。串行端口的声明至少应该是类级别变量。然后您可以检查它是否什么都没有并第一次创建它。

string selectedportname = default(string); 
DA.GetData(1, ref selectedportname); 
int selectedbaudrate = default(int); 
DA.GetData(2, ref selectedbaudrate); 
bool connecttodevice = default(bool); 
DA.GetData(3, ref connecttodevice); 

SerialPort port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One);   
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

DA.SetDataList(0, myReceivedLines);   

port.Open();  // optional  I usually open it at the time that I initialize it. you can check `port.IsOpen()`
              // and Open it if it is false.

使用类级串行端口的第二个选项尝试如下操作:

protected override void SolveInstance(IGH_DataAccess DA)
{
    if(port == null)
    {
        string selectedportname = default(string);
        DA.GetData(1, ref selectedportname);
        int selectedbaudrate = default(int);
        DA.GetData(2, ref selectedbaudrate);
        bool connecttodevice = default(bool);
        DA.GetData(3, ref connecttodevice);
        port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One);
        if (connecttodevice == true)
        {
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            DA.SetDataList(0, myReceivedLines);
        }

        port.DtrEnable = true;
        port.Open();
    }


    bool homeall = default(bool);
    DA.GetData(5, ref homeall);

    if (homeall == true)
    {
        port.Write("g28");
    }

}   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将正确的 Gcode 字符串发送到串行端口? 的相关文章

  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 编译器错误“错误:在文件范围内可变地修改了‘字符串’”

    考虑 include
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 使用(linq to sql)更新错误

    我有两个表 通过外键 CarrierID 绑定 Carrier CarrierID CarrierName CarrierID 1 CarrierName DHL CarrierID 2 CarrierName Fedex Vendor V
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • ASP.NET Core Razor Page 多路径路由

    我正在使用 ASP NET Core 2 0 Razor Pages 不是 MVC 构建系统 但在为页面添加多个路由时遇到问题 例如 所有页面都应该能够通过 abc com language 访问segment shop mypage 或
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul

随机推荐

  • 更新约会时时区更改为 UTC

    我正在使用 EWS 1 2 发送预约 创建新约会时 时区在通知邮件上正确显示 但在更新同一约会时 时区会重置为 UTC 有人能帮我解决这个问题吗 以下是复制该问题的示例代码 ExchangeService service new Excha
  • 使用mysql、php和ajax(使用jquery)创建表

    对于我的新项目 我想要一种不需要在每个数据库请求上重新加载页面的现代方法 我希望脚本查询数据库并使用查询信息创建一个表 我尝试了在互联网上找到的不同脚本 下面这个最接近我的需求 索引 php
  • 重定向回来时 LightOpenID 被禁止

    我正在尝试使用 lightOpenID 它应该很简单 并且上传文件然后测试它是否有效 当我使用 example google php 时 我第一次点击登录按钮 它要求我登录 Google 并允许 记住我正在构建的网站 然后它重定向回 exa
  • 在C语言中,数组是指针还是用作指针?

    我的理解是 数组只是指向值序列的常量指针 当您在 C 中声明数组时 您就是在声明一个指针并为其指向的序列分配空间 但这让我很困惑 以下代码 char y 20 char z y printf y size is lu n sizeof y
  • 需要将ascii值转换为hex值

    我需要将 ascii 值转换为十六进制值 请参阅 Ascii 表 但我在下面列出了一些示例 ASCII 1 31 2 32 3 33 4 34 5 35 A 41 a 61 等 但我使用 int 而不是字符串值 是否可以这样做 因此int测
  • Jekyll 多页分页

    我是 html css 新手 但正在尝试使用 Jekyll 创建一个博客 我在这里找到了这个主题https github com rosario kasper 主页index html 包含分页列表中的所有帖子 这很酷 不过 我想将我的帖子
  • Grails 条件查询检查“OR”逻辑

    我有圣杯criteriaQuery我正在检查的地方OR针对单个状态变量的逻辑如下 or eq status Status ONE eq status Status TWO eq status Status THREE 这段代码工作正常 我的
  • 从 firestore flutter 中的子集合中获取数据

    在第一个屏幕截图中 收集了许多文档users 每个文档都包含进一步的集合jobPost该集合包含更多文档及其元数据 我在这里想要的是转到集合的每个文档users和进一步的子集合jobPost并获取所有文档 假设首先应该转到集合中的文档 1u
  • 将 jQuery 日期选择器应用于多个实例

    我有一个 jQuery 日期选择器控件 可以在一次实例中正常工作 但我不确定如何让它在多个实例中工作 br 如果没有 For Each 循环 它可以正常工作 但如果 MyRecords 集合中有多个项目 则只有第一个文本框获得日期选择器 这
  • Lumen - mongodb - jenssegers/laravel-mongodb - 邮递员

    我已经在我的wamp上安装了mongodb C wamp64 bin mongodb mongodb 3 4 bin 我在路径中添加了 mongodb 并创建 Windows 服务以在必要时启动它 我已经通过 Composer 安装了 lu
  • C++ 中的多维数组如何发挥作用? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中使用数组 简而言之 C 中的多维数组是数组的数组 还是只是一个表现得像多维的数组 我的一位朋友解释说 C 中的数组只是常量指针 多维数组也是常量指针 其元素由多个索引寻址 即它们是指向一
  • 如何在 SQL 中选择重叠的日期范围

    我有一个包含以下列的表 sID 开始日期和结束日期 一些值如下 1 1995 07 28 2003 07 20 1 2003 07 21 2010 05 04 1 2010 05 03 2010 05 03 2 1960 01 01 201
  • java中的“>>>”是什么意思?

    我试图将此代码翻译为Python 但我很难这样做 不要担心索引值和变量名称 我只是想知道 gt gt gt 部分到底做了什么 也许是Python的等效项 但有一个解释就很好了 target 0 char source sourceIndex
  • 循环 tf.data.Dataset 非常慢

    我想知道为什么对 tf data Dataset 样本进行 for 循环比对相应的 numpy 数组进行循环要慢得多 import numpy as np import tensorflow as tf import time a np o
  • 如何在 Java 中从 List 转换为 double[]?

    我有一个这样的变量 List
  • 如何将 Next.js Link 与多个子项一起使用?

    如何使用Link在 Next js 中有多个 div 里面这个 div 我有 img 标签Link 链接的段落 链接的标题 错误 多个孩子被传递给href of article但只支持一个孩子https nextjs org docs me
  • 为什么 Xcode 中 Storyboard 的背景颜色没有改变?总是相同的灰色吗?

    因此 我已将故事板文件中默认视图的背景属性更改为与彩虹中的颜色一样多 颜色在 Xcode 中与我的按钮一起很好地显示 但是当我实际运行应用程序时 背景始终是与您从新 Xcode 项目开始时相同的 难看的 默认的灰色 Hello World
  • Cin.Ignore() 不起作用

    这里我有一个代码 cout lt lt Press Enter To Exit cin ignore 该程序将执行并等待 直到您按 Enter 键 然后它才会退出 现在看这段代码 int m cin gt gt m cout lt lt P
  • 自定义类加载器问题

    接下来的问题是 我从以下位置获取了基类加载器代码here 但我的类加载器在某种程度上是特定的 它必须能够从文件系统加载类 让我们以WinOS为例 所以在类加载器中必须有一些setAdditionalPath 方法 它设置一个路径 文件系统上
  • 将正确的 Gcode 字符串发送到串行端口?

    我正在尝试发送 gcodeg28通过线路连接到我的 RepRap 3D 打印机port Write g28 我的程序连接到正确的串行端口 但是当我尝试以字符串形式发送信息时 对 com 端口的访问被拒绝 这很奇怪 因为在向串行端口发送 Gc