| imgs/1732850057688.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| imgs/1732850063439.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/samples/deviceApi/zhiRongShantou.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | 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) }