You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Serial Port串口秤通信实现及代码读写问题排查咨询

串口电子秤通信排查与修复方案

先给你捋代码里的核心问题,以及对应的修复方式:

核心问题点

  • 读取流未关联串口:你的readLoop里只创建了TextDecoderStream,但没把串口的可读流(port.readable)管道到解码器的可写流,等于根本没从串口读取数据。
  • 指令格式错误:你写入的"W<CR>"里的<CR>是字符串文本,电子秤需要的是ASCII回车控制字符,应该用\r代替。
  • 缺少错误排查机制:没有针对写入、读取环节加错误捕获,没法定位到底是写不进去还是读不到数据。

修复后的完整代码

let port;
let writer;

async function initSerial() {
  try {
    // 请求串口设备
    port = await navigator.serial.requestPort();
    // 打开串口,参数要和电子秤手册完全匹配
    await port.open({
      baudRate: 9600,
      dataBits: 8,
      parity: "none",
      stopBits: 1 // 多数电子秤默认1位停止位,建议补充
    });

    // 初始化读取流:关联串口可读流与解码器
    const textDecoder = new TextDecoderStream();
    await port.readable.pipeTo(textDecoder.writable);
    const reader = textDecoder.readable.getReader();
    // 启动读取循环
    readLoop(reader);

    // 初始化写入流
    const textEncoder = new TextEncoderStream();
    await textEncoder.readable.pipeTo(port.writable);
    writer = textEncoder.writable.getWriter();

    // 发送正确指令:用\r代替<CR>
    await sendCommand("W\r");
    console.log("指令已发送");
  } catch (error) {
    console.error("初始化串口失败:", error);
  }
}

async function readLoop(reader) {
  try {
    while (true) {
      const { value, done } = await reader.read();
      if (done) {
        console.log("读取流已关闭");
        reader.releaseLock();
        break;
      }
      console.log("收到电子秤数据:", value);
    }
  } catch (error) {
    console.error("读取数据失败:", error);
  }
}

async function sendCommand(cmd) {
  if (!writer) {
    console.error("写入流未初始化");
    return;
  }
  try {
    await writer.write(cmd);
  } catch (error) {
    console.error("发送指令失败:", error);
  }
}

// 调用初始化函数
initSerial();

排查步骤(区分读/写问题)

  1. 验证写入有效性:
    • 用串口调试助手连接电子秤,发送W\r指令,看是否有返回数据。如果有,说明指令格式正确,再检查代码写入逻辑的错误日志。
  2. 验证读取有效性:
    • 用串口助手主动向电脑发送测试数据,看代码的readLoop是否能打印出收到的内容。如果能,说明读取逻辑没问题,问题可能在电子秤未响应指令。
  3. 核对串口参数:
    • 必须和电子秤手册上的波特率、数据位、停止位、校验位完全一致,参数不匹配会直接导致通信失败。

内容的提问来源于stack exchange,提问作者Kenshai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:15:35