{"id":24895,"date":"2017-09-17T09:51:02","date_gmt":"2017-09-17T07:51:02","guid":{"rendered":"http:\/\/help.qualiware.it\/qw-help\/?p=24895"},"modified":"2021-10-26T21:52:52","modified_gmt":"2021-10-26T19:52:52","slug":"grafico-calcolo-e-visualizzazione-cpk","status":"publish","type":"post","link":"https:\/\/help.qualiware.it\/qw-help\/grafico-calcolo-e-visualizzazione-cpk\/","title":{"rendered":"Grafico: calcolo e visualizzazione CPK"},"content":{"rendered":"<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">' Il seguente snippet deve essere inserito in un oggetto \"Procedura\", ed effettua il calcolo del CPK a partire da un array di misure, riportando poi i valori su un grafico.\r\n' Devono essere passati 5 parametri\r\n' Parameter1: oggetto \"Grafico\"\r\n' Parameter2: Array monodimensionale contenente le misure\r\n' Parameter3: Valore inferiore della misura da spacifica\r\n' Parameter4: Valore superiore della misura da spacifica\r\n' Parameter5: Valore del CPK calcolato e restituito dalla procedura al chiamante\r\n\r\nDim vmin as Double = Parameter3  ' Valore nominale\r\nDim vmax as Double = Parameter4  ' Tolleranza da specifica\r\n\r\nDim misure as DBArray=Parameter2\r\nDim Chart=Parameter1\r\n\r\n' Calcola la media delle misure\r\ndim i as integer\r\ndim tot as double=0\r\ndim min_mis as double=9999999\r\ndim max_mis as double=-9999999\r\nfor i=1 to misure.size\r\n    tot+=misure(i)\t\r\n  \r\n  if min_mis&gt;misure(i)\r\n     min_mis=misure(i)\r\n  end if\r\n  \r\n  if max_mis&lt;misure(i)\r\n     max_mis=misure(i)\r\n  end if\r\nnext\r\n\r\ndim mu as double=tot\/misure.size ' media delle misure\r\n\r\n' Calcola la deviazione standard\r\ntot=0\r\nfor i=1 to misure.size\r\n    tot+=(misure(i)-mu)^2\r\nnext\r\n\r\ndim sigma as double=math.sqrt(tot\/(misure.size-1)) ' Deviazione standard delle misure\r\n\r\n' Trasforma le misure in istogrammi, dividendo il range di misure in segmenti e calcolando la frequenza \r\ndim bars as new dbarray(0,0,0,0,0,0)\r\ndim bar_amp as double=(max_mis-min_mis)\/bars.size\r\ndim b as integer\r\nfor i=1 to misure.size\r\n    for b=0 to bars.size-1\r\n      if misure(i)&gt;=min_mis+bar_amp*b and misure(i)&lt;=min_mis+bar_amp*(b+1)\r\n       bars(b+1)+=1\r\n       exit for\r\n    end if\r\n  next\r\nnext\r\n\r\ndim Series as new dbarray\r\nseries.Add(New DBArray(\"X\", \"Gauss\", \"Misure\")) ' Array delle serie: il primo elemento \u00e8 la testata\r\nseries.Add(New DBArray(vmin,null,0)) ' Valore minimo\r\nseries.Add(New DBArray(vmax,null,0))' Valore minimo\r\n\r\n' Aggiunge la frequenza alla serie di misure\r\nfor b=1 to bars.size\r\n    series.add(new dbarray(min_mis+((b-1)+0.5)*bar_amp,null,bars(b)\/misure.size)) ' La X \u00e8 il punto centrale, la Y \u00e8 la frequenza     \r\nnext\t\r\n\r\n' Assegna i punti della gaussiana teorica\r\nDim x as Double\r\n\r\nif sigma&gt;0\r\n   for x=mu-4*sigma to mu+4*sigma step sigma\/4\r\n       series.Add(New DBArray(x,math.exp(-(1\/2) * ((x - mu)\/sigma)^2)\/(sigma * math.sqrt(2*math.pi)),null))\r\n   next\r\nend if\r\n\r\n' Assegna le serie al grafico\r\nChart.SetSeries(series)\r\n\r\n' Calcola il CPK\r\ndim CPk as double\r\nCPk=Min((vmax-mu)\/(3*sigma),(mu-vmin)\/(3*sigma))\r\n\r\n' Assegna i settaggi del grafico\r\nDim s As String\r\n\r\ns = \"title:  'Media: \"+ltrim(str(mu,10,5))+\" Sigma: \"+ltrim(str(sigma,10,5))+\" CPK: \"+ltrim(str(cpk,10,2)).Replace(\",\", \".\")+\"',\"+\r\n  \"description: '',\"+\r\n  \"enableAnimations: true,\" +\r\n \"showLegend: false,\" +\r\n\"padding: { left: 5, top: 5, right: 5, bottom: 5 },\" +\r\n\"titlePadding:  { left: 0, top: 10, right: 0, bottom: 10 },\" +\r\n\"xAxis:\" +\r\n  \"{\" +\r\n    \"dataField: 'X',\" +\r\n    \"unitInterval: 'auto',\" +\r\n    \"axisSize: 'auto',\"+\r\n    \"tickMarks: {\" +\r\n      \"visible: true,\" +\r\n      \"interval: 'auto',\" +\r\n      \"color:  '#BCBCBC'\" +\r\n    \"},\" +\r\n    \"gridLines: {\" +\r\n      \"visible: true,\" +\r\n      \"interval: 'auto',\" +\r\n      \"color: '#BCBCBC'\" +\r\n    \"},\" +\r\n    \"bands:\"+\r\n          \"[\"+\r\n          \" { minValue: \"+str(vmin,10,5).Replace(\",\", \".\")+\", maxValue: \"+str(vmax,10,5).Replace(\",\", \".\")+\", fillColor: 'green', opacity: 0.05 },\"+\r\n          \" { minValue: \"+str(mu-3*sigma,10,5).Replace(\",\", \".\")+\", maxValue: \"+str(mu+3*sigma,10,5).Replace(\",\", \".\")+\", fillColor: 'green', opacity: 0.1 }\"+\r\n          \"]\"+\t\t\r\n  \"},\" +\r\n\"valueAxis:\" +\r\n\"{\" +\r\n  \"visible: true,\" +\r\n  \"title:  { text: '' },\" +\r\n  \"labels:  { visible: false },\" +\r\n  \"tickMarks :  { visible: false}\" +\r\n\"},\" +\r\n\"colorScheme: 'scheme06',\" +\r\n\"columnSeriesOverlap: false,\"+\r\n\"seriesGroups:\" +\r\n  \"[\" +\r\n    \"{\" +\r\n      \"type: 'line',\" +\t\t\t\r\n      \"series: [\" +\r\n          \"{ dataField: 'Gauss', displayText: 'Normal',lineColor: 'red' }\" +\r\n        \"]\" +\r\n    \"},\" +\r\n    \"{\" +\r\n      \"type: 'column',\" +\r\n      \"columnsGapPercent: 75,\"+\r\n      \"series: [\" +\r\n          \"{ dataField: 'Misure', displayText: 'misure',lineColor: 'red' }\" +\r\n        \"]\" +\r\n    \"}\" +\r\n  \"]\"\r\n  \r\nChart.Settings=s\r\n\r\nParameter5=CPK<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8216; Il seguente snippet deve essere inserito in un oggetto &#8220;Procedura&#8221;, ed effettua il calcolo del CPK a partire da un array di misure, riportando poi i valori su un grafico. &#8216; Devono essere passati 5 parametri &#8216; Parameter1: oggetto &#8220;Grafico&#8221; &#8216; Parameter2: Array monodimensionale contenente le misure &#8216; Parameter3: Valore inferiore della misura da&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ngg_post_thumbnail":0,"footnotes":""},"categories":[65],"tags":[71],"acf":[],"_links":{"self":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/24895"}],"collection":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/comments?post=24895"}],"version-history":[{"count":0,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/24895\/revisions"}],"wp:attachment":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/media?parent=24895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/categories?post=24895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/tags?post=24895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}