VB.net写一个简易串口RS485调试助手

2023-05-16

最近在调试带rs485串口通讯的设备,项目上主要是用PLC和串口通讯,因为PLC有集成好的串口块,使用起来比较容易,为了方便测试,就想着用上位机写一个简易的串口通讯程序,用于调试。
在网上查找了一些资料后,基本上选择了两个方式,VB.net和python,python来写串口通讯程序,我在另一篇博客里面已经发了:
https://blog.csdn.net/normer123456/article/details/124402399
本文中介绍一下使用vb.net来写串口程序的示例。
在这里插入图片描述

图片是UI界面,vb.net相对来说,界面比python要友好一点,控件可以直接拖放到窗体,而python制作界面,需要利用pyqt这类UI模块,有点麻烦。
软件:Microsoft Visual Studio Community 2019 版本 16.11.3
硬件:windows10电脑
rs485串口设备(流量计)

串口通讯在逻辑步骤上,基本上差不多,无非是初始化参数,打开串口,读写数据,关闭串口,就不多赘述了。

直接看程序吧。

01 初始化:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim baud_installs() As String = New String() _
        {"9600", "19200", "38400", "115200"}

        baudcombox.Items.AddRange(baud_installs)
        baudcombox.Text = baudcombox.Items(0)

        databitcombox.Items.AddRange({"8", "7"})
        databitcombox.Text = databitcombox.Items(0)


        stopbitcombox.Items.AddRange({"0", "1"})
        stopbitcombox.Text = stopbitcombox.Items(0)

        paritycombox.Items.AddRange({"无", "偶校验", "奇校验"})
        paritycombox.Text = paritycombox.Items(0)


        ToolStripStatusLabel1.Text = "当前无可用串口。。。"

        huayuan(PictureBox1, Color.Gray)

    End Sub

这里参数利用combox控件来进行选择,根据所选择不同,传入不同的值来进行初始化,所以,程序启动后,必须先设置参数值,然后才能点击“打开按钮,否则会提示错误。

02 打开串口:

 Private Sub portopen()
        Try
            SerialPort1.Open()
            Call portstart()
            If SerialPort1.IsOpen Then

                ToolStripStatusLabel1.Text = SerialPort1.PortName + "已打开"
                ToolStripStatusLabel1.ForeColor = Color.Green
                huayuan(PictureBox1, Color.Green)
                Console.WriteLine(SerialPort1.PortName)

                Console.WriteLine("ok!")
            End If


        Catch ex As UnauthorizedAccessException

            MsgBox("串口被占用或串口错误!", MsgBoxStyle.Information, "tips!")

        End Try
    End Sub

打开串口就是serial.open即可。

03 写入数据:

Private Sub comsend()

        Dim senddata As String
        Dim senddata_byte(8) As Byte

        'datestr = Format(Now(), "yyyy/MM/dd H:mm:ss ffff")
        datestr = Format(Now(), "yyyy/MM/dd H:mm:ss")

        'TextBox1.Clear()

        'senddata_byte(0) = &H1    '一种表示16进制数的方式
        'senddata_byte(1) = &H3
        'senddata_byte(2) = &H0
        'senddata_byte(3) = &H10
        'senddata_byte(4) = &H0
        'senddata_byte(5) = &H2
        'senddata_byte(6) = &HC5
        'senddata_byte(7) = &HCE


        senddata_byte = strtohex(TextBox1.Text)
        senddata = ""

        Try
            SerialPort1.Write(senddata_byte, 0, 8)
            TextBox1.AppendText(senddata)
            TextBox2.AppendText(vbCrLf + "[" + datestr + "]" + " " + senddata + vbCrLf)

            comrec()

            Console.WriteLine("send ok!")

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.YesNoCancel, "tips!")

        End Try
    End Sub

