基于C#实现串口调试工具读取温度值

简介: 基于C#实现串口调试工具读取温度值

一、硬件连接方案

1. 设备连接示意图

温度传感器(如DS18B20)  
│  
├─ DATA → STM32 GPIO(需上拉电阻)  
├─ VCC → 3.3V/5V  
└─ GND → 地

2. 串口转换模块

  • 使用MAX232或CH340芯片实现USB转TTL
  • 波特率建议:9600/115200(根据传感器手册设置)

二、串口调试工具配置

1. 推荐工具

工具名称 特点 适用场景
SSCOM 稳定支持多设备 工业级设备调试
串口调试助手V5 界面简洁,支持HEX显示 快速验证通信协议
CoolTerm 跨平台,支持数据保存 开发者日常调试

2. 参数设置示例

波特率: 9600  
数据位: 8  
停止位: 1  
校验位: None  
流控: 无

三、温度读取实现(C#)

1. 基础串口通信

using System.IO.Ports;

public class TemperatureReader {
   
    private SerialPort _serialPort;

    public TemperatureReader(string portName, int baudRate) {
   
        _serialPort = new SerialPort(portName, baudRate);
        _serialPort.DataReceived += SerialPort_DataReceived;
    }

    public void Open() {
   
        if (!_serialPort.IsOpen) {
   
            _serialPort.Open();
            SendCommand(0x03, 0x0000, 0x0002); // 发送读取温度指令
        }
    }

    private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) {
   
        byte[] buffer = new byte[_serialPort.BytesToRead];
        _serialPort.Read(buffer, 0, buffer.Length);
        ProcessData(buffer);
    }

    private void SendCommand(byte cmd, ushort startAddr, ushort numRegs) {
   
        byte[] frame = new byte[8];
        frame[0] = 0xAA; // 帧头
        frame[1] = cmd;
        frame[2] = (byte)(startAddr >> 8);
        frame[3] = (byte)startAddr;
        frame[4] = (byte)(numRegs >> 8);
        frame[5] = (byte)numRegs;
        byte crc = CalculateCRC(frame, 6);
        frame[6] = crc;
        frame[7] = (byte)(crc >> 8);
        _serialPort.Write(frame, 0, 8);
    }

    private void ProcessData(byte[] data) {
   
        if (data.Length < 9) return;
        if (data[0] != 0xAA) return;

        ushort rawTemp = (ushort)(data[3] << 8 | data[4]);
        float temperature = rawTemp / 16.0f; // 根据传感器规格转换
        Console.WriteLine($"温度值:{temperature:F1}℃");
    }

    private byte CalculateCRC(byte[] data, int length) {
   
        byte crc = 0xFF;
        for (int i = 0; i < length; i++) {
   
            crc ^= data[i];
            for (int j = 0; j < 8; j++) {
   
                crc = (crc & 0x80) != 0 ? (crc << 1) ^ 0x31 : crc << 1;
            }
        }
        return crc;
    }
}

2. Modbus协议实现(使用NModbus库)

using Modbus.Device;
using System.IO.Ports;

public class ModbusTemperature {
   
    private IModbusSerialMaster _master;

    public void Initialize(string portName, int baudRate) {
   
        SerialPort serialPort = new SerialPort(portName, baudRate);
        serialPort.Open();
        _master = ModbusSerialMaster.CreateRtu(serialPort);
    }

    public float ReadTemperature(byte slaveId) {
   
        ushort[] registers = _master.ReadHoldingRegisters(slaveId, 0, 2);
        ushort raw = (ushort)(registers[0] << 8 | registers[1]);
        return raw / 10.0f; // 假设传感器数据格式为×10℃
    }
}

四、数据解析流程

  1. 报文结构分析(以DS18B20为例)

    [0xAA][0x03][0x00][0x00][0x00][0x02][CRC低][CRC高]
    
    • 0xAA:起始符
    • 0x03:读取指令
    • 0x0000:起始地址
    • 0x0002:读取2字节
    • CRC:循环冗余校验
  2. 校验算法实现

    public static bool VerifyCRC(byte[] data) {
         
        byte crc = CalculateCRC(data, data.Length - 2);
        return crc == data[data.Length - 2] && 
               (byte)(crc >> 8) == data[data.Length - 1];
    }
    

五、工程优化建议

  1. 异常处理

    try {
         
        _serialPort.Open();
    } catch (IOException ex) {
         
        Debug.WriteLine($"串口被占用: {ex.Message}");
    }
    
  2. 数据缓存优化

    private StringBuilder _buffer = new();
    private void SerialPort_DataReceived(...) {
         
        _buffer.Append(Encoding.ASCII.GetString(buffer));
        if (_buffer.Contains("\r\n")) {
         
            ProcessLine(_buffer.ToString());
            _buffer.Clear();
        }
    }
    
  3. 多传感器支持

    public class MultiSensorManager {
         
        private Dictionary<byte, float> _temperatures = new();
    
        public void Update(byte slaveId, float temp) {
         
            lock(_temperatures) {
         
                _temperatures[slaveId] = temp;
            }
        }
    }
    

