硬件开发需求网站页面优化内容包括哪些
最近有个临时紧急的需求,要每隔5摄氏度测试高低温,因此必须使用脚本实现自动控制温箱。
温箱厂商提供了一个控制APP,是通过串口发命令控制温度,但是我们需要cmd实现自动化。因此,我们通过串口监控抓取了设置温度的字符串,参考了温箱设计文档。在AI的帮助下,快速实现了这个控制脚本。
具体实现如下:这组命令是一串16进制数+CRC16校验。
import serial
import timeimport crcmoddef 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 *= 10if decimal_number < 0:# 计算 16 位补码: (2^16 + decimal_number)complement = (1 << 16) + decimal_numberelse:complement = decimal_numberhex_part = f'{complement:04X}' # 确保是2个字节,不足补0# 组合数据进行计算CRC的部分(前10个字节)data_to_crc = bytes.fromhex(fixed_part + hex_part)# 计算 CRC16crc = calculate_crc16(data_to_crc)# 拼接整个16字节字符串full_hex_string = fixed_part + hex_part + crcreturn 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('无返回数据')