chenyc
2024-11-29 e971a9cf298121d20e6b188e8f19adcb225a6ab9
更新通讯
1个文件已修改
3个文件已添加
167 ■■■■■ 已修改文件
imgs/1732850057688.png 补丁 | 查看 | 原始文档 | blame | 历史
imgs/1732850063439.png 补丁 | 查看 | 原始文档 | blame | 历史
src/samples/deviceApi/zhiRongShantou.ts 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
imgs/1732850057688.png
imgs/1732850063439.png
src/samples/deviceApi/zhiRongShantou.ts
New file
@@ -0,0 +1,152 @@
// 汕头悦康  波特率2400
import { ElMessage, ElMessageBox } from 'element-plus'
const { SerialPort } = require('serialport')
const { DelimiterParser } = require('@serialport/parser-delimiter')
const { ReadyParser } = require('@serialport/parser-ready')
import {sockteStore} from '@/stores/sockteInfo'
import { ipcRenderer  } from 'electron'
// 设置重连间隔和最大重试次数
const RECONNECT_INTERVAL = 10000; // 重连间隔10秒
const MAX_RECONNECT_ATTEMPTS = 10; // 最大重试次数10次
let reconnectAttempts = 0; // 当前重试次数
let serialPort:any; // 串口实例
const initPort=(path:String,baudRate:Number)=>{
    console.log('初始化打开汕头粤康体重秤端口',reconnectAttempts)
    if(reconnectAttempts!==0){
        console.log('ssss',reconnectAttempts)
        ipcRenderer.invoke('logger', '串口重连第${reconnectAttempts}次')
        ElMessage({
            message: `串口重连第${reconnectAttempts}次启动`,
            type: 'success',
        })
    }
    if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
        console.error('重试次数达到上限,不再尝试重连。');
        ipcRenderer.invoke('logger', '串口已经重连了${reconnectAttempts}次了,点击确认关闭程序,重启电脑后再试')
        ElMessageBox.confirm(
            `串口已经重连了${reconnectAttempts}次了,点击确认关闭程序,重启电脑后再试`,
            'Warning',
            {
              confirmButtonText: '确认',
              cancelButtonText: '取消',
              type: 'warning',
            }
          )
            .then(() => {
                ipcRenderer.send('winClose')
                ipcRenderer.invoke('logger', '确认了关闭程序')
            })
            .catch(() => {
              ElMessage({
                type: 'info',
                message: '取消操作',
              })
            })
        return;
    }
    if (serialPort && serialPort.isOpen) {
        reconnectAttempts=0
        console.log('串口已打开,不再重复打开。');
        return;
    }
    try {
        let lisijieguo=''
        let duibinum=0
        serialPort  = new SerialPort({ path, baudRate }, (err: any) => {
            reconnectAttempts++
            if (err) {
                console.log(err)
                ipcRenderer.invoke('logger', '汕头粤康体重秤端口打开失败!')
                ElMessage({
                    message: '汕头粤康体重秤端口打开失败!',
                    type: 'error',
                })
                setTimeout(()=>{
                    initPort(path,baudRate)
                }, RECONNECT_INTERVAL);
            }else{
                reconnectAttempts=0
                ipcRenderer.invoke('logger', '汕头粤康体重秤端口打开成功')
                ElMessage({
                    message: '汕头粤康体重秤端口打开成功',
                    type: 'success',
                })
            }
        })
        serialPort.on("close",(err: any)=>{
            ipcRenderer.invoke('logger', '汕头粤康体重秤端口异常端口链接关闭')
            console.log('汕头粤康体重秤端口异常端口链接断开')
            reconnectAttempts=0
            setTimeout(()=>{
                initPort(path,baudRate)
            }, RECONNECT_INTERVAL);
            console.log(err)
        })
        // 解析分割数据流
        //
        //  2400
        //
        //
        //=0.0000
        // =6.9600
        // 3D 30 2E 30 30 30 30 20
        // 3D 35 2E 39 36 30 30 20
        const parser = serialPort.pipe(new DelimiterParser({ delimiter:Buffer.from([32]),includeDelimiter:true }))
        parser.on('data', (value: string | any[])=>{
            const str=value.toString()
            console.log(str)
            const ss=str.split('').reverse().join('');
            console.log(ss.substring(0,ss.length-1))
            const list=ss.substring(0,ss.length-1)
            const res=ss.substring(0,ss.length-1)
            console.log(Number(res))
            if(list!=='000000'){
                if(list===lisijieguo){
                    duibinum++
                }else{
                    lisijieguo=list
                    duibinum=0
                }
                // 对比4次结果都一致
                if(duibinum>=3){
                    console.log(list,'获取到的体重')
                    sockteStore().setweightSockte(
                        {
                            deviceName:'汕头粤康',
                            type:"体重秤",
                            result:Number(res).toString(),
                            resultTime:new Date().toString(),
                            state:2
                        }
                    )
                    duibinum=0
                    lisijieguo=''
                }else{
                }
            }else{
                console.log('数据格式不对')
            }
        }) // all data after READY is received
    }
    catch (error:any) {
        console.error('无法创建串口实例:', error.message);
        reconnectAttempts=0
        setTimeout(()=>{
            initPort(path,baudRate)
        }, RECONNECT_INTERVAL);
    }
}
export {
    initPort,
}
src/views/home/index.vue
@@ -54,7 +54,7 @@
                        <div style="display: grid;grid-template-columns: minmax(250px, 40%) 1fr; height: 100%; padding-left: 20px;padding-top: 20px;">
                            <!-- 头像 -->
                            <div  :style="{backgroundImage:`url(${patientInfo.patientAvatarIcon})`}" style="background-size:100% 100%;height: 100%;" >
                              <div style="width:140px; height: 50px; line-height: 50px; font-size: 25px; background: #D09200;color: #FFFFFF; font-weight: 500; text-align: center; border-radius: 0px 8px 0px 30px; float: right;">
                              <div style="width:140px; height: 50px; line-height: 50px; font-size: 25px; background: #9F61DC;color: #FFFFFF; font-weight: 500; text-align: center; border-radius: 0px 8px 0px 30px; float: right;">
                                {{patientInfo.name}}
                              </div>
                            </div>
