yaowanxin
2 天以前 093615ab71eebddeea28a74a6c21898fc929450f
src/utils/connect.js
@@ -1,10 +1,18 @@
import request from '@/utils/request';
// 新增:存储全局串口和读取器实例
    let port = null;
    let reader = null;
    let accumulatedData = ""; // 移到全局,便于关闭时重置
    let weightList = []; // 用于存储重量值的列表
    export function sendWeightsToBackend(weights) {
      return request({
        url: "/weight/handleWeights",
        method: "POST",
        data: weights,
      });
    }
    async function connect() {
      if ("serial" in navigator) {
        try {
          port = await navigator.serial.requestPort(); // 修改为全局变量
          await port.open({ baudRate: 9600 });
@@ -28,46 +36,75 @@
        } catch (error) {
          console.error("串口错误:", error);
        }
      }
    }
    function processAccumulatedData(data) {
      function processAccumulatedData(data) {
        if (data.includes("\n")) {
          const messages = data.split("\n");
      if (data.includes("\n")) {
        const messages = data.split("\n");
          for (let i = 0; i < messages.length - 1; i++) {
            const completeMessage = messages[i];
            console.log("完整消息:", completeMessage);
            handleMessage(completeMessage);
        for (let i = 0; i < messages.length - 1; i++) {
          const completeMessage = messages[i];
          console.log("完整消息:", completeMessage);
          // 提取数值
          const weightValue = extractWeightValue(completeMessage);
          if (!isNaN(weightValue)) {
            console.log("提取的重量值:", weightValue);
            // 将有效重量值添加到列表
            weightList.push(weightValue);
            // 当列表长度达到 6 时,发送数据到后端并清空列表
            if (weightList.length === 6) {
              sendWeightsToBackend({
                weights: weightList
              })
              .then(() => {
                console.log('数据发送成功');
                weightList = [];
              })
              .catch(() => {
                console.log('发送失败,保留数据待重试');
              });
            }
          }
          accumulatedData = messages[messages.length - 1];
        }
        // 其他消息拆分示例保持不变
        /*
  while (accumulatedData.length >= 32) {
    const message = accumulatedData.substring(0, 32);
    accumulatedData = accumulatedData.substring(32);
    handleMessage(message);
  }
  */
        /*
  let startIndex = 0;
  while (true) {
    const start = accumulatedData.indexOf(0xAA, startIndex);
    if (start === -1) break;
    const end = accumulatedData.indexOf(0x55, start + 1);
    if (end === -1) break;
    const message = accumulatedData.substring(start, end + 1);
    accumulatedData = accumulatedData.substring(end + 1);
    handleMessage(message);
    startIndex = start;
  }
  */
        accumulatedData = messages[messages.length - 1];
      }
      // 其他消息拆分示例保持不变
      /*
      while (accumulatedData.length >= 32) {
        const message = accumulatedData.substring(0, 32);
        accumulatedData = accumulatedData.substring(32);
        handleMessage(message);
      }
      */
      /*
      let startIndex = 0;
      while (true) {
        const start = accumulatedData.indexOf(0xAA, startIndex);
        if (start === -1) break;
        const end = accumulatedData.indexOf(0x55, start + 1);
        if (end === -1) break;
        const message = accumulatedData.substring(start, end + 1);
        accumulatedData = accumulatedData.substring(end + 1);
        handleMessage(message);
        startIndex = start;
      }
      */
    }
    // 新增提取重量数值的方法
    function extractWeightValue(message) {
      // 匹配数值部分,可处理正负号
      const match = message.match(/-?\d+\.?\d*/);
      if (match) {
        return parseFloat(match[0]);
      }
      return NaN;
    }
    // 新增:关闭连接函数
@@ -93,4 +130,4 @@
      }
    }
    export { connect, disconnect };
    export { connect, disconnect,weightList };