linux下485通信调试记录

news2024/12/29 10:50:43

1、使用linux下使用串口调试助手

linux下可以安装并使用下述串口调试工具进行串口测试:

1.1、cutecom

cutecom是linux下常用的图形化串口调试软件,通过以下命令安装并打开:

sudo apt-get install cutecom
sudo cutecom

显示如下:
在这里插入图片描述使用cutecom时需要先确认需要连接的端口号,可以使用下述命令获取当前的SUB端口:

ls /dev | grep USB

在这里插入图片描述
确认当前硬件连接的端口号后,在cutecom界面的右上角打开settings,设置端口的信息:
在这里插入图片描述
主要需要设置的是一个波特率一个端口号,需要与连接的硬件保持一致,然后点左侧的open建立连接。
此时可以在左侧input一栏中输入需要下发的具体参数,右侧选择数据类型,一般默认选择16进制Hex,参数需要根据硬件实际硬件需求下发。同时下方空白处会显示返回值,勾选下方的Hex output可以将返回值也转换为16进制数,否则可能会看起来像是乱码。

在这里插入图片描述

2、ROS软件开发

2.1、依赖安装

在OS中可以通过serial开源库实现串口通讯,但是需要注意该库需要本地安装,下载地址为:

git clone https://github.com/wjwwood/serial.git

下载完成后,放到catkin_ws/src文件夹下,然后在catkin_ws文件夹目录下打开终端catkin_make执行编译。或者也可以使用下述命令安装:

cd serial
make
make install

2.2、C++下的serial使用

下述通过一个简单的示例展示ROS下的串口通讯:

//serial_port.cpp
#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>
 
int main(int argc, char** argv)
{
    ros::init(argc, argv, "serial_port");
    //创建句柄(虽然后面没用到这个句柄,但如果不创建,运行时进程会出错)
    ros::NodeHandle n;
    
    //创建一个serial类
    serial::Serial sp;
    //创建timeout
    serial::Timeout to = serial::Timeout::simpleTimeout(100);
    //设置要打开的串口名称
    sp.setPort("/dev/ttyUSB0");
    //设置串口通信的波特率
    sp.setBaudrate(115200);
    //串口设置timeout
    sp.setTimeout(to);
 
    try
    {
        //打开串口
        sp.open();
    }
    catch(serial::IOException& e)
    {
        ROS_ERROR_STREAM("Unable to open port.");
        return -1;
    }
    
    //判断串口是否打开成功
    if(sp.isOpen())
    {
        ROS_INFO_STREAM("/dev/ttyUSB0 is opened.");
    }
    else
    {
        return -1;
    }
    
    ros::Rate loop_rate(500);
    while(ros::ok())
    {
        //获取缓冲区内的字节数
        size_t n = sp.available();
        if(n!=0)
        {
            uint8_t buffer[1024];
            //读出数据
            n = sp.read(buffer, n);
            
            for(int i=0; i<n; i++)
            {
                //16进制的方式打印到屏幕
                std::cout << std::hex << (buffer[i] & 0xff) << " ";
            }
            std::cout << std::endl;
            //把数据发送回去
            uint8_t cmd_init_01[8] = { 0x01, 0x06, 0x01, 0x00, 0x00, 0x01, 0x49, 0xF6};
            sp.write(cmd_init_01, n);
        }
        loop_rate.sleep();
    }
    
    //关闭串口
    sp.close();
 
    return 0;
}

需要注意的地方主要是函数中的设置,这里需要设置波特率与端口号。然后通过open函数建立连接。如果端口号错误连接会建立失败,但是需要注意波特率错误的情况下open函数还是能打开端口的,但是串口数据位会对不上,下发数据不一定正确。

2.3、修改CMakeLists

在使用serial包之前,还需要对CMakeLists文件进行修改,首先是CMakeLists.txt中的find语句里,添加serial的依赖:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  serial
  # 。。。
)

然后添加头文件路径:

## Include headers
include_directories(include  ${catkin_INCLUDE_DIRS})

2.4、python下的serial使用

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import rospy
import serial

def serial_communication():
    # 初始化ROS节点
    rospy.init_node('serial_node', anonymous=True)
    # 设置串口参数
    ser = serial.Serial('/dev/ttyUSB0', 921600, timeout=1)
#    ser = serial.Serial('/dev/imu', , timeout=1)
    while not rospy.is_shutdown():
        # 从串口读取数据
        data = ser.readline()
        rospy.loginfo(data)
        if data: 
            print(data)
            #rospy.loginfo("Received: " + data.strip())
        msg = '01 06 01 03 01 F4 78 21'
        # 发送数据到串口
        #ser.write(msg.encode('utf-8'))
        print(msg.encode('utf-8'))
        rospy.loginfo("send msg")
        rospy.sleep(0.01)

