Cpk (Process Capability Index)制程能力指数
Cpk的意义:制程水平的量化反映
制程能力指数:是一种表示制程水平高低的方法,其作用是反映制程合格率的高低
CPK的计算公式
Cpk=Cp(1-|Ca|)
Ca (Capability of Accuracy):制程准确度
Ca 在衡量“实际平均值“与“规格中心值”之一致性
1.对于单边规格,不存在规格中心,因此也就不存在Ca
2.对于双边规格:
Ca=[(X1+X2+… …+Xn)/n-C]/(T/2)
USL:规格上限
LSL:规格下限
C:规格中心[C=(USL+LSL)/2]
T:规格公差[T=USL-LSL]
Cp (Capability of Precision) :制程精密度
Cp衡量的是“规格公差宽度”与“制程变异宽度”之比例
- 对于只有规格上限(USL)和规格中心的规格:
Cpu=[USL-(X1+X2+… …+Xn)/n]/3σ - 对于只有规格下限(LSL)和规格中心的规格:
Cpl=[(X1+X2+… …+Xn)/n-LSL]/3σ - 对于双边规格:
Cp=(USL-LSL)/6σ
C#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Common.Arithmetic
{
/// <summary>
/// Cpk (Process Capability Index )的定义:制程能力指数;
/// Cpk的意义:制程水平的量化反映;(用一个数值来表达制程的水平) 制程能力指数:是一种表示制程水平高低的方便方法,其实质作用是反映制程合格率的高低。
/// Cpk=Cp(1-|Ca|)
/// Ca(Capability of Accuracy):制程准确度;
/// Cp(Capability of Precision) :制程精密度;
/// 注意: 计算Cpk时,取样数据至少应有20组数据,而且数据要具有一定代表性。
/// </summary>
public class Cpk
{
protected double[] _values;
protected double _usl;
protected double _lsl;
protected double _cl;
protected double _avg;
protected double _sigma;
protected double _ca;
protected double _cpu;
protected double _cpl;
protected double _cp;
protected double _cpk;
public double USL
{
get { return _usl; }
}
public double LSL
{
get { return _lsl; }
}
public double C
{
get { return _cl; }
}
public double X
{
get { return _avg; }
}
public double T
{
get { return _usl - _lsl; }
}
public Cpk(double[] values,double lsl,double usl)
{
_values = values;
_lsl = lsl;
_usl = usl;
_cl = (_usl + lsl) / 2;
calSigma();
calCa();
calCpu();
calCpl();
calCp();
calCpk();
}
private void calSigma()
{
double sum = 0;
foreach(double val in _values)
{
sum += val;
}
_avg = sum / _values.Length;
sum = 0;
foreach (double val in _values)
{
sum += (val-_avg)*(val- _avg);
}
_sigma = Math.Sqrt(sum/(_values.Length-1));
}
private void calCa()
{
_ca = (_avg - _cl) / (T / 2);
}
private void calCpu()
{
_cpu = (_usl - _avg) / (3 * _sigma);
}
private void calCpl()
{
_cpl = (_avg - _lsl) / (3 * _sigma);
}
private void calCp()
{
_cp = (_usl - _lsl) / (6 * _sigma);
}
private void calCpk()
{
_cpk = _cp * (Math.Sqrt((1 - _ca) * (1 - _ca)));
}
}
}
无聊用C#写的一个简单双边规格的Cpk,未验证!!!
可添加几个Cpk,Ca,Cp,Cpu,Cpl属性,用来显示相关数据。
计算公式来源网络,所以未加解释,防止侵权。