js 上位机开发常用工具函数记录

4 篇文章 0 订阅

1. 取一个数字的某一个 bit 位

/**
 * @description 取一个数字的某一个bit位
 * @param num 
 * @param index 
 * @returns 
 */
export function getHexBit(num: any, index: number) {
  num = parseInt(num);
  let numStr = num.toString(2).split("").reverse().join("");
  if (numStr.length < 8) {
    for (let i = 0; i < 8 - numStr.length; ++i) {
      numStr = numStr + "0";
    }
  }
  const bit = numStr.charAt(index);
  console.log("getHexBit", num, index, numStr, bit);
  return parseInt(bit);
}

2. 字符串转 buffer

/**
 * 传入字符串,取每一个字符的ASCII码,放到数组中,返回数组
 * @param {string} str - 输入的字符串
 * @returns {number[]} - 每一个字符的ASCII码组成的数组
 */
export const nameToNumberArr = (name: string): any[] => {
  let bufferNameArr = [];

  const encoder = new TextEncoder(); // 创建TextEncoder实例
  const uint8Array = encoder.encode(name); // 将字符串转换为UTF-8编码的Uint8Array
  bufferNameArr = Buffer.from(uint8Array).toJSON().data; // 将Uint8Array转换为Buffer
  if (bufferNameArr.length < 20) {
    const addArr = new Array(20 - bufferNameArr.length).fill(0x00)
    bufferNameArr = [...bufferNameArr, ...addArr]
  }
  console.log(Buffer.from(bufferNameArr).toString());
  return bufferNameArr

};

3. buffer 转为 字符串(汉字)

// buffer 转为汉字
export const getNameFromBuffer = (buffer: any) => {
  const nameBuffer = []
  for (let i = 0; i < buffer.length; i++) {
    if (buffer[i] !== 0 && buffer[i] !== 255) {
      nameBuffer.push(Number(buffer[i]))
    }
  }
  console.log(Buffer.from(buffer).toString());
  return nameBuffer.length ? Buffer.from(nameBuffer).toString() : ''

}

4. 取一个数字的高位和地位

/**
 * @desc 取一个数字的 高位和低位
 */
export function getNumHLVal(num: number): Number[] {
 
  // 使用位操作获取高位和低位
  const highBit = (num >> 8) & 0xFF; // 右移8位,然后与0xFF进行AND操作以获取高位的8个bit
  const lowBit = num & 0xFF; // 与0xFF进行AND操作以获取低位的8个bit

  return [highBit, lowBit]
}

5. buffer 数组转 16进制

function uint8ArrayToHexString(uint8Array: Uint8Array) {
  let hexString = "";
  for (let i = 0; i < uint8Array.length; i++) {
    let hex = uint8Array[i].toString(16);
    if (hex.length === 1) {
      hex = "0" + hex;
    }
    hexString += hex;
  }
  return hexString;
}

6. 创建一个串口通信

    const { SerialPort, InterByteTimeoutParser, ReadlineParser } = require("serialport");
    // 获取串口列表
    const list = await SerialPort.list();
    // 建立一个串口通信
    const options = {
      path: port,
      baudRate: 115200 || baudRate,
      dataBits: dataBits,
      stopBits: stopBits,
      parity: parity,
      flowControl: flowControl,
      autoOpen: true
    };
    console.log('serialport options:', options);
    manager.serialHandler = new SerialPort(options, (err) => {
      if (err) {
        console.log('open serial failed');
        return
      }
      console.log('open serial successfully');
    });
    // 监听串口打开
    manager.serialHandler.on("open", function (err) {
      if (err) {
        console.log('Serialport opened fail ');
        return
      }
      console.log("Serialport opened successfully");
      manager.interfaceQueryByCom();
      ipc.notify({
        action: "serialportStatus",
        status: "connected",
      });
    });
    // 监听串口数据回复
    manager.serialHandler.on("data", (data) => {
      console.log(data)
    })
    // 监听串口关闭
    manager.serialHandler.on("close", function () {
      console.log("Serialport closed ");
      ipc.notify({
        action: "serialportStatus",
        status: "disconnected",
      });
    });
    // 串口发送数据
    manager.serialHandler.write(data, (err) => {
      if (err) {
        console.log('send data to serial port error--->', err);
        return
      }
      console.log('write data to serial port success--->');
    });
    // 监听串口发送数据完成
    manager.serialHandler.drain((err) => {
      if (err) return
      console.log('send data to serial port end--->');
    })

7、创建一个 tcp 通信

	const net = require("net");
	const options = {
	  port: this.port,
	  host: this.ip,
	  keepAlive: true,
	  initialDelay: 10000,
	  noDelay: true,
	};
	
	// 创建 TCP 连接
	this.client = net.createConnection(options, () => {
	  console.log("----->");
	  console.log("tip connecting");
	  logger.info("创建连接服务器中");
	});
	
    // 监听创建 tcp 连接成功回复
    this.client.on("connect", () => {
      console.log("hub connect success");
    });
    
	// 监听 tcp 回复
    this.client.on("data", (data) => {
      const hexString = data.toString("hex").toUpperCase();
      const hexStringWithSpaces = hexString.match(/.{1,2}/g).join(" ");
    })
   
   // 发送数据
   this.client.write(sndData);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值