if __name__ == '__main__':
    try:
        serial_communication()
    except rospy.ROSInterruptException:
        pass

python版本的数据格式上述应该是错误的,后续有正确修改再更新。

2.5、报错处理

在使用C++串口的时候,如果报错:Unable to open port,一般是两种情况:
1、端口号错误
关于端口号错误可以通过第一章的ls /dev | grep USB命令确定当前实际使用的USB端口号。
2、端口号权限不够
如果确认端口号没有问题,但是仍然打不开端口,可以使用以下方法配置端口权限:

sudo gedit /etc/udev/rules.d/70-ttyusb.rules

配置端口权限:

KERNEL=="ttyUSB[0-9]*", MODE="0666"

使文件生效:

service udev reload
service udev restart

如果运行这两条指令没有即时生效的话可以把设备重启一下。

参考:
1、python 之serial模块,读写串口数据

2、STM32通过rosserial接入ROS通讯开发

3、在ROS中Serial包的使用

4、ros中使用serial包实现串口通信(这个注释得比较详细)

5、ubuntu 20.04 ROS Noetic 无serial包解决方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAY01_Spring—Spring框架介绍IOCSpring工厂模式

目录 1 什么是框架2 Spring框架2.1 Spring介绍2.2 MVC模型说明2.3 IOC思想2.3.1 问题说明2.3.2 IOC说明 3 Spring IOC具体实现3.1 环境准备3.1.1 关于JDK说明3.1.2 检查JDK环境配置 3.2 创建项目3.3 关于Maven 命令3.3.1 install 命令3.3.2 clean 命令 3.4 添加jar包文件3.4.1 …

经典网络 循环神经网络(一) | RNN结构解析,代码实现

文章目录 1 提出背景2 RNN2.1 RNN结构2.2 RNN代码实现2.3 代码简洁实现 1 提出背景 为什么要引入RNN呢&#xff1f; 非常简单&#xff0c;之前我们的卷积神经网络CNN&#xff0c;全连接神经网络等都是单个神经元计算 但在序列模型中&#xff0c;前一个神经元往往对后面一个神…

Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/135620590 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

36V/1.6A两通道H桥驱动芯片-SS8812T可替代DRV8812

由工采网代理的SS8812T是一款双通道H桥电流控制电机驱动器&#xff1b;每个 H 桥可提供输出电流 1.6A&#xff0c;可驱动两个刷式直流电机&#xff0c;或者一个双极步进电机&#xff0c;或者螺线管或者其它感性负载&#xff1b;双极步进电机可以以整步、2 细分、4 细分运行&…

旧路由重置新路由设置新路由设置教程|适用于自动获取IP模式

前言 如果你的光猫是直接拨号&#xff08;路由模式&#xff09;的&#xff0c;就可以按照本教程进行路由重置或者更换新路由器。 本文章适合电脑小白&#xff0c;请注意每一步哦&#xff01; 注意事项 开始之前需要确认光猫是桥接模式还是路由模式。如果光猫是路由模式&…

❤ HbuildX使用以及快捷键

❤ HbuildX使用以及快捷键 一、HbuildX使用 HbuildX左侧项目侧边栏 点击视图 > 显示项目左侧即可 二、HBuilder X 快捷键 左移 Shift tab 右移 tab 查找 全局文件搜索:CtrlP 本文档内查找字符串:ctrlf 目录内查找字符串:ctrlaltf 替换:ctrlh 查找下一个字符串:f3 查…

表的增删改查CURD(一)

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;MySql&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 新增&#xff08;Create&#xff09; 全列插入 指定列…

SDK游戏盾是什么?,sdk游戏盾有什么作用

在现今的游戏市场&#xff0c;游戏保护成为了每个游戏开发者都不能忽视的重要环节。恶意破解、作弊和盗版等问题严重影响了游戏的安全性和商业价值。而如何保护自己的游戏免受这些威胁&#xff0c;已经成为游戏开发者们面临的重大挑战。好在SDK游戏盾&#xff0c;它如同保护游戏…

家用小型洗衣机哪款性价比高?好用的内衣洗衣机推荐

现在大多数的上班族&#xff0c;面临的都是早九晚六的工作&#xff0c;而且工作完下班回家还是面对各种各样的家务&#xff0c;特别是清洗需要换洗的洗衣&#xff0c;属实是有点辛苦了。可能很多人为了方便&#xff0c;每次洗衣服的都是把一堆衣服直接丢进洗衣机&#xff0c;直…

