Qt 串口发送0x00

2023-11-01

应用场景:大恒光电的平移台 GCD-040101M

先看看要发什么东西

这是串口监听软件截取的结果,绿色的字

串口协议主要包括三个部分,前面是固定的,后面是key ,后面是 0x00 最后面是数据。

 错误版本1

bool MoveStage::writeCmd(char key, unsigned int data_int)
{
   char * chars = new  char[10];
  chars[0]= 0x11;chars[1]= 0x11;chars[2]= 0x40;
  //addr
  chars[3]= 0x01;
  chars[4]= key;
  chars[5]= 0x00;
  //data
  char * data = (  char *)&data_int; 

  chars[6]= data[0];
  chars[7]= data[1]&0xff;
  chars[8]= data[2]&0xff;
  chars[9]= data[3]&0xff;
  printf("write:\n");
  for (int i = 0;i<10 ;i++){
    printf("  %x  ", chars[i]&0xff);
  }
  printf("\n");
  std::string cmd = chars;
  printf("  cmd.length() : %llu ", cmd.length());
  serial->write(cmd.c_str(), cmd.length());

  if (!serial->waitForReadyRead(100))
    return false;

  return true;

  return 1;
}

 cmd.length() 的值是5 只能发5个字节, 由于0x00的影响

错误版本2 

我们把serial->write(cmd.c_str(), cmd.length());  改成serial->write(cmd.c_str(), 10);

发现数据不对,不知道为什么不对

应该发这个

实际发了这个

位数对了,但是数据不对

错误版本3

bool MoveStage::writeCmd(char key, unsigned int data_int)
{
   char * chars = new  char[10];
  chars[0]= 0x11;chars[1]= 0x11;chars[2]= 0x40;
  //addr
  chars[3]= 0x01;
  chars[4]= key;
  //data
  char * data = (  char *)&data_int; //unsigned int data_int

  sprintf(chars+5,"%x",0x00);
  sprintf(chars+6,"%x",data[0]);
  sprintf(chars+7,"%x",data[1]);
  sprintf(chars+8,"%x",data[2]);
  sprintf(chars+9,"%x",data[3]);

  printf("write:\n");
  for (int i = 0;i<10 ;i++){
    printf("  %x  ", chars[i]&0xff);
  }
  printf("\n");
  std::string cmd = chars;
  printf("  cmd.length() : %llu ", cmd.length());
  serial->write(chars, 10);
  printf("\n");
  if (!serial->waitForReadyRead(100))
    return false;

  return true;

}

  使用这个 sprintf(chars+5,"%x",0x00);

  数据不对

正确版本

bool MoveStage::writeCmd(char key, unsigned int data_int)
{
    char * chars = new  char[10];
    chars[0]= 0x11;chars[1]= 0x11;chars[2]= 0x40;
    //addr
    chars[3]= 0x01;
    chars[4]= key;
    chars[5]= 0x00;
    //data
    char * data = (  char *)&data_int; //unsigned int data_int


    chars[6]= data[0];
    chars[7]= data[1];
    chars[8]= data[2];
    chars[9]= data[3];

     QByteArray array(chars, 10);
     printf("write:\n");
     for (int i = 0;i<array.size() ;i++){
       printf("  %x  ", array.at(i)&0xff);
     }
      printf("\n");
    serial->write(array);

    if (!serial->waitForReadyRead(100))
      return false;

    return true;

}

 使用这个  QByteArray array(chars, 10);

另外

要加休眠

如果不加休眠

会变成这样,一次发送这么多 

测试工具:串口监听和虚拟串口

(1条消息) 虚拟串口 VSPD 的使用_白杨木屋-CSDN博客_虚拟串口

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

Qt 串口发送0x00 的相关文章

  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46

