How do you define a control limit in SPC?

To export control limit entries, right-click anywhere on the table containing control limit entries and select the Export menu item. A dialog box will appear to allow selection of an existing file or the entry of a name for the new file to save the control limits to. If a file extension is not entered, then the default .csv will be used. The first line of the file must contain at least the property names separated by commas. If additional names exist, they will be ignored. The property names can be in any order.

 Click here to see an example csv file...

Name,Kind,CL Color,Script,Group
"Box and Whisker LCL","44","java.awt.Color[r=255,g=200,b=0]","",""
"Box and Whisker UCL","43","java.awt.Color[r=255,g=200,b=0]","",""
"Cp LSL","38","java.awt.Color[r=255,g=200,b=0]","",""
"Cp Target","39","java.awt.Color[r=255,g=200,b=0]","",""
"Cp USL","37","java.awt.Color[r=255,g=200,b=0]","",""
"CpPp LSL","47","java.awt.Color[r=255,g=200,b=0]","",""
"CpPp Target","48","java.awt.Color[r=255,g=200,b=0]","",""
"CpPp USL","46","java.awt.Color[r=255,g=200,b=0]","",""
"Histogram LCL","29","java.awt.Color[r=255,g=200,b=0]","",""
"Histogram UCL","28","java.awt.Color[r=255,g=200,b=0]","",""
"Individual LCL","11","java.awt.Color[r=255,g=200,b=0]","#Individual LCL Calculation\n#Get the SPC data that the Individual LCL will be calculated for\nds = event.getData()\n\n#Get the columnn index within the SPC data\nxBarColNdx = ds.getColumnIndex(\"XBar\")\nmrColNdx = ds.getColumnIndex(\"MR\")\n\n#Initialize XBar and moving range sums that are need to calculate average Xbar and moving range.\nxBarSum = 0.0\nmrSum = 0.0\n\n#Cycle through each row and add to the sum\nfor row in range(ds.rowCount):\n\txBarSum = xBarSum + ds.getValueAt(row, xBarColNdx)\n\tmrVal = ds.getValueAt(row, mrColNdx)\n\tif mrVal <> None:\n\t\tmrSum = mrSum + mrVal\n\n#Calculate the average XBar and moving range\nxDBar = xBarSum / ds.rowCount\t\t\nmrBar = mrSum / (ds.rowCount - 1)\n\t\n#Calculate the Individual LCL\nlcl = xDBar - 2.66 * mrBar\n\n#Return the new Individual LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"Individual UCL","10","java.awt.Color[r=255,g=200,b=0]","#Individual UCL Calculation\n#Get the SPC data that the Individual UCL will be calculated for\nds = event.getData()\n\n#Get the columnn index within the SPC data\nxBarColNdx = ds.getColumnIndex(\"XBar\")\nmrColNdx = ds.getColumnIndex(\"MR\")\n\n#Initialize XBar and moving range sums that are need to calculate average Xbar and moving range.\nxBarSum = 0.0\nmrSum = 0.0\n\n#Cycle through each row and add to the sum\nfor row in range(ds.rowCount):\n\txBarSum = xBarSum + ds.getValueAt(row, xBarColNdx)\n\tmrVal = ds.getValueAt(row, mrColNdx)\n\tif mrVal <> None:\n\t\tmrSum = mrSum + mrVal\n\n#Calculate the average XBar and moving range\nxDBar = xBarSum / ds.rowCount\t\t\nmrBar = mrSum / (ds.rowCount - 1)\n\t\n#Calculate the Individual UCL\nucl = xDBar + 2.66 * mrBar\n\n#Return the new Individual UCL back to the SPC module\nevent.setControlLimitValue(ucl)",""
"MR LCL","35","java.awt.Color[r=255,g=200,b=0]","#Moving Range LCL Calculation\n#The LCL for Moving Range is always 0\nlcl = 0.0\n\n#Return the new Moving Range LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"MR UCL","34","java.awt.Color[r=255,g=200,b=0]","#Moving Range UCL Calculation\n#Get the SPC data that the Moving Range UCL will be calculated for\nds = event.getData()\n\n#Get the columnn index within the SPC data\nmrColNdx = ds.getColumnIndex(\"MR\")\n\n#Initialize moving range sums that are need to calculate average moving range.\nmrSum = 0.0\n\n#Cycle through each row and add to the sum\nfor row in range(ds.rowCount):\n\tmrSum = mrSum + ds.getValueAt(row, mrColNdx)\n\n#Calculate the average moving range\nmrBar = mrSum / (ds.rowCount - 1)\n\t\n#Calculate the Moving Range UCL\nucl = 3.267 * mrBar\n\n#Return the new Moving Range UCL back to the SPC module\nevent.setControlLimitValue(ucl)",""
"Median LCL","14","java.awt.Color[r=255,g=200,b=0]","#XBar LCL Calculation\n#Define the A2 factors array.\n#The A2 factors correspond to the sample size which starts at 2.\n#THis is why element 0 and 1 of the array are 0.\na2 = [0.0, 0.0, 1.880, 1.023, 0.729, 0.577, 0.483, 0.419, 0.373, 0.337, 0.308, 0.285, 0.266, 0.249, 0.235, 0.223, 0.212, 0.203, 0.194, 0.187, 0.180, 0.173, 0.167, 0.162, 0.157, 0.153]\n\n#Get the SPC data that the Median LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nmedianColNdx = ds.getColumnIndex(\"Median\")\nrangeColNdx = ds.getColumnIndex(\"Range\")\n\n#Initialize xBar and range sums that are need to calculate average xBar and range. \nmedianSum = 0.0\nrSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tmedianSum = medianSum + ds.getValueAt(row, medianColNdx)\n\trSum = rSum + ds.getValueAt(row, rangeColNdx)\n\n#Calculate the average xBar and range\t\nmedianBar = medianSum / ds.rowCount\nrBar = rSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = event.getSampleSize()\n\n#Lookup the A2 value\nif sampleSize < len(a2):\n\ta2Value = a2[sampleSize]\nelse:\n\ta2Value = a2[len(a2) - 1]\n\t\n#Calculate the Median LCL\nlcl = medianBar - a2Value * rBar\n\n#Return the new Median LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"Median UCL","13","java.awt.Color[r=255,g=200,b=0]","#XBar UCL Calculation\n#Define the A2 factors array.\n#The A2 factors correspond to the sample size which starts at 2.\n#THis is why element 0 and 1 of the array are 0.\na2 = [0.0, 0.0, 1.880, 1.023, 0.729, 0.577, 0.483, 0.419, 0.373, 0.337, 0.308, 0.285, 0.266, 0.249, 0.235, 0.223, 0.212, 0.203, 0.194, 0.187, 0.180, 0.173, 0.167, 0.162, 0.157, 0.153]\n\n#Get the SPC data that the Median UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nmedianColNdx = ds.getColumnIndex(\"Median\")\nrangeColNdx = ds.getColumnIndex(\"Range\")\n\n#Initialize xBar and range sums that are need to calculate average xBar and range. \nmedianSum = 0.0\nrSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tmedianSum = medianSum + ds.getValueAt(row, medianColNdx)\n\trSum = rSum + ds.getValueAt(row, rangeColNdx)\n\n#Calculate the average xBar and range\t\nmedianBar = medianSum / ds.rowCount\nrBar = rSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = event.getSampleSize()\n\n#Lookup the A2 value\nif sampleSize < len(a2):\n\ta2Value = a2[sampleSize]\nelse:\n\ta2Value = a2[len(a2) - 1]\n\t\n#Calculate the Median UCL\nlcl = medianBar + a2Value * rBar\n\n#Return the new Median UCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"Pp LSL","41","java.awt.Color[r=255,g=200,b=0]","",""
"Pp Target","42","java.awt.Color[r=255,g=200,b=0]","",""
"Pp USL","40","java.awt.Color[r=255,g=200,b=0]","",""
"Range LCL","5","java.awt.Color[r=255,g=200,b=0]","#Range UCL Calculation\n#Define the D3 factors array.\n#The D3 factors correspond to the sample size which starts at 7 for Range LCL.\n#This is why element 0 through 6 of the array are 0.\nd3 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.076, 0.136, 0.184, 0.223, 0.256, 0.283, 0.307, 0.328, 0.347, 0.363, 0.378, 0.391, 0.403, 0.415, 0.425, 0.434, 0.443, 0.451, 0.459]\n\n#Get the SPC data that the Range LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexe within the SPC data\nrangeColNdx = ds.getColumnIndex(\"Range\")\n\n#Initialize range sum that are need to calculate average range.\nrSum = 0.0\n\n#Cycle through each row and add to the sum\nfor row in range(ds.rowCount):\n\tr = ds.getValueAt(row, rangeColNdx)\n\trSum = rSum + r\n\n#Calculate the average range\t\t\nrBar = rSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = event.getSampleSize()\n\n#Lookup the D3 value\nif sampleSize < len(d3):\n\td3Value = d3[sampleSize]\nelse:\n\td3Value = d3[len(d3) - 1]\n\t\n#Calculate the Range LCL\nlcl = d3Value * rBar\n\n#Return the new Range LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"Range UCL","4","java.awt.Color[r=255,g=200,b=0]","#Range UCL Calculation\n#Define the D4 factors array.\n#The D4 factors correspond to the sample size which starts at 2.\n#This is why element 0 and 1 of the array are 0. \nd4 = [0.0, 0.0, 3.267, 2.574, 2.282, 2.114, 2.004, 1.924]\n\n#Get the SPC data that the Range UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexe within the SPC data\nrangeColNdx = ds.getColumnIndex(\"Range\")\n\n#Initialize range sum that are need to calculate average range.\nrSum = 0.0\n\n#Cycle through each row and add to the sum\nfor row in range(ds.rowCount):\n\tr = ds.getValueAt(row, rangeColNdx)\n\trSum = rSum + r\n\n#Calculate the average range\t\nrBar = rSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = event.getSampleSize()\n\n#Lookup the D3 value\nif sampleSize < len(d4):\n\td4Value = d4[sampleSize]\nelse:\n\td4Value = d4[len(d4) - 1]\n\t\n#Calculate the Range UCL\nucl = d4Value * rBar\n\n#Return the new Range UCL back to the SPC module\nevent.setControlLimitValue(ucl)",""
"StdDev LCL","8","java.awt.Color[r=255,g=200,b=0]","#Standard Deviation LCL Calculation\n#Define the B3 factors array.\n#The B3 factors correspond to the sample size which starts at 6.\n#This is why element 0 through 5 of the array are 0.\nb3 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.030, 0.118, 0.185, 0.239, 0.284, 0.321, 0.354, 0.382, 0.406, 0.428, 0.448, 0.466, 0.482, 0.497, 0.510, 0.523, 0.534, 0.545, 0.555, 0.565]\n\n#Get the SPC data that the StdDev LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nsBarColNdx = ds.getColumnIndex(\"SBar\")\n\n#Initialize StdDev sum that are need to calculate average StdDev. \nsSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tsSum = sSum + ds.getValueAt(0, sBarColNdx)\n\n#Calculate the average StdDev\t\nsBar = sSum / ds.rowCount\n\t\t\n#Get the sample size.\t\nsampleSize = event.getSampleSize()\n\n#Lookup the B3 value\nif sampleSize < len(b3):\n\tb3Value = b3[sampleSize]\nelse:\n\tb3Value = b3[len(b3) - 1]\n\n#Calculate the StdDev LCL\t\nlcl = sBar * b3Value\n\n#Return the new StdDev LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"StdDev UCL","7","java.awt.Color[r=255,g=200,b=0]","#Standard Deviation UCL Calculation\n#Define the B4 factors array.\n#The B4 factors correspond to the sample size which starts at 6.\n#This is why element 0 through 5 of the array are 0.\nb4 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.970, 1.882, 1.815, 1.761, 1.716, 1.679, 1.646, 1.618, 1.594, 1.572, 1.552, 1.534, 1.518, 1.503, 1.490, 1.477, 1.466, 1.455, 1.445, 1.435]\n\n#Get the SPC data that the StdDev UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nsBarColNdx = ds.getColumnIndex(\"SBar\")\n\n#Initialize StdDev sum that are need to calculate average StdDev. \nsSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tsSum = sSum + ds.getValueAt(0, sBarColNdx)\n\n#Calculate the average StdDev\t\nsBar = sSum / ds.rowCount\n\t\t\n#Get the sample size.\t\nsampleSize = event.getSampleSize()\n\n#Lookup the B4 value\nif sampleSize < len(b4):\n\tb4Value = b4[sampleSize]\nelse:\n\tb4Value = b4[len(b4) - 1]\n\n#Calculate the StdDev UCL\t\nucl = sBar * b4Value\n\n#Return the new StdDev UCL back to the SPC module\nevent.setControlLimitValue(ucl)",""
"XBar LCL","2","java.awt.Color[r=255,g=200,b=0]","#XBar LCL Calculation\n#Define the A2 factors array.\n#The A2 factors correspond to the sample size which starts at 2.\n#This is why element 0 and 1 of the array are 0.\na2 = [0.0, 0.0, 1.880, 1.023, 0.729, 0.577, 0.483, 0.419, 0.373, 0.337, 0.308, 0.285, 0.266, 0.249, 0.235, 0.223, 0.212, 0.203, 0.194, 0.187, 0.180, 0.173, 0.167, 0.162, 0.157, 0.153]\n\n#Get the SPC data that the XBar LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nxBarColNdx = ds.getColumnIndex(\"XBar\")\nrangeColNdx = ds.getColumnIndex(\"Range\")\n\n#Initialize xBar and range sums that are need to calculate average xBar and range. \nxBarSum = 0.0\nrSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\txBarSum = xBarSum + ds.getValueAt(row, xBarColNdx)\n\trSum = rSum + ds.getValueAt(row, rangeColNdx)\n\n#Calculate the average xBar and range\t\nxDBar = xBarSum / ds.rowCount\nrBar = rSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = event.getSampleSize()\n\n#Lookup the A2 value\nif sampleSize < len(a2):\n\ta2Value = a2[sampleSize]\nelse:\n\ta2Value = a2[len(a2) - 1]\n\t\n#Calculate the xBar LCL\nlcl = xDBar - a2Value * rBar\n\n#Return the new xBar LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"XBar LSL","3","java.awt.Color[r=255,g=200,b=0]","",""
"XBar UCL","1","java.awt.Color[r=255,g=200,b=0]","#XBar UCL Calculation\n#Define the A2 factors array.\n#The A2 factors correspond to the sample size which starts at 2.\n#This is why element 0 and 1 of the array are 0. \na2 = [0.0, 0.0, 1.880, 1.023, 0.729, 0.577, 0.483, 0.419, 0.373, 0.337, 0.308, 0.285, 0.266, 0.249, 0.235, 0.223, 0.212, 0.203, 0.194, 0.187, 0.180, 0.173, 0.167, 0.162, 0.157, 0.153]\n\n#Get the SPC data that the XBar UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nxBarColNdx = ds.getColumnIndex(\"XBar\")\nrangeColNdx = ds.getColumnIndex(\"Range\")\n\n#Initialize xBar and range sums that are need to calculate average xBar and range. \nxBarSum = 0.0\nrSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\txBarSum = xBarSum + ds.getValueAt(row, xBarColNdx)\n\trSum = rSum + ds.getValueAt(row, rangeColNdx)\n\t\n#Calculate the average xBar and range\nxDBar = xBarSum / ds.rowCount\nrBar = rSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = event.getSampleSize()\n\n#Lookup the A2 value\nif sampleSize < len(a2):\n\ta2Value = a2[sampleSize]\nelse:\n\ta2Value = a2[len(a2) - 1]\n\t\n#Calculate the xBar UCL\nucl = xDBar + a2Value * rBar\n\n#Return the new xBar UCL back to the SPC module\nevent.setControlLimitValue(ucl)",""
"XBar USL","3","java.awt.Color[r=255,g=200,b=0]","",""
"c LCL","23","java.awt.Color[r=255,g=200,b=0]","#c LCL Calculation\nimport math\n\n#Get the SPC data that the c LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nnonconformitiesColNdx = ds.getColumnIndex(\"Total Nonconformities\")\n\n#Initialize nonconforming sums that are need to calculate np. \nnonconformitiesSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tnonconformitiesSum = nonconformitiesSum + ds.getValueAt(row, nonconformitiesColNdx)\n\t\t\n#Calculate the average np\ncBar = nonconformitiesSum / ds.rowCount\n\n#Calculate 3 sigma value\nsigma3 = 3 * math.sqrt(cBar)\n\n#Calculate the c LCL\nlcl = cBar - sigma3\nif lcl < 0:\n\tlcl = 0\n#Return the new c LCL back to the SPC module\nevent.setControlLimitValue(lcl)",""
"c UCL","22","java.awt.Color[r=255,g=200,b=0]","#c UCL Calculation\nimport math\n\n#Get the SPC data that the c UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nnonconformitiesColNdx = ds.getColumnIndex(\"Total Nonconformities\")\n\n#Initialize nonconforming sums that are need to calculate np. \nnonconformitiesSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tnonconformitiesSum = nonconformitiesSum + ds.getValueAt(row, nonconformitiesColNdx)\n\t\t\n#Calculate the average np\ncBar = nonconformitiesSum / ds.rowCount\n\n#Calculate 3 sigma value\nsigma3 = 3 * math.sqrt(cBar)\n\n#Calculate the c UCL\nucl = cBar + sigma3\n#Return the new c UCL back to the SPC module\nevent.setControlLimitValue(ucl)\n",""
"np LCL","20","java.awt.Color[r=255,g=200,b=0]","#np LCL Calculation\nimport system\nimport math\n\n#Get the SPC data that the np LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nnonconformingColNdx = ds.getColumnIndex(\"Total Nonconforming\")\n\n#Initialize nonconforming sums that are need to calculate np. \nnonconformingSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tnonconformingSum = nonconformingSum + ds.getValueAt(row, nonconformingColNdx)\n\t\t\n#Calculate the average np\nnpBar = nonconformingSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = ds.getValueAt(row, \"InspectedCount\")\n\n#Calculate 3 sigma value\npBar = npBar / sampleSize\nsigma3 = 3 * math.sqrt(npBar * (1 - pBar))\n\n#Calculate the np LCL\nlcl = npBar - sigma3\nif lcl < 0:\n\tlcl = 0\n\t\n#Return the new np LCL back to the SPC module\nevent.setControlLimitValue(lcl)\n",""
"np UCL","19","java.awt.Color[r=255,g=200,b=0]","#np UCL Calculation\nimport math\n\n#Get the SPC data that the np UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \nnonconformingColNdx = ds.getColumnIndex(\"Total Nonconforming\")\n\n#Initialize nonconforming sums that are need to calculate np. \nnonconformingSum = 0.0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tnonconformingSum = nonconformingSum + ds.getValueAt(row, nonconformingColNdx)\n\t\t\n#Calculate the average np\nnpBar = nonconformingSum / ds.rowCount\n\n#Get the sample size.\nsampleSize = ds.getValueAt(row, \"InspectedCount\")\n\n#Calculate 3 sigma value\npBar = npBar / sampleSize\nsigma3 = 3 * math.sqrt(npBar * (1 - pBar))\n\n#Calculate the np UCL\nucl = npBar + sigma3\n#Return the new np UCL back to the SPC module\nevent.setControlLimitValue(ucl)\n",""
"p LCL","17","java.awt.Color[r=255,g=200,b=0]","#p LCL Calculation\nimport system\nimport math\n\n#Get the SPC data that the p LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \ninspectedColNdx = ds.getColumnIndex(\"InspectedCount\")\nnonconformingColNdx = ds.getColumnIndex(\"Total Nonconforming\")\n\n#Initialize inspected and nonconforming sums that are need to calculate p. \ninspectedSum = 0.0\nnonconformingSum = 0.0\n\n#Track the max and min of inspected items during the samplings \nminSampleSize = 9999999\nmaxSampleSize = 0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\tinspectedSum = inspectedSum + inspCnt\n\tnonconformingSum = nonconformingSum + ds.getValueAt(row, nonconformingColNdx)\n\tif inspCnt < minSampleSize:\n\t\tminSampleSize = inspCnt\n\tif inspCnt > maxSampleSize:\n\t\tmaxSampleSize = inspCnt\t\n\t\n#Calculate the average p\npBar = nonconformingSum / inspectedSum\n\n#Determine the variation in sample size.\nvariation = (maxSampleSize - minSampleSize) / maxSampleSize;\n\n#If the sample size variation is less than 20%, then use the average sample size else use the min sample size\nif variation < 0.20:\n\tavgSampleSize = inspectedSum / ds.rowCount\n\t#Calculate 3 sigma value\n\tsigma3 = 3 * math.sqrt(pBar * (1 - pBar) / avgSampleSize)\n\t#Calculate the p LCL\n\tlcl = pBar - sigma3\n\t#Return the new p LCL back to the SPC module\n\tevent.setControlLimitValue(lcl)\nelse:\n\t#Calculate Outer LCL value based on the min sample size\n\touterSigma3 = 3 * math.sqrt(pBar * (1 - pBar) / minSampleSize)\n\touterLCL = pBar - outerSigma3\n\t\n\t#Calculate Inner LCL value based on the max sample size\n\tinnerSigma3 = 3 * math.sqrt(pBar * (1 - pBar) / maxSampleSize)\n\tinnerLCL = pBar - innerSigma3\n\n\t#Get the columnn indexes within the SPC data \n\tpColNdx = ds.getColumnIndex(\"p\")\n\tpLCLColNdx = ds.getColumnIndex(\"p LCL\")\n\t\n\t#Cycle through all points again\n\tfor row in range(ds.rowCount):\n\t\tp = ds.getValueAt(row, pColNdx)\n\t\tif p > innerLCL and p < outerLCL:\n\t\t\t#Because the point is between the inner and outer limits, calculate the exact limits for this point\n\t\t\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\t\t\tpLCL = p - 3 * math.sqrt(p * (1 - p) / inspCnt)\n\t\t\t#Save it back to the SPC data for this point\n\t\t\tevent.setValue(row, pLCLColNdx, pLCL)\n\t\telse:\n\t\t\t#Otherwise, just use the outer limit\n\t\t\tevent.setValue(row, pLCLColNdx, outerLCL)\n\t\t\t\t\t\t\n\t#Return the new p LCL back to the SPC module\n\tevent.setControlLimitValue(outerLCL)\t\t\t\n",""
"p UCL","16","java.awt.Color[r=255,g=200,b=0]","#p UCL Calculation\nimport math\n\n#Get the SPC data that the p UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \ninspectedColNdx = ds.getColumnIndex(\"InspectedCount\")\nnonconformingColNdx = ds.getColumnIndex(\"Total Nonconforming\")\n\n#Initialize inspected and nonconforming sums that are need to calculate p. \ninspectedSum = 0.0\nnonconformingSum = 0.0\n\n#Track the max and min of inspected items during the samplings \nminSampleSize = 9999999\nmaxSampleSize = 0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\tinspectedSum = inspectedSum + inspCnt\n\tnonconformingSum = nonconformingSum + ds.getValueAt(row, nonconformingColNdx)\n\tif inspCnt < minSampleSize:\n\t\tminSampleSize = inspCnt\n\tif inspCnt > maxSampleSize:\n\t\tmaxSampleSize = inspCnt\t\n\t\n#Calculate the average p\npBar = nonconformingSum / inspectedSum * 100.0\n\n#Determine the variation in sample size.\nvariation = (maxSampleSize - minSampleSize) / maxSampleSize;\n\n#If the sample size variation is less than 20%, then use the average sample size else use the min sample size\nif variation < 0.20:\n\tavgSampleSize = inspectedSum / ds.rowCount\n\t#Calculate 3 sigma value\n\tsigma3 = 3 * math.sqrt(pBar * (100.0 - pBar) / avgSampleSize)\n\t#Calculate the p UCL\n\tucl = pBar + sigma3\n\t#Return the new p UCL back to the SPC module\n\tevent.setControlLimitValue(ucl)\nelse:\n\t#Calculate Outer UCL value based on the min sample size\n\touterSigma3 = 3 * math.sqrt(pBar * (100.0 - pBar) / minSampleSize)\n\touterUCL = pBar + outerSigma3\n\t\n\t#Calculate Inner UCL value based on the max sample size\n\tinnerSigma3 = 3 * math.sqrt(pBar * (100.0 - pBar) / maxSampleSize)\n\tinnerUCL = pBar + innerSigma3\n\n\t#Get the columnn indexes within the SPC data \n\tpColNdx = ds.getColumnIndex(\"p\")\n\tpUCLColNdx = ds.getColumnIndex(\"p UCL\")\n\t\n\t#Cycle through all points again\n\tfor row in range(ds.rowCount):\n\t\tp = ds.getValueAt(row, pColNdx)\n\t\tif p > innerUCL and p < outerUCL:\n\t\t\t#Because the point is between the inner and outer limits, calculate the exact limits for this point\n\t\t\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\t\t\tpUCL = p + 3 * math.sqrt(p * (1 - p) / inspCnt)\n\t\t\t#Save it back to the SPC data for this point\n\t\t\tevent.setValue(row, pUCLColNdx, pUCL)\n\t\telse:\n\t\t\t#Otherwise, just use the outer limit\n\t\t\tevent.setValue(row, pUCLColNdx, outerUCL)\n\t\t\t\n\t#Return the new p LCL back to the SPC module\n\tevent.setControlLimitValue(outerUCL)\n",""
"u LCL","26","java.awt.Color[r=255,g=200,b=0]","#u LCL Calculation\nimport math\n\n#Get the SPC data that the u LCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \ninspectedColNdx = ds.getColumnIndex(\"InspectedCount\")\nnonconformitiesColNdx = ds.getColumnIndex(\"Total Nonconformities\")\n\n#Initialize inspected and nonconforming sums that are need to calculate u. \ninspectedSum = 0.0\nnonconformitiesSum = 0.0\n\n#Track the max and min of inspected items during the samplings \nminSampleSize = 9999999\nmaxSampleSize = 0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\tinspectedSum = inspectedSum + inspCnt\n\tnonconformitiesSum = nonconformitiesSum + ds.getValueAt(row, nonconformitiesColNdx)\n\tif inspCnt < minSampleSize:\n\t\tminSampleSize = inspCnt\n\tif inspCnt > maxSampleSize:\n\t\tmaxSampleSize = inspCnt\t\n\t\n#Calculate the average u\nuBar = nonconformitiesSum / inspectedSum * 100.0\n\n#Determine the variation in sample size.\nvariation = (maxSampleSize - minSampleSize) / maxSampleSize;\n\n#If the sample size variation is less than 20%, then use the average sample size else use the min sample size\nif variation < 0.20:\n\tavgSampleSize = inspectedSum / ds.rowCount\n\t#Calculate 3 sigma value\n\tsigma3 = 3 * math.sqrt(uBar / avgSampleSize)\n\t#Calculate the u LCL\n\tlcl = uBar - sigma3\n\t#Return the new u LCL back to the SPC module\n\tevent.setControlLimitValue(lcl)\nelse:\n\t#Calculate Outer LCL value based on the min sample size\n\touterSigma3 = 3 * math.sqrt(uBar / minSampleSize)\n\touterLCL = uBar - outerSigma3\n\t\n\t#Calculate Inner LCL value based on the max sample size\n\tinnerSigma3 = 3 * math.sqrt(uBar / maxSampleSize)\n\tinnerLCL = uBar - innerSigma3\n\n\t#Get the columnn indexes within the SPC data \n\tuColNdx = ds.getColumnIndex(\"uBar\")\n\tuLCLColNdx = ds.getColumnIndex(\"u LCL\")\n\t\n\t#Cycle through all points again\n\tfor row in range(ds.rowCount):\n\t\tu = ds.getValueAt(row, uColNdx)\n\t\tif u > innerLCL and u < outerLCL:\n\t\t\t#Because the point is between the inner and outer limits, calculate the exact limits for this point\n\t\t\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\t\t\tuLCL = u - 3 * math.sqrt(u / inspCnt)\n\t\t\t#Save it back to the SPC data for this point\n\t\t\tevent.setValue(row, uLCLColNdx, uLCL)\n\t\telse:\n\t\t\t#Otherwise, just use the outer limit\n\t\t\tevent.setValue(row, uLCLColNdx, outerLCL)\n\t\t\t\n\t#Return the new u LCL back to the SPC module\n\tevent.setControlLimitValue(outerLCL)\n",""
"u UCL","25","java.awt.Color[r=255,g=200,b=0]","#u UCL Calculation\nimport math\n\n#Get the SPC data that the u UCL will be calculated for\nds = event.getData()\n\n#Get the columnn indexes within the SPC data \ninspectedColNdx = ds.getColumnIndex(\"InspectedCount\")\nnonconformitiesColNdx = ds.getColumnIndex(\"Total Nonconformities\")\n\n#Initialize inspected and nonconforming sums that are need to calculate u. \ninspectedSum = 0.0\nnonconformitiesSum = 0.0\n\n#Track the max and min of inspected items during the samplings \nminSampleSize = 9999999\nmaxSampleSize = 0\n\n#Cycle through each row and add to the sums\nfor row in range(ds.rowCount):\n\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\tinspectedSum = inspectedSum + inspCnt\n\tnonconformitiesSum = nonconformitiesSum + ds.getValueAt(row, nonconformitiesColNdx)\n\tif inspCnt < minSampleSize:\n\t\tminSampleSize = inspCnt\n\tif inspCnt > maxSampleSize:\n\t\tmaxSampleSize = inspCnt\t\n\t\n#Calculate the average u\nuBar = nonconformitiesSum / inspectedSum * 100.0\n\n#Determine the variation in sample size.\nvariation = (maxSampleSize - minSampleSize) / maxSampleSize;\n\n#If the sample size variation is less than 20%, then use the average sample size else use the min sample size\nif variation < 0.20:\n\tavgSampleSize = inspectedSum / ds.rowCount\n\t#Calculate 3 sigma value\n\tsigma3 = 3 * math.sqrt(uBar / avgSampleSize)\n\t#Calculate the u UCL\n\tucl = uBar + sigma3\n\t#Return the new u UCL back to the SPC module\n\tevent.setControlLimitValue(ucl)\nelse:\n\t#Calculate Outer UCL value based on the min sample size\n\touterSigma3 = 3 * math.sqrt(uBar / minSampleSize)\n\touterUCL = uBar + outerSigma3\n\t\n\t#Calculate Inner UCL value based on the max sample size\n\tinnerSigma3 = 3 * math.sqrt(uBar / maxSampleSize)\n\tinnerUCL = uBar + innerSigma3\n\n\t#Get the columnn indexes within the SPC data \n\tuColNdx = ds.getColumnIndex(\"uBar\")\n\tuUCLColNdx = ds.getColumnIndex(\"u UCL\")\n\t\n\t#Cycle through all points again\n\tfor row in range(ds.rowCount):\n\t\tu = ds.getValueAt(row, uColNdx)\n\t\tif u > innerUCL and u < outerUCL:\n\t\t\t#Because the point is between the inner and outer limits, calculate the exact limits for this point\n\t\t\tinspCnt = ds.getValueAt(row, inspectedColNdx)\n\t\t\tuUCL = u + 3 * math.sqrt(u / inspCnt)\n\t\t\t#Save it back to the SPC data for this point\n\t\t\tevent.setValue(row, uUCLColNdx, uUCL)\n\t\telse:\n\t\t\t#Otherwise, just use the outer limit\n\t\t\tevent.setValue(row, uUCLColNdx, outerUCL)\n\t\t\t\n\t#Return the new u UCL back to the SPC module\n\tevent.setControlLimitValue(outerUCL)\n",""

To import control limits, right-click anywhere on the control limit table and select the Import menu item. A dialog box as shown below will appear to allow selection of a comma separated values (csv) formatted file.

What is control limit in SPC?

What Are Control Limits? Control limits are the standard deviations located above and below the center line of an SPC chart. If the data points are within the control limits, it indicates that the process is in control (common cause variation).

What are control limits based on?

Control limits are based on process variation. Specification limits are based on customer requirements. A process can be in control and yet not be capable of meeting specifications.

What limits will be used for statistical process control?

Control limits are typically set to +3 standard deviations from the mean. For variable data, two control charts are used to evaluate the characteristic: one chart to show the stability of the process mean and another to describe the stability of the variation of individual data values.

When using SPC for process control What are the control limits you want the process to stay within?

Shewhart found that control limits placed at three standard deviations from the mean in either direction provide an economical tradeoff between the risk of reacting to a false signal and the risk of not reacting to a true signal - regardless the shape of the underlying process distribution.