Ansible Filter滤波器的使用(一)

一、【说在前面】 Ansible Filter一般被称为滤波器或者叫过滤器。 这个东西初次听到以为是什么科学计算的东西&#xff0c;但是想来ansible不太可能有什么滤波操作&#xff0c;所以这个东西本质是一个数值筛选器&#xff0c;内置函数&#xff0c;本质是一个为了做区别化的工具…

光学 | 联合Ansys Zemax及Lumerical应对AR/VR市场挑战

当前的增强现实和虚拟现实&#xff08;AR/VR&#xff09;市场涵盖了广泛的应用趋势&#xff0c;设计人员和各企业在努力寻找非传统解决方案&#xff0c;以满足主流消费者不断变化的需求。 对于AR头戴设备等可穿戴解决方案&#xff0c;设计思路通常源于对小巧轻量化系统的需求&a…

大数据传输慢的真正原因与解决方案

随着企业数据不断增长&#xff0c;大数据传输已成为一项至关重要的任务。然而&#xff0c;许多企业在处理大数据传输时频繁遭遇传输速度慢的问题。本文将深入探讨大数据传输速度慢的根本原因&#xff0c;并提供一些切实有效的解决方案。 大数据传输在企业中的重要性不言而喻&am…

算法竞赛备赛进阶之数位DP训练

数位DP的思想就是对每一位进行DP&#xff0c;计算时记忆化每一位可以有的状态&#xff0c;其作用是减少运算时间&#xff0c;避免重复计算。 数位DP是一种计数用的DP&#xff0c;一般就是要统计一个区间[A,B]内满足一些条件数的个数。 以1e9甚至1e18、1e100的问题为例&#x…

Docker 容器之间的互相通信

Docker容器之间的互相通信 步骤一&#xff1a;创建自定义网络 首先&#xff0c;我们需要创建一个自定义网络&#xff0c;以便容器可以连接到这个网络上&#xff0c;从而实现互相通信。在命令行中执行以下命令&#xff1a; # 创建 docker network create ddz # 查看 docker n…

洛谷 P1523 旅行商简化版【线性dp+npc问题简化版】

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1523 题目背景 欧几里德旅行商(Euclidean Traveling Salesman)问题也就是货郎担问题一直是困扰全世界数学家、计算机学家的著名问题。现有的算法都没有办法在确定型机器上在多项式时间内求出最优解&#xff0c;但是有…

2024 年企业要增强反脆弱性,IT 能够做什么?

新冠疫情被称为黑天鹅事件&#xff0c;而“黑天鹅”这个词的创造者纳西姆尼古拉斯塔勒布在另一本书《反脆弱&#xff1a;从不确定性中获益》&#xff08; CSDN博主读书笔记《反脆弱&#xff1a;从不确定性中获益》 &#xff09;中&#xff0c;则给出了面对随时可能出现的黑天鹅…

玖章算术NineData通过阿里云PolarDB产品生态集成认证

近日&#xff0c;玖章算术旗下NineData 云原生智能数据管理平台 (V1.0&#xff09;正式通过了阿里云PolarDB PostgreSQL版 (V11)产品集成认证测试&#xff0c;并获得阿里云颁发的产品生态集成认证。 测试结果表明&#xff0c;玖章算术旗下NineData数据管理平台 (V1.0&#xff…

Python源码23:海龟画图turtle画小狗狗

---------------turtle源码集合--------------- Python教程43&#xff1a;海龟画图turtle画小樱魔法阵 Python教程42&#xff1a;海龟画图turtle画海绵宝宝 Python教程41&#xff1a;海龟画图turtle画蜡笔小新 Python教程40&#xff1a;使用turtle画一只杰瑞 Python教程39…

❤ Uniapp使用一(文档和 API 篇)

❤ Uniapp使用一&#xff08;文档和 API 篇&#xff09; 一、介绍 uni-app官网&#xff1a;https://uniapp.dcloud.io/api/media/image?idpreviewimage 微信小程序官网&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.previewImage.html …

使用WAF防御网络上的隐蔽威胁之SQL注入攻击

SQL注入攻击是一种普遍存在且危害巨大的网络安全威胁&#xff0c;它允许攻击者通过执行恶意的SQL语句来操纵或破坏数据库。 这种攻击不仅能够读取敏感数据&#xff0c;还可能用于添加、修改或删除数据库中的记录。因此&#xff0c;了解SQL注入攻击的机制及其防御策略对于保护网…