写入数据或者说发送数据,就是serial.write,这里需要注意的是,发送的数据是字节数组形式,因此,需要进行字符串到字节的转换。
关于字符串和字节数组之间的互相转换,我在测试的时候,在网上找了不少资料,许多博客虽然写了,但大多是抄来的,或者就是不够实用,很多人是利用字符转成ASCII码,在对应转16进制,程序比较麻烦。
然后我找了半天,发现一个利用正则表达式来进行转换的, 比较简单有效,感谢网络。

string to byte 转换程序:

Private Function strtohex(s As String) '将字符串转成16进制数值

        Dim mc As MatchCollection = Regex.Matches(s, "(?i)[\da-f]{2}")  '使用正则表达式从输入文本框的字符串中提取16进制数
        Dim buf As New List(Of Byte)()
        Dim bt As Byte()


        For Each m As Match In mc

            buf.Add(Byte.Parse(m.Value, System.Globalization.NumberStyles.HexNumber))

        Next
        bt = buf.ToArray()
        Return bt
        'Console.WriteLine(bt)



    End Function

至于16进制转字符串比较简单, vb.net有个Hex函数直接就可以转换,不多说了。

04 读取数据:

Private Sub comrec()
        Dim rxstr As Integer
        Dim recstr As String
        Dim recbyte(20) As Byte
        datestr = Format(Now(), "yyyy/MM/dd H:mm:ss")
        Try
            rxstr = SerialPort1.Read(recbyte, 0, 10)
            For i = 0 To rxstr - 1
                recstr = recstr + hextostr(recbyte(i)) + " "
            Next
            TextBox2.AppendText(vbCrLf + "[" + datestr + "]" + " " + recstr + vbCrLf)
            Console.WriteLine(recstr)
            Application.DoEvents()
            'TextBox1.AppendText(recstr)

        Catch ex As Exception
            MsgBox(ex.Message + "or 无可用串口", MsgBoxStyle.YesNo, "tips!")
            'rxstr = SerialPort1.ReadExisting
            'TextBox1.AppendText(vbCrLf + "[" + datestr + "]" + " " + rxstr + vbCrLf)
            'Application.DoEvents()

        End Try
    End Sub

读取就是使用serial.read,或者readall、readline都行。read的话,需要设置缓冲区、偏移量、接收长度,比较简单。

读写完成后,如果不想一直读写。可以关闭串口:

Private Sub portclose()
        Try
            If SerialPort1.IsOpen Then
                SerialPort1.Close()
                If SerialPort1.IsOpen = 0 Then
                    ToolStripStatusLabel1.Text = SerialPort1.PortName + "已关闭"
                    ToolStripStatusLabel1.ForeColor = Color.Red
                    huayuan(PictureBox1, Color.Gray)
                End If
            Else
                MsgBox("无可用串口", MsgBoxStyle.Information, "tips!")

            End If


        Catch ex As Exception
            MsgBox("串口未打开或串口异常!", MsgBoxStyle.Information, "tips!")
        End Try
    End Sub

serial.close即可。

关于程序的一些细节,我这边就不多说了,基本上都是在网上找了很多资料,然后自己一点点试出来的,网上虽然有很多资料,但很少有直接拿过来能用的,想要满足自己使用,还是得自己摸索半天。我把完整程序也发出来,需要说明的是,程序是经过我测试,完全可用的,但我不确定如果有朋友想直接使用,是否是和我一样的。

完整程序:

Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Net