随机推荐

  • jersey实现web service接口+客户端调用

    jersey实现web service接口 客户端调用 jersey百度百科 Jersey是一个RESTFUL请求服务JAVA框架 与常规的JAVA编程使用的struts框架类似 它主要用于处理业务逻辑层 与Struts类似 它同样可以和h
  • 手机app登录显示服务器异常,手机app 连接云服务器异常

    手机app 连接云服务器异常 内容精选 换一换 通过内网连接云手机实例时 需要在租户VPC中创建一台弹性云服务器 作为连接云手机的跳板机器 若创建云手机服务器时未使用自定义网络 还需在云手机租户的VPC和服务器所在VPC之间建立对等连接 如
  • RSA算法的详细设计(C++)及不同优化策略的比较

    本篇文章总结了我对RSA算法的理解和设计 并在后文对优化运行效率的方法做了对比分析 一 RSA算法简介 密码学是研究如何隐密地传递信息的学科 它被认为是数学和计算机科学的分支 和信息论也密切相关 在很久之前的传统密码学中 使用的都是对称加密
  • DXLAM、ubuntu16、tf1.13、anaconda环境配置

    DXSLAM环境的点点滴滴 配置该代码环境有两种方法 方法一 利用docker 方法二 直接配置 配置流程 1 配置ORBSLAM2环境 1 1ORB SLAM2配置 1 2测试单目并处理RGBD的数据集 2 配置tf环境 2 1 配置an
  • Sqoop MySQL 8 迁移Hadoop 3 提示:master:9000/sqoop/base-house already exists

    今天尝试使用Sqoop 将MySQL 8 指定库表数据 迁移至Hadoop 3 提示如下错误 2023 03 01 14 52 20 547 ERROR tool ImportTool Import failed org apache ha
  • 李航-机器学习-感知机(perceptron)-原始形式

    机器学习 感知机 perceptron 感知机模型 感知机模型 感知机学习策略 感知机算法实现 代码实现 运行程序可得 运行程序 感知机模型 感知机是一种线性的 二类分类模型 可以将空间划分为正类和负类 是一种判别模型 输入为具体的实例 输
  • 数字图像处理——实验一 离散傅里叶变换(代码)

    clc clear close all a imread Lena512C bmp f rgb2gray a 原图为三维图像 转为二维图像 figure 1 subplot 2 2 1 imshow f title 原图像 H fft2 f
  • python 绘制箱型图(boxplot)时如何去掉出现的连续散点

    问题如上所示 绘制箱型图时发现在箱型图的上下边界出现许多散点 如何去除呢 只需要在绘制时添加一个命令即可 ax boxplot data h 0 就是这一步就可以去除连续的散点 showmeans True vert True vertic
  • java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)

    java使用stream实现list中对象属性的合并 根据两个List中的某个相同字段合并成一条List 包含两个List中的字段 目录 一 前言 二 示例 示例1 java8 合并两个 list map 示例2 java8 合并两个 li
  • ES6 Set 转换成 Array

    用 操作符 可以实现将 Set 转成 Array let a new Set 1 2 3 4 5 let arr a console log arr 运行结果 1 2 3 4 5
  • python怎么编写模拟交易_python简单区块链模拟详解

    最近学习了一点python 那就试着做一做简单的编程练习 首先是这个编程的指导图 如下 对的 类似一个简单区块链的模拟 代码如下 class DaDaBlockCoin index 索引 timestamp 时间戳 data 交易记录 se
  • [QT_000]学习Qt的最好途径(个人记录)

    00 先通过相关书籍 网上视频了解基础 可以通过某位大神的系列博客总结去学习 这样相对全面一些 达到最好能了解到整个Qt的全貌 不求甚解 01 当了解完基础以后 把Qt自带的案例例子运行一遍 搞懂案例 这是非常有用的一步 现实中好多小功能都
  • 数字水印技术的原理及应用研究

    一 问题分析 随着计算机和网络技术的普及 数字产品的保密性及版权保护等问题逐渐凸显出来 这使得数字水印技术成为热点问题 一些别有企图的个人和团体在没有得到原作者的同意的情况下复制和传播有版权的数据文件或作品 所以 数字媒体的信息安全 知识产
  • 【ARIMA-SSA-LSTM】合差分自回归移动平均方法-麻雀优化-长短期记忆神经网络研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 ARIMA模型 1 2 鲸鱼优化算法 1 3 LSTM 模型 2 运行结果 3 参考文献 4 Py
  • 计算机网络 五、 五层协议体系结构-----网络层(上)

    网络层 network layer 主要包括以下两个任务 1 负责为分组交换网上的不同主机提供通信服务 在发送数据时 网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送 在TCP IP体系中 由于网络层使用IP协议 因此分组也叫做
  • 了解chat-GPT必须要读的论文汇总

    前言 今年在nlp领域 最靓的仔要数chat gpt了 未来也可能颠覆搜索行业 甚至其他行业也会慢慢的被颠覆被取代 作为技术人员 为了保证饭碗 必须跟进相关技术的发展 目前梳理了一下chat gpt技术的脉络 通过该脉络可以比较系统的了解c
  • 开发uniapp苹果app,苹果签名证书的创建方法

    在uniapp云打包界面 打包苹果app 需要私钥证书p12文件 还需要证书profile文件和证书密码 这两个文件到底是从什么地方获取的呢 答案是这两个证书需要在苹果开发者中心生成 下面我们这篇教程 将教会大家如何创建这两个打包所需的证书
  • C语言基础(五)自定义类型与宏定义

    自定义类型与宏定义 一 自定义类型 二 宏定义 三 枚举 一 自定义类型 自定义类型 typedef用新的类型名代替原有的类型名 例如 指定用u8为类型名 作用与unsigned char相同 typedef unsigned char u
  • 自定义Dynamics 365实施和发布业务解决方案 - 7. 报表

    在每个组织中 决策者都依赖于各种报告来推动业务取得成功 因此 每个软件开发项目都需要开发报告 Dynamics365配备了最先进的报告功能 这些报告的范围从简单的查询到具有复杂查询的更高级的报告 此外 Dynamics365的一个关键功能是
  • Qt 串口发送0x00

    应用场景 大恒光电的平移台 GCD 040101M 先看看要发什么东西 这是串口监听软件截取的结果 绿色的字 串口协议主要包括三个部分 前面是固定的 后面是key 后面是 0x00 最后面是数据 错误版本1 bool MoveStage w