@@ -75,7 +75,7 @@
                <div style="height: 31%; margin-top: 20px;border-radius: 12px;" >
                    <el-row style="height: 100%;background:rgba(246, 244, 244, 0.3);border-radius: 12px;opacity: 0.9;">
                        <el-col :span="8">
                            <div class="textwenben" style="height: 28%; font-size: 25px;background-color: #D09200; border-radius: 12px 0 0 0;">
                            <div class="textwenben" style="height: 28%; font-size: 25px;background-color: #9F61DC; border-radius: 12px 0 0 0;">
                              <template v-if="configData.deviceType==='体重秤'">
                                <template v-if="patientInfo.isAfterMed===0&&!configData.gantiziShow">
                                  机号/床位号
@@ -91,7 +91,7 @@
                                
                              </template>
                            </div>
                            <div class="textwenben" style="height: 70%; font-size: 80px; color: #D09200;font-weight: 800;">
                            <div class="textwenben" style="height: 70%; font-size: 80px; color: #9F61DC;font-weight: 1000;">
                              <template v-if="configData.deviceType==='体重秤'">
                                  <template v-if="patientInfo.isAfterMed===0&&!configData.gantiziShow">
                                    {{ patientInfo.deviceNo }}
@@ -129,12 +129,11 @@
                                
                              </template>
                            </div>
                            <div class="textwenben" style="height: 70%; font-size: 80px; color: #41B593; font-weight: 800;
                            <div class="textwenben" style="height: 70%; font-size: 80px; color: #41B593; font-weight: 1000;
                              border-left: #FFFFFF solid 2px;border-right: #FFFFFF solid 2px;">
                                <template v-if="configData.deviceType==='体重秤'">
                                  <template v-if="patientInfo.isAfterMed===0">
                                    {{patientInfo.lastTimeAfterWeight}}
                                    99
                                  </template>
                                  <template v-else>{{tzjs}}</template>
                                    <!-- 体重减少(kg) -->
@@ -281,6 +280,7 @@
import{initPort as  TM2655VP} from '@/samples/deviceApi/TM2655VP'
import{initPort as zhiRongT605 } from '@/samples/deviceApi/zhiRongT605'
import{initPort as zhiRongHehui } from '@/samples/deviceApi/zhiRongHehui'
import{initPort as zhiRongShantou } from '@/samples/deviceApi/zhiRongShantou'
import{initPort as taiHengM523 } from '@/samples/deviceApi/taiHengM523'
import{initPort as XK3190A12 } from '@/samples/deviceApi/XK3190A12'
import {initPort as mbp7000} from '@/samples/deviceApi/mbp7000'
@@ -294,6 +294,7 @@
import {initPort as seca101Banger} from '@/samples/deviceApi/seca101Banger'
import {initPort as liangjiang} from '@/samples/deviceApi/liangjiang'
import {initPort as xinanguojiTZC} from '@/samples/deviceApi/xinanguojiTZC'
// 引入模块
import config from '../../../package.json'
@@ -1025,6 +1026,10 @@
      }else if(configData.value.tzc_type==='xinanguojiTZC'){
        xinanguojiTZC(configData.value.tzcPortPath,9600)
      }
      // 志荣粤康  2400
      else if(configData.value.tzc_type==='zhiRongShantou'){
        zhiRongShantou(configData.value.tzcPortPath,configData.value.tzcBaudRate)
      }
      else{
        zhiRongT605(configData.value.tzcPortPath,configData.value.tzcBaudRate)
      }