当前位置: 首页 > news >正文

python技巧:自动控制高低温箱,通过串口输入命令,生成16进制字符串,并计算CRC16。

最近有个临时紧急的需求,要每隔5摄氏度测试高低温,因此必须使用脚本实现自动控制温箱。

温箱厂商提供了一个控制APP,是通过串口发命令控制温度,但是我们需要cmd实现自动化。因此,我们通过串口监控抓取了设置温度的字符串,参考了温箱设计文档。在AI的帮助下,快速实现了这个控制脚本。

具体实现如下:这组命令是一串16进制数+CRC16校验。

import serial
import time

import crcmod


def calculate_crc16(data):
    # 使用 CRC-16-Modbus 算法
    crc16 = crcmod.predefined.Crc('modbus')
    crc16.update(data)

    # 获取 CRC16 校验码并交换字节顺序(低位在前,高位在后)
    crc_bytes = crc16.digest()
    return f'{crc_bytes[1]:02X}{crc_bytes[0]:02X}'


def create_hex_string(decimal_number):
    # 固定前 8 个字节
    fixed_part = '01060000'

    # 将十进制数乘以 10 并转换为 2 字节的十六进制
    decimal_number *= 10

    if decimal_number < 0:
        # 计算 16 位补码: (2^16 + decimal_number)
        complement = (1 << 16) + decimal_number
    else:
        complement = decimal_number

    hex_part = f'{complement:04X}'  # 确保是2个字节,不足补0

    # 组合数据进行计算CRC的部分(前10个字节)
    data_to_crc = bytes.fromhex(fixed_part + hex_part)

    # 计算 CRC16
    crc = calculate_crc16(data_to_crc)

    # 拼接整个16字节字符串
    full_hex_string = fixed_part + hex_part + crc

    return full_hex_string


# 指定温度(十进制): 70 或者 -20
decimal_number = -10
result = create_hex_string(decimal_number)
print(result)

# 打开串口 COM2,设置波特率为 9600
with serial.Serial('COM2', 9600, timeout=1) as ser:
    # 等待串口稳定
    time.sleep(2)

    # 设置为温度
    data_to_send = bytes.fromhex(result)

    # 发送数据
    ser.write(data_to_send)

    # 读取返回的数据
    response = ser.read_all()

    # 打印返回的数据(以16进制格式显示)
    if response:
        print('返回数据:', response.hex())
    else:
        print('无返回数据')

相关文章:

  • 4.1-3 模拟器
  • C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题
  • 计算机网络知识点汇总与复习——(一)计算机网络体系结构
  • 【408--考研复习笔记】计算机网络----知识点速览
  • Base64编码的优缺点
  • Redis原理:rename命令
  • 玩机搞机基本常识-------安卓机型各种root方式面面观 选择适合自己机型的root方式
  • 自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)
  • 人工智能图像识别大数据技术之Scala2
  • 工业通信协议“牵手密码”,Ethernet IP转Profinet网关的桥梁魔法
  • 体验智谱清言的AutoGLM进行自动化的操作(Chrome插件)
  • MySQL数据库中,tinyint(1) 和 tinyint 有什么区别
  • 深入剖析JavaScript多态:从原理到高性能实践
  • 基于R语言与MaxEnt的物种分布建模全流程解析:从算法优化到科研制图实战
  • C++编程指南32 - 模板编程时要避免过度约束以提高通用性
  • 蓝桥杯训练士兵
  • 单点登录(SSO)实战:基于Vue与Spring Boot的深度实现
  • 蓝桥复习3(AT240C2 EE2PROM IIC ) 继电器 蜂鸣器 PWM
  • 汇编学习之《push , pop指令》
  • LeetCode 94. 二叉树的中序遍历
  • 贵州仁怀通报“正新鸡排鸡腿里全是蛆”:已对同类产品封存送检
  • 北京警方:海淀发生小客车刮碰行人事故4人受伤,肇事司机已被查获
  • 杞支雅男评《1517》|放眼世界,立足德国
  • 商务部就开展加强战略矿产出口全链条管控工作应询答记者问
  • 习近平同巴西总统卢拉共同会见记者
  • 耗资10亿潮汕豪宅“英之园”将强拆?区政府:非法占用集体土地