
目录摘要一、SPC概述1.1 什么是SPC1.2 控制图类型1.3 控制限二、数据准备2.1 质量数据表2.2 分布式存储三、控制图计算3.1 X-bar R控制图3.2 P控制图四、过程能力分析4.1 过程能力指数4.2 过程能力评价五、异常检测5.1 控制图规则5.2 实时异常检测六、质量告警6.1 SPC告警规则七、实战案例7.1 完整SPC监控系统八、总结参考资料摘要本文深入讲解DolphinDB质量实时监控技术。从SPC原理到控制图绘制从过程能力分析到异常检测从质量告警到持续改进全面介绍SPC统计过程控制的核心方法。通过丰富的代码示例帮助读者掌握质量实时监控的核心技能。一、SPC概述1.1 什么是SPCSPCStatistical Process Control统计过程控制是一种质量控制方法SPC控制数据采集统计分析控制图异常检测过程改进1.2 控制图类型控制图数据类型说明X-bar R图计量值均值-极差图X-bar S图计量值均值-标准差图P图计数值不合格率图C图计数值缺陷数图1.3 控制限控制限公式说明UCLμ 3σ上控制限CLμ中心线LCLμ - 3σ下控制限二、数据准备2.1 质量数据表//质量数据表 share streamTable(100000:0,product_iddevice_idtimestampmeasurementspec_minspec_max,[SYMBOL,SYMBOL,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])asquality_stream//启用持久化 enableTablePersistence(quality_stream,true,true,1000000)2.2 分布式存储//创建分布式表 dbdatabase(dfs://quality_db,VALUE,1..100)schematable(1:0,product_iddevice_idtimestampmeasurementspec_minspec_max,[SYMBOL,SYMBOL,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])db.createPartitionedTable(schema,quality_data,device_id)//订阅写入 subscribeTable(,quality_stream,persist,-1,def(msg){loadTable(dfs://quality_db,quality_data).append!(msg)},10000,5000)三、控制图计算3.1 X-bar R控制图//X-bar R控制图计算defcalculateXbarRChart(deviceId,subgroupSize5){//获取数据 dataselect measurementfromquality_stream where device_iddeviceId order by timestamp//分组 ndata.rows()groupCountn/subgroupSize//计算各组均值和极差 xbararray(DOUBLE,0)rarray(DOUBLE,0)for(iin0..groupCount){starti*subgroupSize end(i1)*subgroupSize-1groupDatadata.measurement[start:end]xbar.append!(avg(groupData))r.append!(max(groupData)-min(groupData))}//计算控制限 xbarMeanavg(xbar)rMeanavg(r)//X-bar控制限A2因子 A20.577//n5时的A2值 UCL_xbarxbarMeanA2*rMean LCL_xbarxbarMean-A2*rMean//R控制限D3,D4因子 D30//n5时的D3值 D42.114//n5时的D4值 UCL_rD4*rMean LCL_rD3*rMeanreturndict(STRING,ANY,[[xbar,xbar],[r,r],[xbarMean,xbarMean],[rMean,rMean],[UCL_xbar,UCL_xbar],[LCL_xbar,LCL_xbar],[UCL_r,UCL_r],[LCL_r,LCL_r]])}3.2 P控制图//P控制图不合格率defcalculatePChart(deviceId,subgroupSize100){//获取数据 dataselect measurement,spec_min,spec_maxfromquality_stream where device_iddeviceId order by timestamp//判断合格 data[qualified]data.measurementdata.spec_minanddata.measurementdata.spec_max//分组计算不合格率 ndata.rows()groupCountn/subgroupSize parray(DOUBLE,0)for(iin0..groupCount){starti*subgroupSize end(i1)*subgroupSize-1groupDatadata[start:end]defectCountsum(notgroupData.qualified)p.append!(defectCount*1.0/subgroupSize)}//计算控制限 pMeanavg(p)UCLpMean3*sqrt(pMean*(1-pMean)/subgroupSize)LCLmax(0,pMean-3*sqrt(pMean*(1-pMean)/subgroupSize))returndict(STRING,ANY,[[p,p],[pMean,pMean],[UCL,UCL],[LCL,LCL]])}四、过程能力分析4.1 过程能力指数//过程能力指数计算defcalculateProcessCapability(deviceId){//获取数据 dataselect measurement,spec_min,spec_maxfromquality_stream where device_iddeviceId//计算统计量 meanavg(data.measurement)stdstd(data.measurement)USLavg(data.spec_max)LSLavg(data.spec_min)//Cp指数 Cp(USL-LSL)/(6*std)//Cpk指数 Cpu(USL-mean)/(3*std)Cpl(mean-LSL)/(3*std)Cpkmin(Cpu,Cpl)//Pp指数 Pp(USL-LSL)/(6*std)//Ppk指数 Ppu(USL-mean)/(3*std)Ppl(mean-LSL)/(3*std)Ppkmin(Ppu,Ppl)returndict(STRING,ANY,[[mean,mean],[std,std],[Cp,Cp],[Cpk,Cpk],[Pp,Pp],[Ppk,Ppk]])}4.2 过程能力评价//过程能力评价defevaluateProcessCapability(Cpk){if(Cpk1.67){return优秀}elseif(Cpk1.33){return良好}elseif(Cpk1.0){return合格}elseif(Cpk0.67){return不足}else{return严重不足}}五、异常检测5.1 控制图规则//Western Electric规则检测defdetectAnomalies(deviceId){chartcalculateXbarRChart(deviceId)xbarchart[xbar]UCLchart[UCL_xbar]LCLchart[LCL_xbar]CLchart[xbarMean]anomaliesarray(STRING,0)//规则1超出控制限for(iin0..xbar.size()){if(xbar[i]UCLorxbar[i]LCL){anomalies.append!(点string(i)超出控制限)}}//规则2连续7点在中心线一侧for(iin0..xbar.size()-7){abovesum(xbar[i:i7]CL)belowsum(xbar[i:i7]CL)if(above7orbelow7){anomalies.append!(点string(i)-string(i6)连续7点在中心线一侧)}}//规则3连续6点递增或递减for(iin0..xbar.size()-6){increasingtrue decreasingtruefor(jin0..5){if(xbar[ij]xbar[ij1]){increasingfalse}if(xbar[ij]xbar[ij1]){decreasingfalse}}if(increasingordecreasing){anomalies.append!(点string(i)-string(i5)连续6点趋势)}}returnanomalies}5.2 实时异常检测//实时异常检测 share table(1:0,detect_timedevice_idanomaly_typevalue,[TIMESTAMP,SYMBOL,STRING,DOUBLE])asspc_anomaly//订阅检测 subscribeTable(,quality_stream,spc_detect,-1,def(msg){for(rowinmsg){//检查是否超出规格if(row.measurementrow.spec_minorrow.measurementrow.spec_max){insert into spc_anomaly values(now(),row.device_id,out_of_spec,row.measurement)}}},true)六、质量告警6.1 SPC告警规则//SPC告警规则 spcAlertRulestable([out_of_control,low_capability,trend_anomaly]asrule_name,[1,0,1]asthreshold,[2,2,3]asalert_level)//检查SPC告警defcheckSpcAlerts(deviceId){alertsarray(STRING,0)//检查控制图异常 anomaliesdetectAnomalies(deviceId)if(anomalies.size()0){alerts.append!(控制图异常: concat(anomalies,, ))}//检查过程能力 capabilitycalculateProcessCapability(deviceId)if(capability[Cpk]1.0){alerts.append!(过程能力不足: Cpkstring(capability[Cpk]))}returnalerts}七、实战案例7.1 完整SPC监控系统//SPC统计过程控制系统//1.创建数据表 share streamTable(100000:0,product_iddevice_idtimestampmeasurementspec_minspec_max,[SYMBOL,SYMBOL,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])asquality_stream enableTablePersistence(quality_stream,true,true,1000000)//2.创建分布式表 dbdatabase(dfs://quality_db,VALUE,1..100)schematable(1:0,product_iddevice_idtimestampmeasurementspec_minspec_max,[SYMBOL,SYMBOL,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])db.createPartitionedTable(schema,quality_data,device_id)//3.订阅写入 subscribeTable(,quality_stream,persist,-1,def(msg){loadTable(dfs://quality_db,quality_data).append!(msg)},10000,5000)//4.SPC异常表 share table(1:0,detect_timedevice_idanomaly_typevalue,[TIMESTAMP,SYMBOL,STRING,DOUBLE])asspc_anomaly//5.实时检测 subscribeTable(,quality_stream,spc_detect,-1,def(msg){for(rowinmsg){if(row.measurementrow.spec_minorrow.measurementrow.spec_max){insert into spc_anomaly values(now(),row.device_id,out_of_spec,row.measurement)}}},true)//6.模拟数据defgenerateMockQuality(){while(true){datatable(Pstring(rand(1000,10))asproduct_id,take(1..10,10)asdevice_id,take(now(),10)astimestamp,rand(95.0..105.0,10)asmeasurement,take(90.0,10)asspec_min,take(110.0,10)asspec_max)quality_stream.append!(data)sleep(5000)}}submitJob(mock_quality,模拟质量数据,generateMockQuality)//7.SPC分析接口defgetSpcAnalysis(deviceId){capabilitycalculateProcessCapability(deviceId)chartcalculateXbarRChart(deviceId)returndict(STRING,ANY,[[capability,capability],[controlChart,chart]])}addFunctionView(getSpcAnalysis)print(SPC统计过程控制系统启动完成)八、总结本文详细介绍了DolphinDB质量实时监控SPCSPC原理控制图、控制限控制图计算X-bar R图、P图过程能力Cp、Cpk、Pp、Ppk异常检测控制图规则、实时检测质量告警告警规则、告警推送思考题如何选择合适的控制图类型如何提高过程能力如何实现SPC的自动化参考资料SPC统计过程控制DolphinDB统计分析