使用pyserial读取热电偶数据及配置DAQ设备的技术咨询
MCC USB-204热电偶采集+CSV存储实现方案
首先明确核心问题:你找到的pyserial示例不能仅替换端口号直接使用。Measurement Computing USB-204本身不是原生虚拟串口类DAQ设备,不会在系统中生成标准COM/ttyACM串口节点,直接用pyserial无法识别到该设备,这是最容易踩的初始误区。
正确实现步骤
1. 安装匹配的驱动与依赖
- Windows端先安装MCC官方InstaCal配置工具,在工具中选对热电偶类型(J/K/T/S等)、接入通道,确认工具内可正常读取温度数值后再进行代码开发
- Linux/macOS端安装MCC官方UL跨平台驱动库
- Python端不要使用pyserial,安装官方适配的
uldaq(跨平台)或mcculw(Windows专属)库实现设备通信,这是官方维护的原生通信接口,稳定性远高于第三方逆向实现。
2. 可直接运行的采集+存CSV代码
import csv import time from uldaq import ( get_daq_device_inventory, DaqDevice, InterfaceType, TempSensorType, TcInputRange, AiChanType, TcScale ) # 按需修改以下配置 TC_CHANNEL = 0 # 热电偶接入的模拟通道号 TC_TYPE = TempSensorType.TYPE_K # 替换为实际使用的热电偶型号 SAVE_FILE = "tc_temp_data.csv" SAMPLE_INTERVAL = 1 # 采样间隔,单位秒 # 初始化连接USB-204设备 device_list = get_daq_device_inventory(InterfaceType.USB) daq_dev = DaqDevice(device_list[0]) ai_module = daq_dev.get_ai_device() daq_dev.connect() # 配置对应通道为热电偶输入模式 ai_module.set_chan_type(TC_CHANNEL, AiChanType.TC) ai_module.set_tc_type(TC_CHANNEL, TC_TYPE) ai_module.set_range(TC_CHANNEL, TcInputRange.BUILT_IN) # 写入CSV表头并启动循环采集 with open(SAVE_FILE, "w", newline="", encoding="utf-8") as f: csv_writer = csv.writer(f) csv_writer.writerow(["timestamp_unix", "temp_celsius"]) try: while True: current_ts = time.time() current_temp = ai_module.t_in(TC_CHANNEL, TcScale.CELSIUS) print(f"采样值:{current_temp:.2f} ℃") csv_writer.writerow([current_ts, round(current_temp, 2)]) f.flush() # 强制实时写入磁盘,避免程序异常退出丢数据 time.sleep(SAMPLE_INTERVAL) except KeyboardInterrupt: print("\n采集已终止,数据已保存至目标文件") daq_dev.disconnect()
特殊情况:如果你额外加了串口转换模块才用pyserial
如果你的硬件链路是USB-204输出接了额外的单片机/转换板做串口透传,才需要用pyserial方案,此时除了替换端口号,还要完成3项必要配置:
- 补全串口初始化参数:必须和串口输出端的波特率、数据位、停止位、校验位完全匹配,原示例代码未显式声明这些参数,默认使用9600波特率、8数据位、1停止位、无校验,参数不匹配会读到全乱码。正确初始化写法参考:
ser = serial.Serial(port='/dev/ttyACM0', baudrate=115200, timeout=1) - 端口权限与编号确认:Windows下在设备管理器查看对应COM号,Linux下需将当前用户加入
dialout用户组才能访问串口设备,无权限时会直接抛端口打开失败错误 - 修正字节解析逻辑:原示例用
ser_bytes[0:len(ser_bytes)-2]硬编码切掉末尾2个字节适配\r\n换行,不同设备输出的换行符可能是单字节\n,硬编码切片会误切有效数字,替换为decoded_bytes = float(ser_bytes.strip().decode("utf-8"))兼容性更好。
实用参考
- MCC官方Python例程库包含USB-204全功能的现成示例,是最准确的实现参考
- Python标准库
csv模块的官方文档有实时写入行数据的标准写法,可按需扩展多通道采集、异常值过滤等功能 - 调试顺序建议:先在官方配置工具/串口调试助手确认硬件输出正常,再开发Python代码,不要先写代码再排查硬件问题。
内容的提问来源于stack exchange,提问作者Liam Warren
相关产品推荐
相关产品推荐