Public Class Form1

    Dim ser_br As Integer
    Dim ser_db As Integer
    Dim ser_stopbit As Integer
    Dim ser_parity As Integer

    Dim datestr As String = ""

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim baud_installs() As String = New String() _
        {"9600", "19200", "38400", "115200"}

        baudcombox.Items.AddRange(baud_installs)
        baudcombox.Text = baudcombox.Items(0)

        databitcombox.Items.AddRange({"8", "7"})
        databitcombox.Text = databitcombox.Items(0)


        stopbitcombox.Items.AddRange({"0", "1"})
        stopbitcombox.Text = stopbitcombox.Items(0)

        paritycombox.Items.AddRange({"无", "偶校验", "奇校验"})
        paritycombox.Text = paritycombox.Items(0)


        ToolStripStatusLabel1.Text = "当前无可用串口。。。"

        huayuan(PictureBox1, Color.Gray)

    End Sub

    Private Sub portstart()


        SerialPort1.BaudRate = ser_br
        SerialPort1.DataBits = ser_db
        SerialPort1.StopBits = ser_stopbit
        SerialPort1.Parity = ser_parity
        SerialPort1.ReadTimeout = 1000
        SerialPort1.NewLine = vbCrLf
    End Sub

    Private Sub getserialportname()
        For Each sp As String In My.Computer.Ports.SerialPortNames
            ComboBox1.Items.Add(sp)
        Next
        ComboBox1.Text = ComboBox1.Items(0)
        'Console.WriteLine(ComboBox1.Text)
    End Sub
    Private Sub portopen()
        Try
            SerialPort1.Open()
            Call portstart()
            If SerialPort1.IsOpen Then

                ToolStripStatusLabel1.Text = SerialPort1.PortName + "已打开"
                ToolStripStatusLabel1.ForeColor = Color.Green
                huayuan(PictureBox1, Color.Green)
                Console.WriteLine(SerialPort1.PortName)

                Console.WriteLine("ok!")
            End If


        Catch ex As UnauthorizedAccessException

            MsgBox("串口被占用或串口错误!", MsgBoxStyle.Information, "tips!")

        End Try
    End Sub
    Private Sub portclose()
        Try
            If SerialPort1.IsOpen Then
                SerialPort1.Close()
                If SerialPort1.IsOpen = 0 Then
                    ToolStripStatusLabel1.Text = SerialPort1.PortName + "已关闭"
                    ToolStripStatusLabel1.ForeColor = Color.Red
                    huayuan(PictureBox1, Color.Gray)
                End If
            Else
                MsgBox("无可用串口", MsgBoxStyle.Information, "tips!")

            End If


        Catch ex As Exception
            MsgBox("串口未打开或串口异常!", MsgBoxStyle.Information, "tips!")
        End Try
    End Sub
    Private Sub comrec()
        Dim rxstr As Integer
        Dim recstr As String
        Dim recbyte(20) As Byte
        datestr = Format(Now(), "yyyy/MM/dd H:mm:ss")
        Try
            rxstr = SerialPort1.Read(recbyte, 0, 10)
            For i = 0 To rxstr - 1
                recstr = recstr + hextostr(recbyte(i)) + " "
            Next
            TextBox2.AppendText(vbCrLf + "[" + datestr + "]" + " " + recstr + vbCrLf)
            Console.WriteLine(recstr)
            Application.DoEvents()
            'TextBox1.AppendText(recstr)

        Catch ex As Exception
            MsgBox(ex.Message + "or 无可用串口", MsgBoxStyle.YesNo, "tips!")
            'rxstr = SerialPort1.ReadExisting
            'TextBox1.AppendText(vbCrLf + "[" + datestr + "]" + " " + rxstr + vbCrLf)
            'Application.DoEvents()

        End Try
    End Sub
    Private Sub comsend()

        Dim senddata As String
        Dim senddata_byte(8) As Byte

        'datestr = Format(Now(), "yyyy/MM/dd H:mm:ss ffff")
        datestr = Format(Now(), "yyyy/MM/dd H:mm:ss")

        'TextBox1.Clear()

        'senddata_byte(0) = &H1    '一种表示16进制数的方式
        'senddata_byte(1) = &H3
        'senddata_byte(2) = &H0
        'senddata_byte(3) = &H10
        'senddata_byte(4) = &H0
        'senddata_byte(5) = &H2
        'senddata_byte(6) = &HC5
        'senddata_byte(7) = &HCE


        senddata_byte = strtohex(TextBox1.Text)
        senddata = ""

        Try
            SerialPort1.Write(senddata_byte, 0, 8)
            TextBox1.AppendText(senddata)
            TextBox2.AppendText(vbCrLf + "[" + datestr + "]" + " " + senddata + vbCrLf)

            comrec()

            Console.WriteLine("send ok!")

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.YesNoCancel, "tips!")

        End Try
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        getserialportname()

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            SerialPort1.PortName = ComboBox1.SelectedItem()
            Console.WriteLine("you choose:" & SerialPort1.PortName)
            portopen()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.YesNoCancel, "tips!")
        End Try


    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        portclose()

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        ToolStripStatusLabel1.Text = "当前选择串口号:" + ComboBox1.SelectedItem()

        'Console.WriteLine(ComboBox1.Text)
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        comsend()

    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        comrec()


    End Sub

    Private Sub paritycombox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles paritycombox.SelectedIndexChanged

        Select Case paritycombox.Text
            Case "无"
                ser_parity = 0
            Case "偶校验"

                ser_parity = 1
            Case "奇校验"
                ser_parity = 2
        End Select
        'Console.WriteLine(ser_parity)


    End Sub

    Private Sub baudcombox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles baudcombox.SelectedIndexChanged
        Select Case baudcombox.Text
            Case "9600"
                ser_br = 9600
            Case "19200"
                ser_br = 19200
            Case "38400"
                ser_br = 38400
            Case "115200"
                ser_br = 115200
        End Select
        'Console.WriteLine(ser_br)
    End Sub

    Private Sub databitcombox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles databitcombox.SelectedIndexChanged
        Select Case databitcombox.Text
            Case "8"
                ser_db = 8
            Case "7"
                ser_db = 7
        End Select
    End Sub

    Private Sub stopbitcombox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles stopbitcombox.SelectedIndexChanged
        Select Case stopbitcombox.Text
            Case "0"
                ser_stopbit = 0
            Case "1"
                ser_stopbit = 1
        End Select
    End Sub

    ''' <summary>
    ''' 16进制转字符函数
    ''' 本函数为自定义函数
    ''' </summary>
    ''' <param name="h">字节</param>

    Private Function hextostr(h As Byte) '将16进制数值转成字符串,且二者等效转换

        Dim x As String

        If h < 10 Then
            x = "0" + Hex(h)
        Else
            x = Hex(h)
        End If
        Return x

    End Function
    ''' <summary>
    ''' 字符转16进制函数
    ''' 本函数为自定义函数
    ''' </summary>
    ''' <param name="s">字符串</param>

    Private Function strtohex(s As String) '将字符串转成16进制数值

        Dim mc As MatchCollection = Regex.Matches(s, "(?i)[\da-f]{2}")  '使用正则表达式从输入文本框的字符串中提取16进制数
        Dim buf As New List(Of Byte)()
        Dim bt As Byte()


        For Each m As Match In mc

            buf.Add(Byte.Parse(m.Value, System.Globalization.NumberStyles.HexNumber))

        Next
        bt = buf.ToArray()
        Return bt
        'Console.WriteLine(bt)



    End Function


    ''' <summary>
    ''' 画圆函数
    ''' 本函数为自定义函数
    ''' </summary>
    ''' <param name="pb">图形容器</param>
    ''' <param name="c">颜色</param>
    Private Sub huayuan(pb As PictureBox, c As Color) '在picturebox中绘制圆形的函数

        Dim b As Bitmap = New Bitmap(pb.Width, pb.Height)
        Dim g As Graphics = Graphics.FromImage(b)
        Dim mybrush As New SolidBrush(c)
        g.FillEllipse(mybrush, 0, 0, pb.Width, pb.Height)
        g.Dispose()
        pb.Image = b



    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        Dim buf As Byte()
        Dim n As Integer

        Console.WriteLine(strtohex(TextBox1.Text))
    End Sub
