chenyc
2024-12-02 c8dde21585f90d052bea1d95f8a5455cac5cc7de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import { keys } from "localforage"
 
const STX = 'S4'//‘S4’固定
const LEN = ''//所有DATAID,DATA的字节数相加后的数
const ID = 'PAT123456789'//患者 ID
const CN = 'TC'//命令名,用于指定各命令的类别代码
const DATAID = '13'//日期识别码  2字节
const DATA = ''// 
const SUM = ''//校验用数据(将CR、LF以外的全部数据相加,将下位的HEX2位转换为ASCII代码)
const ETX = '' // 0d0a
 
 
const data患者ID = 'B1PAT123456789'
const data患者名 = 'B2王小二'// B2 20接受治疗的患者的姓名、汉字。
const data治疗方案 = 'B30'// 0:HD,1:ECUM,2:HDF,3:HF,4:OHDF(オンライン HDF),5:I‒HDF,6:O/I‒HDF(オンライン I‒HDF),7:予備(未使用)
const data补充液的选择 = 'D10'//0: 预补充(稀释前)1: 后补充(稀释后)
const data体重 = 'D2100.00' //0-300.00 6字节 治疗前测量的体重值
const data干体重 = 'D3098.00' // 0-300.00 6字节 治疗前测量的体重值
const data透析时间 = 'C1240' // 0-599    3    分钟    
const data脱水时间 = 'C2240' // 0-599    3    分钟
const data目标脱水 = 'C32.40' // 4字节  2.40 L
const data脱水率 = 'C40.60' //   4字节  0.60L/h
const data补液时间 = 'C5060' //  3字节   4分钟
const data补液量 = 'C604.0' //   4字节 0-99.9  4L
const data补液率 = 'C704.0'    //4字节    4/(60/60) =4L/h       该项目是采用目标补液量和补液时间,还是根据目标补液量和补液时间计算得出,取决于设备。 
const data注射泵一次量 = 'D420.0'   // 4    0-20.0   毫升/
const data注射泵速度 = 'C810.0'     //   0-10.0毫升/小时
const data注射泵自动停止时间 = 'D5120'   //0-120    3    分钟    治疗结束前 xx 分钟停止治疗的时间。
const data血流量 = 'D6300'    //D6    0-600    3    毫升/分钟    
const data透析液温度 = 'C936.6'  //33.0-40.0    4    ℃
const data补给温度 = 'CA33.6' //33.0-40.0    4    ℃    
const data透析液流量 = 'D71000' //0-1000    4    毫升/分钟    对于在线 HDF,该值应包括置换液的体积。
const dataHDF补液时间 = 'D81000'  //0-1000    4    毫升/分钟    对于在线 HDF,该值应包括置换液的体积。
const dataHDF每次剂量的液体量 = 'D9300'  //D9.    0-300    3    毫升    I-HDF 每次剂量的补充液体量
const dataHDF补液间隔 = 'DA120'   //DA    0-120    3    分钟    I-HDF 补充剂的间隔时间。
const dataHDF补充率 = 'DB300'    //DB    0-300    3    毫升/分钟    I-HDF 的补液率。
const data收缩压上限 = 'DC300'          //DC    0,1-300    3    毫米汞柱    收缩压上限警戒点。0 不受监控
const data收缩压下限 = 'DD300'    //DD    0,1-300    3    毫米汞柱    降低收缩压警示点0 不受监控
const data舒张压上限 = 'DE300'         //DE 0,1~300 3 mmHg
const data舒张压下限 = 'DF300'     //  DF 0,1~300 3 mmHg
const data脉冲上限 = 'DG200'                // DG 0,1~200 3 bpm
const data脉搏下限 = 'DH200'               // DH 0,1~200 3 bpm
const data血压自动测量间隔 = 'DI180'       // DI 0,1~180 3 min
 
export interface iTCdata {
    data患者ID: string,
    data患者名: string,
    data治疗方案: string,
    data补充液的选择: string,
    data体重: string,
    data干体重: string,
    data透析时间: string,
    data脱水时间: string,
    data目标脱水: string,
    data脱水率: string,
    data补液时间: string,
    data补液量: string,
    data补液率: string,
    data注射泵一次量: string,
    data注射泵速度: string,
    data注射泵自动停止时间: string,
    data血流量: string,
    data透析液温度: string,
    data补给温度: string,
    data透析液流量: string,
    dataHDF补液时间: string,
    dataHDF每次剂量的液体量: string,
    dataHDF补液间隔: string,
    dataHDF补充率: string,
    data收缩压上限: string,
    data收缩压下限: string,
    data舒张压上限: string,
    data舒张压下限: string,
    data脉冲上限: string,
    data脉搏下限: string,
    data血压自动测量间隔: string,
}
export interface IMsgBody {
    STX: string   //‘S4’固定
    LEN: string //所有DATAID,DATA的字节数相加后的数
    ID: string //患者 ID
    CN: string //命令名,用于指定各命令的类别代码
    DATAID?: string //日期识别码  2字节
    DATA: Object
    SUM: string  //校验用数据(将CR、LF以外的全部数据相加,将下位的HEX2位转换为ASCII代码)
    ETX: string // 0d0a
 
}
export interface iCMdata {
    data患者姓名: string,  //DA    20        接收数据时设备上显示的病人姓名
    data评论: string,     // DA    500        改行可(改行代码替换为/n’)显示在画面上的接受治疗的患者相关信息
 
}
/**
 * 获取 DATA对象 dataString
 */
export function getDATAmodeStr(mode: any) {
    let str = ''
    for (const key in mode) {
        if (mode.hasOwnProperty(key)) {
            const value = mode[key];
            console.log(key, value);
            str += value
        }
    }
    return str
}
/**
 * 
 * @param mode 发送的数据对象
 */
export function getMsgDataStr(mode: IMsgBody) {
    let str = ''
    const DATAstr = getDATAmodeStr(mode.DATA)
    console.log(`数据对象字符串位等于${DATAstr}--------------------------------------`)
    const modeLEN = (DATAstr + mode.DATAID).length.toString().padStart(3,'0')
    // num.toString().padStart(3, '0');
    console.log(`数据长度位等于${modeLEN}--------------------------------------`)
    // 校验码===检查用镊子(CR,将除LF外的所有数据相加,将下位的HEX2位转换为ASCI代码)
    str = mode.STX + modeLEN + mode.ID + mode.CN + mode.DATAID + DATAstr
    // 算出校验码
    const modeSUM = jianyan(str)
    str += modeSUM + '\r\n'
    console.log(`发送数据字符串=${str}--------------------------------------`)
    return str
}
export function jianyan(data: string) {
    let sum = 0
    const str=data.replace(/[\r\n]/g,'');
    for (let char of str) {
        sum += char.charCodeAt(0);
    }
    // 转换为 HEX,并取低两位
    const hexSum = sum.toString(16).toUpperCase();
    const checksum = hexSum.slice(-2); // 取低两位
    console.log(`校验位-${checksum}------------------------------`)
    return checksum;
}