專業級 Dowel Pin 公差計算與檢驗標準工具:ISO 2338 m6/h7 全自動紀錄表
Dowel Pin(定位銷)加工現場,尺寸公差只要算錯一次,產品報廢、客訴就跟著來。我自己就遇過一次檢驗紀錄填錯,工程師現場一整天沒人敢下料,整個產線卡死。配合 ISO 2338、m6/h7 這種公差數據,本來就很繁瑣,尤其多人共用一份表格時,更容易有錯誤或遺漏。別再用手抄,這種流程一定要標準化、可追蹤。
完整複製以下專業級 Apps Script 工具
這工具能讓你直接在線上輸入 Dowel Pin 檢驗數據,自動判斷合格/不合格,還能回查歷史檢驗紀錄、現場即時顯示統計結果。
// === Dowel Pin 公差檢驗標準化工具 ===
// 主入口,提供網頁 UI
function doGet(e) {
var html = [];
html.push('<html><head><meta charset="UTF-8">');
html.push('<title>Dowel Pin 公差檢驗記錄工具</title>');
html.push('<style>body{font-family:sans-serif;}'
+'.box{max-width:450px;margin:32px auto;padding:28px;'
+'background:#f4f7fa;border-radius:8px;box-shadow:0 2px 12px #0001}'
+'input,select{padding:7px;margin:7px 0;width:98%}'
+'.btn{padding:8px 22px;background:#0073c8;color:#fff;border:none;'
+'border-radius:3px;cursor:pointer;font-weight:700;}'
+'.btn:hover{background:#00548f}'
+'table{width:100%;margin-top:15px;}th,td{padding:4px 8px}'
+'th{background:#e3e8ee;}tr:nth-child(even){background:#f8fafc;}'
+'.fail{color:#c00;font-weight:bold;}.ok{color:#097d2b;font-weight:bold}'
+'</style></head><body>');
html.push('<div class="box">');
html.push('<h2>Dowel Pin 公差檢驗自動化</h2>');
html.push('<form id="f">');
html.push('Dowel Pin 直徑 (mm): <input name="diameter" type="number" step="0.01" required><br>');
html.push('長度 (mm): <input name="length" type="number" step="0.1" required><br>');
html.push('配合公差: <select name="tolerance">'
+'<option value="m6">m6</option>'
+'<option value="h7">h7</option></select><br>');
html.push('實際測量值 (mm): <input name="measure" type="number" step="0.001" required><br>');
html.push('<button class="btn" type="button" onclick="submitF()">送出檢驗</button>');
html.push('</form>');
html.push('<div id="result"></div>');
html.push('<button class="btn" style="margin-top:14px;" onclick="refreshLog()">查看歷史紀錄</button>');
html.push('<div id="log"></div>');
html.push('</div>');
// js: 非同步送出表單
html.push('<script>'
+'function submitF(){'
+'var fd=new FormData(document.getElementById("f"));'
+'fetch("?action=submit",{method:"POST",body:fd})'
+'.then(r=>r.json()).then(showRes);}'
+'function showRes(obj){'
+'var res=document.getElementById("result");'
+'if(obj.status=="ok"){'
+'res.innerHTML="<span class=\'ok\'>合格。</span>";'
+'}else{res.innerHTML="<span class=\'fail\'>不合格!</span>";}'
+'res.innerHTML+=" 檢驗範圍: "+obj.range;'
+'refreshLog();'
+'}'
+'function refreshLog(){'
+'fetch("?action=log").then(r=>r.json()).then(function(data){'
+'var h="<table><tr><th>時間</th><th>直徑</th><th>長</th><th>公差</th><th>實測</th><th>判定</th></tr>";'
+'data.forEach(function(row){'
+'h+="<tr><td>"+row.time+"</td><td>"+row.dia+"</td><td>"+row.len+"</td><td>"+row.tol+"</td><td>"+row.val+"</td><td class=\'"+(row.ok?"ok":"fail")+"'>"+(row.ok?"合格":"不合格")+"</td></tr>";'
+'});'
+'h+="</table>";document.getElementById("log").innerHTML=h;});}'
+'refreshLog();'
+'</script></body></html>');
return HtmlService.createHtmlOutput(html.join(''));
}
// 解析 POST 請求,處理表單送出
function doPost(e){
var action = e.parameter.action || "";
if(action=="submit"){
var dia = parseFloat(e.parameter.diameter);
var len = parseFloat(e.parameter.length);
var tol = e.parameter.tolerance;
var val = parseFloat(e.parameter.measure);
var rng = getRange(dia, tol); // 查 ISO 2338 標準表
var ok = (val>=rng[0] && val<=rng[1]);
logToSheet([new Date(), dia, len, tol, val, ok?"OK":"NG", rng[0], rng[1]]);
return ContentService.createTextOutput(JSON.stringify({
status: ok?"ok":"fail",
range: rng[0]+" ~ "+rng[1]+" mm"
})).setMimeType(ContentService.MimeType.JSON);
}
// TODO: 其他 action
return ContentService.createTextOutput("err");
}
// 取得 ISO 2338 m6/h7 公差範圍,表格懶得查就寫死(範例)
function getRange(dia, tol){
// 部分典型數據,真現場要查官方手冊
var table = {
"m6": {3:[3.004,3.012],5:[5.004,5.012],8:[8.004,8.014]},
"h7": {3:[3,3.010],5:[5,5.015],8:[8,8.018]}
};
var dia2 = [3,5,8].reduce(function(a,b){
return Math.abs(b-dia)<Math.abs(a-dia)?b:a;
},3);
var t=table[tol][dia2];
return t||[0,0]; // 找不到就返回無效範圍
}
// 寫入檢驗記錄到 Google Sheet
function logToSheet(arr){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("DowelLog") || ss.insertSheet("DowelLog");
if(sh.getLastRow()==0){
sh.appendRow(["時間","直徑","長度","公差","實測值","合格","下限","上限"]);
}
sh.appendRow(arr);
}
// 提供歷史檢驗紀錄(最新10筆)
function doGetLog(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("DowelLog");
var out = [];
if(sh){
var data = sh.getRange(2,1,Math.max(0,sh.getLastRow()-1),8).getValues();
data.slice(-10).reverse().forEach(function(r){
out.push({time:Utilities.formatDate(new Date(r[0]),"GMT+8","MM/dd HH:mm"),
dia:r[1],len:r[2],tol:r[3],val:r[4],ok:r[5]=="OK"});
});
}
return out;
}
// 處理 log 查詢 action
function doGet(e){
if(e && e.parameter.action=="log"){
return ContentService.createTextOutput(
JSON.stringify(doGetLog())
).setMimeType(ContentService.MimeType.JSON);
}
// 主頁
return doGet({});
}
標準化部署流程完整教學
跟著步驟,每一步都檢查仔細,確保專案資料安全無誤。
- 步驟一:開啟 Apps Script 編輯器
開啟你的 Google 試算表,上方選單找到「擴充功能」,點進去再選「Apps Script」。這個選項大概在最上方選單列中間。點完會彈出新分頁,直接進到 Apps Script 編輯器畫面。
⚠️ 我自己公司帳號第一次用就被擋過,有些企業帳戶權限很嚴,一定要用有權限的 Google 帳戶。視窗如果沒跳出,也要記得檢查瀏覽器有沒有擋住彈出視窗。
- 步驟二:清空並貼上程式碼
先在編輯器正中央那塊白色區域,按 Ctrl+A 全選,再按 Delete 刪掉原本的內容。然後直接把上面整段程式碼複製、貼上(Ctrl+V)。
⚠️ 我之前就發生過沒全選導致舊程式殘留,部署時報一堆錯,切記一定要全部清空!
- 步驟三:儲存專案
按左上方工具列的「儲存」磁碟片圖示(或直接按 Ctrl+S),第一次會跳出要你輸入專案名稱,隨便取個名字就好,比如「DowelPinTool」。
⚠️ 忘記儲存就部署,常常會導致程式沒更新,這點新手最容易踩雷。
- 步驟四:部署為網頁應用程式
右上角找到藍色的「部署」按鈕,點下去選「新增部署作業」。會跳出部署設定小視窗。
1. 先點小齒輪選「網頁應用程式」
2. 執行身分選「我」
3. 誰可以存取務必選「任何人」
4. 最後點「部署」
⚠️ 我有前輩踩過「誰可以存取」沒開「任何人」導致別人都看不到工具,一堆人問問題還找不到錯。
- 步驟五:處理授權警告
部署完會自動跳授權視窗,依序點下去就好。大多數人會遇到紅色大警告「Google 尚未驗證這個應用程式」,點左下「進階」再點「前往 XXX(不安全)」最後點「允許」。
⚠️ 這真的不是病毒,也不是你被駭,這只是因為是你自己寫的程式沒經過 Google 官方審核,大家都會遇到。
- 步驟六:取得網址,開始使用
授權完後,畫面會顯示一個網址(長得像 https://script.google.com/...),把這個網址複製下來,在瀏覽器打開,就會進到公差檢驗工具。
⚠️ 很多人部署完發現改了程式卻沒變,其實只要有改程式碼,一定要重新部署才會生效。
⚠️ 關於紅色授權警告畫面怎麼看?
只要你自己寫的 Apps Script 工具,不論多小都會跳紅色授權警告,Google 只是告訴你「這套程式沒經過官方審核」,而不是代表你的帳號不安全。這時只要點「進階」,繼續授權即可。除非你複製了來源可疑的程式,否則正常用自己寫、自己公司用的工具,看到紅框不要慌。
生產現場、品管室的最佳化應用場景
早班檢驗人員每天開工,現場直接用平板打開網址,輸入 Dowel Pin 尺寸和測量值,現場直接知道有沒有過標準範圍。過去常有檢驗紀錄紙掉了、數據填錯、寫太潦草被退件的案例,用這工具直接電子記錄,大家都能線上即時查閱。另一種情境:遇到 QC 主管追查過往某尺寸的良率,只要點一鍵查看歷史檢驗,快速列印給審查,省去一堆查帳本、翻手寫紀錄的麻煩。