End Class

如果有朋友有什么问题,可以评论区问,我知道的,会回复,不懂的,就没办法了。

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

VB.net写一个简易串口RS485调试助手 的相关文章

  • ssh免密登录

    windows 个人账户下ssh的公钥内容需要保存至远程服务器 xff0c 一般是C Users xxx ssh id rsa pub 远程服务器个人账户下 ssh目录创建文件authorized keys xff08 如果没有的话需创建
  • vscode+jlink+GDBServer在线调试

    GDB GDBServer JLink之间的关系 借用网上一张图 xff0c 原文参考 https blog csdn net qq 40833810 article details 106713462 我们在进行GDB调试时 xff0c
  • 嵌入式函数调用入栈与出栈

    简单的例程 xff0c 几个函数调用 xff0c 来查看寄存器状态 xff0c 主要是学习一下cortem M核中LR寄存器的理解 xff1a 例程源码 xff1a span class token keyword static span
  • 关于嵌入式函数入口参数的了解

    我们每次在编写函数的时候 xff0c 很多时候都少不了传入参数 xff0c 也就是函数的形参 xff0c 少至一个 xff0c 多至数十个都有可能 xff0c 那么这些函数的入口参数在进入函数的时候都是在哪里存放着呢 xff1f 其实 xf
  • MarkDown基本语法学习

    标题 span class token comment 一级标题 span span class token comment 二级标题 span span class token comment 三级标题 span span class t
  • ssh免密登录远程服务器

    公钥生成 此命令 xff0c 一路向西即可生成 ssh keygen 生成的公钥文件目录一般默认在 xff1a C Users 用户名 ssh 中的 id rsa pub 文件 Windows登录 个人账户下ssh的公钥内容需要保存至远程服
  • esp8266(MQTT固件)通过at指令连接阿里云平台

    使用记录 esp8266模组固件烧录工具准备串口调试助手阿里云账户及物联网设备申请开启MQTT通信方式一 阿里云直接获取连接参数方式二 阿里云三元组计算连接参数 严重注意 实验 xff1a esp8266 连接阿里云 准备工作 xff1a
  • Python爬虫实战:抓取并保存百度云资源(附代码)

    專 欄 王雨城 xff0c Python中文社区专栏作者 博客 xff1a http www jianshu com u 88ff70818bd1 寻找并分析百度云的转存api 首先你得有一个百度云盘的账号 xff0c 然后登录 xff0c
  • UAV-5--链接飞控以及配置SITL以及ardupilot环境

    linux系统链接飞控以及配置SITL以及ardupilot环境 先更改本机host到对象的ip 再进行ssh的链接 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img meuTGFrN 1651933771950
  • python面向对象实现布谷鸟算法(CS)

    以最小化一个m维变量的目标函数min f X 为例 xff0c 描述CS算法的实现步骤 step1 定义目标函数f X xff0c xff0c 问题维数m xff0c 寄生巢规模Popsize 61 N xff0c 淘汰概率Pa xff0c
  • Linux环境下创建并运行shell脚本(.sh文件)

    1 在指定位置新建 sh文件 在Linux环境下 xff0c 通过 ls ls l ls a 命令查看当前目录下的内容 xff0c 通过 cd 命令进入想新建 sh文件的文件夹后 xff0c 通过 pwd 命令查看所在目录的地址 通过如下命
  • nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因及避坑解决方案

    由于断电 xff0c 服务器重启了 xff0c 当我再次跑实验时 xff0c 发现cuda不可用 xff0c 于是输入 nvidia smi 才发现了一个错误 xff0c 如下 xff1a NVIDIA SMI has failed bec
  • CAN ack slot应用

    需求描述 某车厂对CAN初始化完成的时间T xff0c 要求 lt 45ms 解决办法 将MCU CAN控制器切换为可收发模式的代码往前放 测试方法 1 采用CANoe监测总线报文 xff0c 测量从 总线第一次出现错误帧到总线第一次出现C
  • 如何在ubuntu18.04系统中切换python版本

    在ubuntu18 04系统中如何切换python版本呢 xff1f 本文给出详细说明 1 查看python所在目录 whereis python 2 添加python list update alternatives install us
  • 深入理解计算机系统:网络编程 上

    一直以来对计算机网络比较感兴趣 xff0c 但是无奈大学计算机网络的学习非常表面 xff0c 已经忘得差不多了 毕业后读了一些网络方面的书 xff0c 对网络知识的冰山一角有了一些感悟 随着网络方面的书越读越多 xff0c 不懂的地方也越来
  • K8s解析<2>--Service与K8s中的网络通信架构简述

    Service介绍 Service可以看作是一组提供相同服务的Pod对外的访问接口 借助Service xff0c 应用可以方便地实现服务发现和负载均衡 Service也是K8s里的最核心的资源对象之一 xff0c K8s里的每个Servi
  • ROS 多线程以及OOP编程注意项(1)

    环境配置 Ubuntu20 04ROS Noetic 问题描述 按照往常使用类中回调函数并通过CallbackQueue开启多个Queue时出现回调函数没响应的情况 代码如下 namespace KINE class kine privat
  • 百度 2014 校园招聘 软件研发工程师 笔试题(天津站)

    2013 9 28笔试 xff08 此为回忆版 xff09 一 简答题 xff08 30分 xff09 1 动态链接和静态链接的优缺点 xff08 10分 xff09 2 轮询任务调度和抢占式任务调度的区别 xff08 10分 xff09
  • 【免费送书】说说哪本书曾经让你爱不释手

    编程狗在线 自由的编程学习平台 一本好书带给人的不止于知识收获 xff0c 还会对你的成长有所帮助 xff0c 与你的每次经历产生共鸣 每天读一点 xff0c 坚持不懈 xff0c 你就能成为专业高手 如果你能每两个月读一本好的编程书 xf
  • MySQL 5.6 源码目录结构

    基于MySQL 5 6 26源码 源码目录 xff1a BUILD 构建工程的脚本 client 客户端 cmake cmd line utils 命令行工具 dbug 调试库 Docs 文档 extra 一些相对独立的次要工具 inclu

