连接 串口 获取称的重量值

获取串口

var callbackList = []
var isInit = false

var resultKg = ""
var resultString = ""
let port = null

export function init_() {
    // init()
}
export async function init() {
    // 获取全部串口
    const ports = await navigator.serial.getPorts();
  //判断 之前是否有获取的串口
    if (ports.length > 0) {
        port = ports[0]
        open()
        return
    }
    port = await navigator.serial.requestPort()
    console.log(port, '===========', ports);
    open()

}
const open = async () => {
    await port.open({ baudRate: 9600 });//打开  
    let reader = port.readable.getReader();
    console.log(reader, 'reader======>');
    try {
        while (true) {
            const { value, done } = await reader.read()
            if (done) {
                reader.releaseLock()
                break
            }
            //解码 
            var weight = Uint8ArrayToString(value)

            resultString += weight
            cutStr()
            dispatchEvent()

        }
    } catch (err) {
        console.error(err)
    } finally {
        reader.releaseLock()
        console.log('允许稍后关闭串口。')
        await port.close()
    }
}


const Uint8ArrayToString = (fileData) => {
    var dataString = "";
    for (var i = 0; i < fileData.length; i++) {
        dataString += String.fromCharCode(fileData[i]);
    }
    return dataString
}

function cutStr() {
    // var haveStar = resultString.match(/,\+(\w+)/g)
    // 七华秤
    // var haveStar = resultString.match(/,\+(.*?)kg,/g)
    // 华兰海秤
    var haveStar = resultString.match(/\d+(\.\d+)?/g)

    if (haveStar && haveStar.length > 0) {
        var str = haveStar[haveStar.length - 1]
        // 七华秤 需要用substring 取值
        // var str = str.substring(2, str.length - 3)


        if (resultKg !== parseFloat(str || 0)) {
            resultKg = parseFloat(str || 0)
        }
        // console.log(resultKg, 'resultKg');
        resultString = 0
    }

}

function dispatchEvent() {
    setInterval(() => {

    }, interval);
    for (var i = 0; i < callbackList.length; i++) {
        resultKg = script.getWindowName()
        // console.log(callbackList(resultKg),'=2342');
        callbackList[i](resultKg)
    }

}


export function weightAddListenerWeight(callback) {
    callbackList.push(callback)
    console.log(callback, 'callback', callbackList);

    if (isInit == false) {
        isInit = true
        init()
    }
}

export function weightRemoveListener(callback) {
    var i = callbackList.indexOf(callback)
    if (i >= 0) {
        callbackList.splice(i, 1)
    }

}

引用到代码

weightAddListenerWeight((res) => {
//res 称返回的重量值
  console.log("重量", res);
  return;
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: winform是微软公司推出的一种桌面应用程序开发工具,可以用于开发Windows操作系统上的应用程序。而RS232串口是一种常见的串行通信协议,一般用于计算机与外部设备之间的数据传输。 要实现winform读取电子秤重量的功能,需要以下步骤: 1. 确定电子秤的通信协议:不同的电子秤可能采用不同的通信协议,我们需要先了解电子秤的厂家提供的通信协议文档,以便正确配置串口参数。 2. 打开串口:使用C#提供的System.IO.Ports.SerialPort类,可以打开和配置串口,设置波特率、数据位、校验位等串口参数。 3. 监听串口数据:使用SerialPort类提供的DataReceived事件,可以监听串口上的数据接收事件。当串口接收到数据时,可以通过事件处理函数来处理接收到的数据。 4. 解析并显示数据:根据电子秤的通信协议,解析串口接收到的数据,获取电子秤重量数据。可以将重量数据显示在winform的控件上,如Label或TextBox,以便用户查看。 5. 关闭串口:当不再需要读取电子秤重量数据时,通过SerialPort类的Close()方法关闭串口,释放串口资源,避免资源的浪费和占用。 需要注意的是,在实现读取电子秤重量的过程中,我们还需要处理异常情况,例如串口无法打开、通信中断等情况,以提高程序的稳定性和可靠性。另外,为了更好地用户体验,可以通过嵌入线程或使用异步方式读取串口数据,以避免界面的卡顿和不响应。 ### 回答2: WinForm是一种运行在Windows操作系统上的应用程序框架,通过使用WinForm可以轻松创建各种窗体界面。而RS232串口是一种用于通过串行通信进行数据传输的接,常用于连接电子设备和计算机之间。 要读取电子秤重量,首先需要通过RS232串口电子秤进行连接。这可以通过使用C#编程语言和.Net Framework提供的SerialPort类来实现。SerialPort类提供了与串口进行通信的方法和属性。 在WinForm应用程序中,可以在设计器中添加一个按钮控件,用于触发读取电子秤重量的操作。在按钮的点击事件中,可以使用SerialPort类打开已连接串口,并设置好相应的波特率、数据位、停止位等参数。 接下来,可以通过SerialPort的事件来处理串口收到的数据。当串口接收到数据时,SerialPort会触发DataReceived事件,可以在该事件中获取接收到的数据,并进行相应的处理。对于电子秤重量数据,一般会以字符串的形式发送,可以通过字符串的处理方法进行解析和转换。 最后,可以在WinForm的界面上添加一个文本框控件,用于显示读取到的电子秤重量。在DataReceived事件中,可以将解析得到的重量数据显示在文本框中。 需要注意的是,在进行串口通信时需要处理异常情况,比如串口连接失败、接收数据超时等。可以使用try-catch语句块来捕获异常并进行相应的处理。 总之,通过使用WinForm和SerialPort类,我们可以方便地读取电子秤重量数据并在界面上显示出来。这样就实现了通过RS232串口读取电子秤重量的功能。 ### 回答3: 要实现WinForm读取电子秤重量rs232串口,首先需要通过串口通信与电子秤建立连接。 在WinForm中,可以使用SerialPort类来实现串口通信。首先,在WinForm的界面上添加一个按钮,并在按钮的点击事件中编写代码,以实现读取电子秤重量的功能。 首先,要导入System.IO.Ports命名空间,以便使用SerialPort类。 然后,创建一个SerialPort对象,并设置相关属性。例如,设置串口的名、波特率、数据位、校验位和停止位等。 接下来,通过调用SerialPort对象的Open方法打开串口。在打开串口之前,需要判断串口是否已经打开,以防止重复打开串口。 然后,通过串口的DataReceived事件来接收电子秤发送的数据。在事件处理程序中,可以使用SerialPort对象的ReadLine方法读取串口接收到的数据,并将其显示在WinForm界面的一个文本框中。 最后,在WinForm界面的关闭事件中,需要关闭串口,以释放资源。 在读取电子秤重量的过程中,需要了解电子秤的通信协议。根据不同的电子秤厂家,通信协议可能会有所不同。通常,电子秤会以固定的格式发送数据,例如,重量数据可能以ASCII码的形式发送,并以换行符作为结束符。 因此,在读取电子秤重量时,还需要根据具体的通信协议,进行数据解析和处理。可以通过处理接收到的字符串,提取出重量信息,并进行相应的处理和显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值