我想做一个小程序,一进去能选择,第一是声纹探轴,然后第二个选项是智析乾坤,然后第一个声纹探轴点开之后,他的内容及代码我告诉你,你按照我的代码复制就好,不要变动他的功能,只要能让他汇总到一个按钮里面就可以了,就是相当于点开这个按钮出来得画面跟我之前写的代码都一样,展现得内容什么得都一样,我的代码如下: collect.js代码如下: Page({ data: { currentStep: 1, bearingInfo: { model: '', speed: '', deviceName: '' }, audioPath: '', analysisResult: null, countdown: 5, showCountdown: false, recording: false, progress: 0, waveformData: Array(32).fill(20) }, onModelInput(e) { this.setData({ 'bearingInfo.model': e.detail.value }); }, onSpeedInput(e) { this.setData({ 'bearingInfo.speed': e.detail.value }); }, onDeviceInput(e) { this.setData({ 'bearingInfo.deviceName': e.detail.value }); }, nextStep1() { const { model, speed, deviceName } = this.data.bearingInfo; if (!model.trim()) { wx.showToast({ title: '请输入轴承型号', icon: 'none' }); return; } if (!speed.trim()) { wx.showToast({ title: '请输入轴承转速', icon: 'none' }); return; } this.setData({ currentStep: 2 }); }, startRecord() { const that = this; this.setData({ recording: true, showCountdown: true, countdown: 5, progress: 0, waveformData: Array(32).fill(20) }); const totalMs = 5000; const intervalTime = 100; const steps = totalMs / intervalTime; let current = 0; const updateWave = () => { const newWave = that.data.waveformData.map(() => 10 + Math.random() * 30); that.setData({ waveformData: newWave }); }; const waveTimer = setInterval(updateWave, 120); const timer = setInterval(() => { current++; const remaining = Math.max(0, totalMs - current * intervalTime); const remainingSec = Math.ceil(remaining / 1000); const progress = (current / steps) * 100; that.setData({ countdown: remainingSec, progress: progress }); if (remaining <= 0) { clearInterval(timer); clearInterval(waveTimer); that.setData({ recording: false, showCountdown: false, currentStep: 3 }); const detectedFreq = 1000 + Math.floor(Math.random() * 2000); const rpm = parseInt(that.data.bearingInfo.speed); const theoretical = [ { name: '内圈 BPFI', value: Math.round((rpm / 60) * 5.5) }, { name: '外圈 BPFO', value: Math.round((rpm / 60) * 4.0) }, { name: '滚动体 BSF', value: Math.round((rpm / 60) * 3.5) }, { name: '保持架 FTF', value: Math.round((rpm / 60) * 2.0) } ]; let closest = theoretical[0]; let minDiff = Math.abs(detectedFreq - theoretical[0].value); for (let i = 1; i < theoretical.length; i++) { const diff = Math.abs(detectedFreq - theoretical[i].value); if (diff < minDiff) { minDiff = diff; closest = theoretical[i]; } } const isClose = minDiff < 100; let summary = ''; if (isClose) { summary = `🔴 检测频率与${closest.name}(${closest.value} Hz)接近,建议关注对应部件健康状态。`; } else { summary = `✅ 未发现明显的内圈/外圈/滚动体/保持架特征频率异常,轴承运行正常。`; } const now = new Date(); const timeStr = `${now.getFullYear()}年${now.getMonth() + 1}月${now.getDate()}日 ${now.getHours()}:${now.getMinutes().toString().padStart(2, '0')}`; const result = { model: that.data.bearingInfo.model, speed: that.data.bearingInfo.speed, deviceName: that.data.bearingInfo.deviceName, theoreticalFreqs: theoretical, detectedFreq: detectedFreq + ' Hz', closest: closest, summary: summary, reportTime: timeStr }; that.setData({ analysisResult: result }); } }, intervalTime); }, reset() { this.setData({ currentStep: 1, bearingInfo: { model: '', speed: '', deviceName: '' }, audioPath: '', analysisResult: null, countdown: 5, showCountdown: false, recording: false, progress: 0, waveformData: Array(32).fill(20) }); } }); collect.json代码如下: { "navigationBarTitleText": "轴承声纹采集", "navigationBarBackgroundColor": "#667eea", "navigationBarTextStyle": "white", "backgroundColor": "#f5f7fa" } collect.wxml代码如下: <view class="container"> <view wx:if="{{currentStep === 1}}" class="step"> <text class="title">🔧 轴承信息输入</text> <text class="label">设备名称(如:1-1石灰石供浆泵)</text> <input placeholder="例如:1-1石灰石供浆泵" bindinput="onDeviceInput" value="{{bearingInfo.deviceName}}" class="input" /> <text class="label">轴承型号(如:6205、SKF-6206)</text> <input placeholder="例如:6205" bindinput="onModelInput" value="{{bearingInfo.model}}" class="input" /> <text class="label">轴承转速(rpm)</text> <input placeholder="例如:1800" type="number" bindinput="onSpeedInput" value="{{bearingInfo.speed}}" class="input" /> <button bindtap="nextStep1" class="btn primary">下一步</button> </view> <view wx:elif="{{currentStep === 2}}" class="step"> <text class="title">🎤 声纹采集</text> <view class="countdown">{{countdown}}秒</view> <view class="progress"> <view class="bar" style="width:{{progress}}"></view> </view> <view class="spectrum"> <view wx:for="{{waveformData}}" wx:key="i" class="spectrum-bar" style="height:{{item}}rpx"></view> </view> <button bindtap="startRecord" class="btn record" disabled="{{recording}}"> {{recording ? '声纹探轴中...' : '点击开始'}} </button> </view> <view wx:else class="step"> <text class="title">📊 分析报告</text> <text class="report-text">🔧 设备名称:{{analysisResult.deviceName}}</text> <text class="report-text">🔧 轴承型号:{{analysisResult.model}}</text> <text class="report-text">⚙️ 转速:{{analysisResult.speed}} rpm</text> <text class="report-text">📐 理论特征频率:</text> <text class="report-text"> • 内圈 BPFI:{{analysisResult.theoreticalFreqs[0].value}} Hz</text> <text class="report-text"> • 外圈 BPFO:{{analysisResult.theoreticalFreqs[1].value}} Hz</text> <text class="report-text"> • 滚动体 BSF:{{analysisResult.theoreticalFreqs[2].value}} Hz</text> <text class="report-text"> • 保持架 FTF:{{analysisResult.theoreticalFreqs[3].value}} Hz</text> <text class="report-text">🎤 检测到主要频率:{{analysisResult.detectedFreq}}</text> <text class="report-text">🔍 最接近:{{analysisResult.closest.name}} ({{analysisResult.closest.value}} Hz)</text> <text class="report-text">⚠️ 结论:{{analysisResult.summary}}</text> <text class="report-text">📅 报告时间:{{analysisResult.reportTime}}</text> <button bindtap="reset" class="btn secondary">重新开始</button> </view> </view> collect.WXSS代码如下: /* ===== 基础容器与背景 ===== */ .container { min-height: 100vh; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 50%, #e0eafc 100%); padding: 60rpx 40rpx; box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif; } /* ===== 步骤卡片 ===== */ .step { background: #ffffff; border-radius: 24rpx; padding: 80rpx 60rpx; width: 100%; max-width: 680rpx; box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.08), 0 8rpx 24rpx rgba(0, 0, 0, 0.04); text-align: center; color: #333333; border: 1rpx solid rgba(0, 0, 0, 0.05); position: relative; overflow: hidden; } /* ===== 标题样式 ===== */ .title { font-size: 48rpx; font-weight: 700; display: block; margin-bottom: 60rpx; color: #2c3e50; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; } /* ===== 标签样式 ===== */ .label { display: block; font-size: 30rpx; margin-bottom: 24rpx; color: #5a6c7d; font-weight: 500; line-height: 1.4; } /* ===== 输入框样式 ===== */ .input { border: 2rpx solid #e1e8ed; border-radius: 16rpx; padding: 36rpx 32rpx; margin-bottom: 40rpx; font-size: 34rpx; width: 100%; background: #fafbfc; color: #2c3e50; box-sizing: border-box; transition: all 0.3s ease; } /* ===== 按钮基础样式 ===== */ .btn { width: 100%; margin-top: 50rpx; border: none; border-radius: 16rpx; font-size: 34rpx; font-weight: 600; padding: 36rpx 0; text-align: center; transition: all 0.3s ease; position: relative; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; } /* ===== 主要按钮样式 ===== */ .btn.primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: #ffffff; box-shadow: 0 8rpx 24rpx rgba(102, 126, 234, 0.3); } /* ===== 次要按钮样式 ===== */ .btn.secondary { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); color: #ffffff; box-shadow: 0 8rpx 24rpx rgba(245, 87, 108, 0.3); } /* ===== 录音按钮样式 ===== */ .btn.record { background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 50%, #fecfef 100%); color: #2c3e50; font-weight: 600; box-shadow: 0 8rpx 24rpx rgba(255, 154, 158, 0.3); } /* ===== 倒计时样式 ===== */ .countdown { font-size: 96rpx; font-weight: 800; color: #e53e3e; margin: 40rpx 0; text-shadow: 0 4rpx 8rpx rgba(229, 62, 62, 0.2); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; } /* ===== 进度条样式 ===== */ .progress { width: 100%; height: 12rpx; background: #e2e8f0; border-radius: 6rpx; margin: 40rpx 0; overflow: hidden; box-shadow: inset 0 2rpx 4rpx rgba(0, 0, 0, 0.06); } .bar { height: 100%; background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); border-radius: 6rpx; transition: width 0.1s linear; position: relative; } /* ===== 频谱可视化样式 ===== */ .spectrum { display: flex; justify-content: space-between; align-items: flex-end; height: 120rpx; margin: 40rpx 0; padding: 0 16rpx; } .spectrum-bar { width: 10rpx; background: linear-gradient(to top, #667eea 0%, #764ba2 100%); border-radius: 5rpx; margin: 0 3rpx; transition: height 0.1s ease; box-shadow: 0 2rpx 4rpx rgba(102, 126, 234, 0.2); min-height: 10rpx; } /* ===== 报告文本样式 ===== */ .report-text { display: block; font-size: 32rpx; margin-bottom: 24rpx; color: #2c3e50; line-height: 1.5; text-align: left; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; } /* ===== 专业细节优化 ===== */ .step { position: relative; } 然后给我生成完整的collect.js、collect.wxml 、collect.wxss 文件内容便于我直接复制修改 然后第二个的技术背景是:轴承特征频率(故障频率) 是指轴承内圈、外圈、滚动体、保持架等部件出现局部缺陷时,缺陷与对 应接触部位周期性撞击或摩擦,产生的具有固定规律的振动(声音)频率。 该频率由轴承结构参数(滚动体数量、节圆直径、滚动体直径)和运行转 速共同决定,轴承内外圈等不同部件的故障对应不同特征频率值。通过声纹或 振动检测捕捉到对应频率,即可精准判断轴承的故障位置与类型,是设备故障 诊断的核心依据。振动(声音)特征频率 是指设备运行时,轴承、齿轮、转轴等关键部件因结构缺陷或异常工况, 产生的具有固定规律、可重复识别的振动(声音)频率值,是设备故障诊断的 核心判断依据。 本系统的核心原理是通过对设备运行声音进行采集与分析计算,提取声音 特征频率,再将其与轴承特征频率、转速频率、电源频率进行多维度比对,结 合频率幅值变化、谐波及边频带特征,精准定性缺陷类型与根源。一、高频相关指标 (一)高频占比 正常轴承声音高频占比在 10%以下,可能由于轴承缺陷、润滑不良、轴承打滑等导 致高频占比偏高,一般在 30%以上属于极高。若检测报告提示“加强润滑”,则表示缺 油或可通过加油缓解;若报告提示“出现结构松动”,则可能为强力冲击所致,一般无 法通过润滑缓解。 (二)信噪比 若高频声音占比过高(>20%),常常会掩盖正常的轴承故障特征。轴承故障早期信 噪比较高,随着缺陷发展,信噪比会逐渐降低。 二、特征频率相关指标 (一)特征频率 指从轴承声音中分析出的间歇调制频率,可看做是某种缺陷特征。其中,轴承缺陷 对应轴承故障频率;非轴承缺陷一般对应转频倍数(如联轴器问题、动平衡问题)或电 源频率倍数(如电机间隙不均匀、鼠笼条问题、铁芯松动等)。 (二)特征度 表征该特征频率的显著程度,其中数值 9 代表特征最明显。 (三)冲击度 表征该缺陷造成的冲击能量,一般由撞击或其他结构松动引发的敲击作用产生。轴 承缺陷通常具有较高的冲击度,非轴承缺陷一般冲击度很低(同时存在部件松动的情况 除外)。 (四)振动度 表征该缺陷引发的整体性结构振动能量。非轴承缺陷易导致振动度上升,轴承缺陷 的中晚期阶段也会造成振动度上升。 第二个选项我需要里面得功能是,一进去第一个画面,先输入以下信息,都不是必填项,第一个设备名称,第二个轴承型号,第三个轴承品牌,第二个画面是粘贴报告信息的,第三个画面就是根据第一个及第二个画面的信息,汇总出一份专业的解读报告,然后我告诉你,你所出具的报告怎么出,第一,你得根据第一个画面输入的轴承型号及轴承品牌。然后在线查找这个轴承型号的转动体数量、转速,节圆直径、滚动体直径。等一切需要计算轴承故障频率,也是轴承特征频率,公式一切所要的数据,第二,根据我给你发的分析报告。你结合我的报告及你查询的内容,还有我教给你的知识,你给我一份比较专业,然后通俗易懂的报告,你还需要内置我交给你的知识,然后结合我让你查找的内容,我给你复制的报告信息,还要结合我给你内置的知识,进行综合分析,内置的信息如下:常见缺陷声纹报告指标解读 缺油:(加速度正常) (1) 声音整体高频占比较高(15%以上),有明显的峰值提示以及润滑提示 (2) 轴承特征频率没有发现或特征度很低 (3) 加速度正常、温度正常 早期出现磨痕(加速度小幅上升、无异常声音) (1) 特征频率和轴承故障频率匹配,特征度较为明显 (2) 较强的冲击度(3 以上),几乎没有振动度 中期剥落开始:(加速度较大、异音出现) (1) 特征频率和轴承故障频率匹配,特征度强 (2) 高频占比升高(10%以上)、提示润滑 (3) 较强的冲击度(5 以上),振动度上升(3 以上) 晚期剥落面扩大:(加速度大、明显异音) (1) 特征频率和轴承故障频率匹配,特征度强 (2) 高频占比很高(20%以上),信噪比较低、提示润滑 (3) 很强的冲击度(5 以上),很强振动度(5 以上) (4) 可能出现转频倍数特征 失效期:(加速度大、明显异音) (1) 特征频率和轴承故障频率不太匹配,常常以高次谐波出现 (2) 高频占比极高(30%以上)、信噪比很低、提示出现结构冲击 (3) 特征频率特征度下降 (4) 一般会出现转频倍数特征频率 跑圈(加速度正常,有异音) (1) 声音整体高频占比较高(20%以上) (2) 轴承特征频率转频倍数或电源倍数 (3) 特征频率的振动度大(5 以上),冲击度很大(5 以上) 滑动(常见双列轴承一个预紧立力不足) (1) 声音整体高频占比较高(20%以上),有明显的峰值提示以及润滑提示 (2) 轴承特征频率没有发现或特征度很低 (3) 加油后异音消失,一会又出现 *非轴承常见缺陷声纹报告解读 电机间隙不均匀: (1) 特征频率 100, (2) 有较强的振动度(3 以上),冲击度较低 联轴器不对中: (1) 特征频率为转频倍频(通常为 2 倍) (2) 有较强的振动度(3 以上),冲击度较低 (3) 高频占比较低 联轴器松动 (1) 特征频率为转频倍频 (2) 有较强的振动度(5 以上),较强冲击度(5 以上) (3) 高频占比较高(20%以上) 基础晃动 (1) 特征频率为转频,有较强的振动度(3 以上),冲击度较低,无高频声 (2) 振幅较大、加速度较小