随机推荐

  • 计算机I/O原理

    cpu通过IO命令控制设备 xff0c cpu对设备的控制仅仅可以到达设备控制器 xff0c 无法直接控制设备 设备无法直接和cpu通信 xff0c 设备控制器通过中断机制向cpu反馈信息 即这个一个模型 CPU IO指令 gt 设备控制器
  • 计算机的I/O端口地址表

    PC的I O端口地址表 xff08 I O端口地址表 xff09 http tieba baidu com f kz 61 16042340 I O端口地址表 PC只用了10位地址线 A0 A9 进行译码 xff0c 其寻址的范围为0H 3
  • 利用pthread进行数组求和

    POSIX thread 简称为pthread xff0c Posix线程是一个 POSIX 标准线程 利用多线程可以提高运算速度 利用pthread进行数组求和的程序如下 xff1a include lt stdio h gt inclu
  • 字符串的全排列程序

    include lt iostream gt include lt cstring gt using namespace std void swap char str int i int j char tmp 61 str i str i
  • Google面试总结

    分享 Google面试总结 来源 xff1a 王冠中的日志 终于把Google的面试给搞完了 xff0c 感觉可以算是Tech Interview的顶峰了 这里主要写一下大概流程和内容 xff0c 给大家以后interview一个参考 G的
  • 【硬件在环Hil联调问题记录1】

    硬件在环Hil联调问题记录1 simulink中 quadprog 函数代码生成解决方案 Carsim加载不同版本Matlab的操作 仿真时各模块的作用 xff1a Simulink xff08 2019b xff09 控制算法 Carsi
  • C++ boost和C++ stl的区别和联系

    C C 43 43 语言的一大特点是其标准库可以用语言自身实现 C 标准库的 strlen strcpy strcmp 系列函数是教学与练习的好题材 xff0c C 43 43 标准库的 complex string vector 则是类
  • 最新(2023.3.17)配置llvm、clang、clangd、clang-tidy方法,极其简单,轻松上手

    Linux 1 我的Linux是Ubuntu22 04 xff0c 首先把软件下载源改成国内的aliyun xff0c 很简单 xff0c 按照我的这个来做就行 点开这个图标 xff0c 然后点击下面这个 在download from那里把
  • Ubuntu 网线直连(开机自动配置ip地址、启动vnc),vnc远程桌面

    sudo ifconfig enp4s0 upsudo ifconfig enp4s0 192 168 1 20 xff08 要和pc机保证在相同网段 xff09 vncserver 2以下为开机启动配置和启动操作如果需要开机自行配制 启动
  • iftop 较全

    iftop nBNP nbsp i nbsp enp2s0 nbsp f dst port 6379 可以使用iftop命令的 f选项来过滤指定的端口 该选项允许您指定BPF过滤器规则 用于仅显示符合规则的流量 例如 以下命令将仅显示目标端
  • 随机生成slam 真值和里程计值的 g2o 文件(python实现)

    生成了slam 里程计的真值和里程计的值 并保存顶点和边为 g2o文件 nbsp 随机生成slam 真值和里程计值的 g2o 文 件 gen test data py import numpy as np import matplotlib
  • 滑膜+pid+上层设计下层平均分配 优化分配 动态载荷分配

    滑膜 43 pid 43 上层设计下层平均分配 优化分配 动态载荷分配 xff0c 分布式电动汽车操稳控制 本研究在matlab simulink建立七自由度轮毂电机驱动汽车模型 xff0c 使用滑膜联合控制以及pid控制实现转向过程中质心
  • 12本Python书籍推荐

    Python是用于各种任务和领域的优秀编程语言之一 Python的用户友好性 xff0c 高级特性以及对简单性和增强代码可读性的强调使其成为全球许多开发人员的理想选择 诸如此类的功能使应用程序开发 xff0c 数据科学 xff0c 人工智能
  • Ubuntu 屏幕翻转90度怎么恢复

    笔记本电脑的 ubuntu 屏幕有时候会无意中90度翻转 xff0c 这时候你只能侧着脸看 xff0c 靠鼠标操作想要恢复是极其尴尬的一件事 xff0c 最快捷的方法就用命令是删除 iio sensor proxy 程序 第一步 Ctrl
  • 使用Python+Opencv从摄像头逐帧读取图片保存在本地

    今天测试的时候 xff0c 遇到了一个问题 xff0c 测试需求是 xff0c 需要把摄像头拍摄的实时视频逐帧率保存下来 经过查阅资料以及网友帮助 xff0c 目前已经完成 记录下来希望可以帮助有需要的朋友 1 思路 使用Python 43
  • vscode 运行C++

    本文先介绍了windows下 VSCODE运行C 43 43 前 xff0c 搭建C 43 43 运行环境的必要步骤 后介绍了tasks json launch json的作用 xff0c 并给出了自己使用的配置方案 最后给出了常见问题的解
  • 在执行launch文件时,如果显示不存在这个package

    在执行launch文件时 xff0c 如果显示不存在这个package xff0c 则应注意可能是下述情况导致 xff1a catmake编译完 xff0c 再用rosrun或roslaunch命令找不到package时 xff0c 这时需
  • 迷一样的穿越机飞控电容的作用

    穿越机电源上要并个大电容 xff0c 今天终于碰到一位真神说明白了 xff1a 电容两个作用 xff0c 一个是在你插电的一瞬间 xff0c 因为里面有降压设备大部分都是线圈类的东西 xff0c 产生电磁效应会有高于电池特别高的电压 xff
  • 一、机械小白学单片机之初认识ESP8266

    前言 本人刚接触单片机开发 xff0c 原专业为机械自动化 xff0c 因为传统机械行业的不景气 xff0c 想要转为从事电子行业 之前有一点C语言基础 xff0c 还学过一点点C xff0c 但是也就一点点 可谓小白学习之路 希望能够给大
  • VB.net写一个简易串口RS485调试助手

    最近在调试带rs485串口通讯的设备 xff0c 项目上主要是用PLC和串口通讯 xff0c 因为PLC有集成好的串口块 xff0c 使用起来比较容易 xff0c 为了方便测试 xff0c 就想着用上位机写一个简易的串口通讯程序 xff0c