From 51346371ec8183f7684a8e70215940bb4fc22577 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 14 四月 2025 08:55:22 +0800
Subject: [PATCH] 更新南京新增设备联机

---
 src/views/home/index.vue              |    6 +
 src/samples/deviceApi/oml-HBP-9020.ts |  130 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 135 insertions(+), 1 deletions(-)

diff --git a/src/samples/deviceApi/oml-HBP-9020.ts b/src/samples/deviceApi/oml-HBP-9020.ts
new file mode 100644
index 0000000..5076f09
--- /dev/null
+++ b/src/samples/deviceApi/oml-HBP-9020.ts
@@ -0,0 +1,130 @@
+// 欧姆龙 HBP-9020 2400  7  无校验
+import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
+import { ipcRenderer  } from 'electron'
+const { SerialPort } = require('serialport')
+const { DelimiterParser } = require('@serialport/parser-delimiter')
+const { ByteLengthParser } = require('@serialport/parser-byte-length')
+import {sockteStore} from '@/stores/sockteInfo'
+const { InterByteTimeoutParser } = require('@serialport/parser-inter-byte-timeout')
+
+// 设置重连间隔和最大重试次数
+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('初始化打开oumulong-HBP-9020端口',reconnectAttempts)
+    if(reconnectAttempts!==0){
+        console.log('ssss',reconnectAttempts)
+        ipcRenderer.invoke('logger', '串口重连第${reconnectAttempts}次')
+        ElMessage.warning({
+            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 {
+        serialPort  = new SerialPort({ path, baudRate, dataBits:7 }, (err: any) => {
+            reconnectAttempts++
+            if (err) {
+                console.log(err)
+                ipcRenderer.invoke('logger', '血压计端口打开失败!')
+                ElNotification.warning({
+                    title: '警告',
+                    message: '血压计端口打开失败!',
+                    showClose: false,
+                    duration:10000
+                  })
+
+                setTimeout(()=>{
+                    initPort(path,baudRate)
+                }, RECONNECT_INTERVAL);
+            }else{
+                reconnectAttempts=0
+                ipcRenderer.invoke('logger', '血压计端口打开成功')
+                ElMessage.success({
+                    message: '血压计端口打开成功',
+                    type: 'success',
+                })
+            } 
+        })
+        serialPort.on("close",(err: any)=>{
+            ipcRenderer.invoke('logger', 'HBP9030血压计端口异常端口链接关闭')
+            console.log('mbp9020血压计端口异常端口链接断开')
+            reconnectAttempts=0
+            setTimeout(()=>{
+                initPort(path,baudRate)
+            }, RECONNECT_INTERVAL);
+            console.log(err)
+        })
+         // 解析分割数据流
+         //02 49 44 39 39 39 39 39 39 39 39 42 32 35 2F 3034 2F 31 31 2F 31 32 3A 35 32 20 31 31 36 20 3036 33 20 30 37 36 20 03
+         //ID99999999B25/04/11/12:52 116 063 076 
+        const parser = serialPort.pipe(new InterByteTimeoutParser({ interval: 500 ,maxBufferSize:40}))
+        parser.on('data', (value: string | any[])=>{
+            const str=value.toString()
+            console.log(str)
+            ipcRenderer.invoke('logger', '串口消息')
+            ipcRenderer.invoke('logger', value)
+            ipcRenderer.invoke('logger', value.toString())
+            if(str.length>=38){
+                const gy=str.substring(27,30)
+                const dy=str.substring(31,34)
+                const mb=str.substring(35,38)
+                console.log(gy+','+dy+','+mb,'得到的数据')
+                sockteStore().setxyjSockte(
+                {
+                    deviceName:'HBP-9030',
+                    type:"血压计",
+                    result:gy+','+dy+','+mb,
+                    resultTime:new Date().toString(),
+                    state:2
+                }
+            )
+            }
+            
+        })     
+    }
+    catch (error:any) {
+        console.error('无法创建串口实例:', error.message);
+        reconnectAttempts=0
+        setTimeout(()=>{
+            initPort(path,baudRate)
+        }, RECONNECT_INTERVAL);
+    }
+}
+
+export {
+    initPort,
+}
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
index 2126732..8135399 100644
--- a/src/views/home/index.vue
+++ b/src/views/home/index.vue
@@ -285,6 +285,7 @@
 import{initPort as XK3190A12 } from '@/samples/deviceApi/XK3190A12'
 import {initPort as mbp7000} from '@/samples/deviceApi/mbp7000'
 import {initPort as mbp7000qy} from '@/samples/deviceApi/mbp7000qy'
+import {initPort as omlhbp9020} from '@/samples/deviceApi/oml-HBP-9020'
 
 import {initPort as mbp9020} from '@/samples/deviceApi/mbp-9020'
 import {initPort as rbp9000c} from '@/samples/deviceApi/RBP-9000c'
@@ -997,6 +998,8 @@
         // 鱼跃血压计
       }else if(configData.value.xyj_type==='yuyue'){
         yuyueDevice(configData.value.xueyanjiPortPath,configData.value.xueyanjiBaudRate)
+      }else if(configData.value.xyj_type==='oml-HBP-9020'){
+        omlhbp9020(configData.value.xueyanjiPortPath,configData.value.xueyanjiBaudRate)
       }
       else{
         oumulongHbp9030(configData.value.xueyanjiPortPath,configData.value.xueyanjiBaudRate)
@@ -1021,8 +1024,9 @@
         XK3190A12(configData.value.tzcPortPath,configData.value.tzcBaudRate)
       }else if(configData.value.tzc_type==='zhiRongHehui'){
         zhiRongHehui(configData.value.tzcPortPath,configData.value.tzcBaudRate)
+        // 福州连江 就是1200 南京圣洁 9600
       }else if(configData.value.tzc_type==='lianjiang'){
-        liangjiang(configData.value.tzcPortPath,1200)
+        liangjiang(configData.value.tzcPortPath,configData.value.tzcBaudRate)
       }else if(configData.value.tzc_type==='xinanguojiTZC'){
         xinanguojiTZC(configData.value.tzcPortPath,9600)
       }

--
Gitblit v1.8.0