六、调试技巧

  1. 报文捕获 使用串口监控精灵捕获原始数据 分析正常/异常报文差异

  2. 数据验证

    // 模拟测试数据
    byte[] testData = new byte[] {
         0xAA,0x03,0x00,0x00,0x00,0x02,0x2C,0x0A};
    Debug.Assert(VerifyCRC(testData), "CRC校验失败");
    
  3. 性能监控

    PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time");
    pc.InstanceName = "_Total";
    Console.WriteLine($"CPU占用率:{pc.NextValue()}%");
    

七、扩展功能实现

  1. 实时曲线绘制

    using LiveCharts;
    public partial class MainForm : Form {
         
        private ChartValues<float> _temperatureSeries = new();
    
        public MainForm() {
         
            InitializeComponent();
            chart.Series = new SeriesCollection {
         
                new LineSeries {
          Values = _temperatureSeries }
            };
        }
    }
    
  2. 报警功能

    public class TemperatureAlert {
         
        public event EventHandler<AlertEventArgs> OverLimit;
    
        public void Check(float temp) {
         
            if(temp > 80) {
         
                OverLimit?.Invoke(this, new AlertEventArgs("高温报警!"));
            }
        }
    }
    

参考代码 串口调试工具(读取温度值) www.youwenfan.com/contentalg/92793.html

该方案支持DS18B20、DHT11、SHT3x等多种传感器,可通过修改指令格式适配不同设备。建议结合Modbus Poll工具进行协议验证,使用Wireshark抓包分析通信过程。

相关文章
|
2月前
|
监控 前端开发 数据可视化
Entity Explorer:基于 UModel 的实体探索平台
阿里云 Entity Explorer 正式发布:基于 UModel 的智能实体探索平台,实现亿级实体秒级检索、关系拓扑自动构建、详情页动态渲染,让可观测性从“数据堆砌”迈向“业务洞察”。
316 50
|
2月前
|
人工智能 架构师 算法
AI时代,测试工程师的自我重塑
当AI能生成测试用例、预测缺陷,测试工程师的未来何在?答案不是被取代,而是进化。AI将接管重复劳动,释放人力投身复杂逻辑、用户体验与质量体系设计。未来的测试专家需成为AI训练师、质量架构师,深耕机器不擅长的领域。人机协同,方见真章。
|
2月前
|
人工智能 运维 监控
JMeter自搭与压测平台:2025年效率成本对比及平台推荐
2025年企业性能测试需求增长,自搭JMeter与SaaS压测平台在效率、成本等方面差异明显。自建方案灵活但成本高,适合技术强团队;SaaS平台即开即用、弹性资源,适配快速迭代场景。文章对比两者痛点、主流方案优劣,给出选择建议及实践参考。
|
2月前
|
人工智能 安全 API
上手教程:聊聊怎么用阁下AI的API
上手教程:聊聊怎么用阁下AI的API
|
2月前
|
移动开发 监控 小程序
校园系统小程序源码搭建全流程:基于 Uni-app/TP6,快速落地校园服务生态
在教育数字化转型背景下,校园小程序整合教务、生活、社交等全场景服务,通过Uni-app+TP6实现多端覆盖与高效开发,支持校园卡、食堂点餐、家长端等功能,助力学校构建稳定、低成本的智慧校园生态。
|
2月前
|
机器学习/深度学习 数据采集 算法
基于PSO优化BP神经网络的MATLAB实现
基于PSO优化BP神经网络的MATLAB实现
|
2月前
|
JSON 监控 数据可视化
云监控 UModel Explorer:用“图形化”重新定义可观测数据建模
阿里云 UModel Explorer 正式发布:告别复杂配置,拖拽即建模,点击即洞察,实现建模、探索、分析一体化,让可观测真正高效协同,开启可视化运维新时代!
384 62
|
2月前
|
数据采集 人工智能 安全
从定义到落地:数据治理是什么?大型企业如何借数据中台实现高效治理?
本文深度解析主流数据治理与中台平台,涵盖瓴羊Dataphin、华为DataArts Studio、字节Dataleap等11大代表性产品,从核心定位、技术亮点到适用场景全面对比,助力企业构建可持续、可运营的数据管理体系,释放数据价值。
从定义到落地:数据治理是什么?大型企业如何借数据中台实现高效治理?
|
2月前
|
人工智能 运维 数据可视化
优测压测平台与自建JMeter的效率成本对比及行业实践
文章对比了优测压测平台与自建JMeter在效率、成本等方面的差异,介绍了压测的行业背景与发展趋势,分析了自建JMeter的常见问题,阐述了SaaS化压测平台的优势,以优测为例说明其特点与应用场景,还给出行业实践及决策型问答,助力企业选压测方案。
|
2月前
|
芯片 C++ Perl
南京观海微电子---多路降压稳压DC-DC开关电源电路设计(3.3V、5V、12V、ADJ)
LM2596是一款高效率降压稳压芯片,支持3A输出电流,输入电压可达40V,具有过热、限流保护功能。提供固定(3.3V/5V/12V)和可调(ADJ)版本,广泛用于电源转换设计。
南京观海微电子---多路降压稳压DC-DC开关电源电路设计(3.3V、5V、12V、ADJ)