アプリケーションノート 6329

ハイサイド電流検出アンプの過電流を高精度で計算する方法

筆者: Don Corey

要約: 最近、あるエンジニアが5%以内の高精度の過電流検出スレッショルドを備えた20A負荷のハイサイド監視を提供するソリューションを求めていました。容易に利用可能な既製品のソリューションで、精度が5%以下で低い値の検出抵抗を使用することができるものはありません。なぜ5%なのか? 10%ではだめなのか? 20Aの負荷の場合、10%の電流制限によるトリップスレッショルドの範囲は18A (min)から 22A (max)になり、これは許容可能な範囲より大幅に広いマージンになります。5%をそこまで困難にしている要因は何でしょう?このアプリケーションノートでは5%の精度を達成するための課題について解説し、ハイサイド電流検出アンプの過電流保護方式で必要とされる精度を提供するソリューションを示します。

概要

電流検出アンプ(CSA)は各種のトポロジーを使って設計することが可能で、その中の2つを図1および図2に示します。図1で、オペレーショナルアンプ(オペアンプ)は電流検出シャント抵抗の両端に生じる差動電圧の増幅に使用される差動アンプとして構成されています。ローサイド電流検出を制限付きで使用することができるアプリケーションもありますが、それらの場合についてこのアプリケーションノートでは解説しません。ローサイド電流検出とハイサイド電流検出の比較の詳細については、マキシムのアプリケーションノート746 「High-Side Current-Sense Measurement: Circuits and Principles」を参照してください。

差動アンプトポロジーの主な制限は、差動利得およびコモンモード利得誤差を設定するR1とR4の抵抗比の組み合わせです。2つの式によって回路の精度誤差の主な原因が規定されます。式1図1の利得を表す式で、式2はコモンモード利得誤差を詳細に示します。式3は図1のVOUTの計算に使用します。

Equation 01. (Eq. 1)

Equation 02. (Eq. 2)

VOUT = Gd × ILOAD × RSENSE + Vcm × Gcm (Eq. 3 V supply in Figure 1 represents VCM)

R1~R4に1%抵抗を使用し、ワーストケースの許容範囲で誤差を計算した場合、電流測定値の全体的誤差は5%以上になります。結果として、より高コストで許容誤差の少ない抵抗が必要になります。この方式の主な欠点は、より高いコモンモード電圧に対する誤差感受性を克服するために、厳格な許容誤差を備えた高精度の抵抗を使用してR4/R3とR2/R1の比の値を設定する必要があることです。

図1. オペアンプベースの差動アンプ 図1. オペアンプベースの差動アンプ

図2は、CSAを設計するためのもう1つの一般的なトポロジーを示します。この方式の場合も、やはり電流検出シャント抵抗を使用して負荷電流を検知します。その後、検出抵抗の両端に生じる電圧がR1の両端に反映され、この電流がROUTに伝達されます。この場合のCSA電圧出力は、次のようになります。

Equation 03b.

この式を変形すると、以下が得られます。

Equation 03b.

この構成では、利得は単純にROUT/R1の比です。製造工程での調整によって、比の誤差を容易に除去することが可能です。このトポロジーは、図1に示した差動アンプ方式で重要になる、厳密にマッチングされた抵抗比の要件を大幅に緩和します。その結果、前述の方式で問題となったコモンモード電圧誤差を大幅に低減することができます。誤差を最小限に抑える上で、R2 = R1であることは入力バイアス電流から生じるオフセット誤差の相殺に役立ちます。

  販売代理店向け単価はございません 以下から見積もりをご請求ください: Model N "); $("#inventoryDetails").removeClass("col-sm-6"); $("#inventoryDetails").addClass("col-sm-12"); } else { var partNumber = encodeURIComponent(part_no); var htmlBulkOrder = "

" ; $("#buyQuantityDiv").html(htmlBulkOrder); } } } if( sampleJson.canQuote != true ) { $("#requestQuoteDiv").hide(); } if(sampleJson.leadTime == 0 && !(sampleJson.cf == "true" && sampleJson.carrierType == "Tape") ){ if ($('#requestQuoteDiv').css('display') != "block") { $('#forLeadtime').removeClass('hidden'); } //$('#quantity5000').show(); } if(maxInventory == 0) { $("#stdleadTime").html('予想リードタイム'); } if(params == 'Quote'){ $('#rowDiv').addClass("hidden"); $("#quoteRow").removeClass("hidden"); $("#nonQuote").addClass("hidden"); } else { if(leadTime != "" && leadTime != "undefined" && (parseInt(leadTime) > 0 && parseInt(leadTime) < 98) || parseInt(leadTime) == 0 ){ }else { if(userType != "DISTRIBUTOR") { $('#rowDiv div:not("#inventoryDetails,#requestQuoteDiv, #requestQuoteDiv2")').hide(); if($(".requestQuoteFromBuyCart").css('display') == 'none'){ $("#contactSales").show(); } } } } $('#addToCartP').modal('show'); if (userType == "EMPLOYEE" ) { $(document).find('#qtytobuyText').hide(); $(document).find('#product-quantity').hide(); $(document).find('#addToCartButton').hide(); $(document).find('#employeeMsg').show(); } if(sampleJson.cf == "true" && sampleJson.carrierType == "Tape" && maxInventory == 0){ $("#priceBreak").remove(); $("#orderingquotetext").remove(); $("#quantity5000").remove(); $('#useExistingQuote').remove(); $('#borderid').remove(); $('#inventoryDetails').removeClass('col-sm-6'); $('#inventoryDetails').addClass('col-sm-12'); $('#inventoryDetails').css('padding-left', '55px'); $('#inventoryDetails').css('padding-right', '55px'); $("#sotPartswithnostock").html('大変申し訳ございません、在庫切れの為ご要望にお応えすることができません。このパッケージタイプはテストとテープ&リール一体型のテスターを使用している為、最終テスト完了時にリールサイズに満たない端数ロットが生じた場合にのみテープカット品として販売しております。現在はこの端数ロット在庫が売り切れの状態です。ご注文をテープ&リール品番(末尾が+Tまたは+T&R)へ切り替えてのご購入を検討いただくか、またはマキシム製品販売代理店に少数購入が可能かお問合せお願いいたします。'); } } } else { document.getElementById('buyParams').innerHTML = "Default"; digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } } }); var url = "/bin/checkQuoteAvailabilty?partNumber=" + encodeURIComponent(part_no) $.ajax({ url: url, dataType: "json", type: 'POST', async: false, xhrFields: { withCredentials: true }, success: function(data) { result = data; if(result != ""){ if(result.quoteList.quotes.quoteAvailable){ var quoteAvailable = result.quoteList.quotes.quoteAvailable; if(quoteAvailable == "true"){ $("#ortext").removeClass("hidden"); $('#useExistingQuote').show(); } } } } }); if (CQ_Analytics.PersonalInfoStoreMgr.getProperty("isLoggedIn") == "") { $.cookie("redirect","widget"); $.cookie("buy",buy); $.cookie("part_no",encodeURIComponent(part_no)); $.cookie("sampQty",sampQty); if(params == "ProductOrderTab"){ $.cookie("orderTab","true"); } } } else if (buy == "sample" && (CQ_Analytics.PersonalInfoStoreMgr.getProperty("isLoggedIn", true) || CQ_Analytics.PersonalInfoStoreMgr.getProperty("isLoggedIn", true) == "true")) { if(userType == "DISTRIBUTOR" || userType == "EMPLOYEE" ){ window.location.href = "https://shop.maximintegrated.com/backoffice/general/index.php?action=DISTRIBUTOR"; return false; } if (localStorage.getItem(part_no) == 1) { mycart_widget("sample", function (status) { if (status && typeof _satellite != "undefined") _satellite.track("cart: add"); }); return false; } else { var data = "input=addtocart&part_no=" + encodeURIComponent(part_no) + "&CartType=sampleCart&sampleQty=" + sampQty + "&usertype=" + userType; if (sampQty >= 1 || userType == "DISTRIBUTOR" || userType == "EMPLOYEE") { $.ajax({ type: "post", url: '/bin/validateSampleOrder', async: false, data: data, success: function (msg, textStatus, jqXHR) { if (textStatus == "success") { if (typeof msg == 'string') { //responce will be string when part is added to cart, else it is json obj if (msg == "false") { digitalErrorFunction('最大数量を超えています。操作を続行するためには数量を減らしてください。'); bootbox.alert('最大数量を超えています。操作を続行するためには数量を減らしてください。'); return false; } else if (msg.match("^You") || msg.match("^Product")) { bootbox.confirm('セッションが期限切れです。もう一度ログインしてください。', function (result) { var authorizableId = CQ_Analytics.PersonalInfoStoreMgr.getProperty("authorizableId"); CQ.shared.Util.load("\x2Fbin\x2FLogoutServlet\x3Flanguage\x3Den" + "&authorizableId=" + authorizableId); window.location = "/jp/mymaxim/login.html"; }); } else if (msg.match("^No orderable unit")) { digitalErrorFunction(msg); bootbox.alert(msg); } else { localStorage.setItem(part_no, "1"); mycart_widget("sample", function (status) { if (status && typeof _satellite != "undefined") _satellite.track("cart: add"); }); } } else { var itemCount = msg.output.validateEmailDomain.itemCount; var orderCount = msg.output.validateEmailDomain.orderCount; if (typeof orderCount != 'undefined' && parseInt(orderCount) >= 1) { bootbox.alert("マキシムの無料サンプルポリシーは各メンバーのサンプル請求数に制限を設けています。お客様はこの最大数を超えました。このメッセージを誤って受信されたと思われる場合は samples-admin@maximintegrated.com までEメールにてご連絡ください。"); return; } else if (typeof itemCount != 'undefined' && parseInt(itemCount) >= 4) { bootbox.alert("一回のサンプル請求の限度である4ラインを越えました。 ご注文ページで製品検索をして追加製品をご購入ください。"); return; } else if (msg.hasOwnProperty('error') && msg.error == "genericerrorText") { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else if (msg.hasOwnProperty('output') && msg.output.hasOwnProperty('validateEmailDomain')) { var sampleMessage = msg.output.validateEmailDomain.message; if (sampleMessage == 'SAMPLEEMAILDENIAL') { $('#sampleemaildenialerrordialog').modal('show'); } else { $('#domainerrordialog').modal('show'); } } else if (msg.hasOwnProperty('status') && msg.status == false) { if (msg.message.match("^Your session expired")) { bootbox.confirm('セッションが期限切れです。もう一度ログインしてください。', function (result) { var authorizableId = CQ_Analytics.PersonalInfoStoreMgr.getProperty("authorizableId"); CQ.shared.Util.load("\x2Fbin\x2FLogoutServlet\x3Flanguage\x3Den" + "&authorizableId=" + authorizableId); window.location = "/jp/mymaxim/login.html"; }); } else { digitalErrorFunction(msg.message); bootbox.alert(msg.message); } } } } else { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。' + JSON.stringify(msg)); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。' + JSON.stringify(msg)); } } }); } else { digitalErrorFunction('サンプルに十分の数量がございません。最大サンプル数量:' + sampQty); bootbox.alert('サンプルに十分の数量がございません。最大サンプル数量:' + sampQty); } } } else { $.cookie("redirect","widget"); $.cookie("buy",buy); $.cookie("part_no",encodeURIComponent(part_no)); $.cookie("sampQty",sampQty); if(params == "ProductOrderTab"){ $.cookie("orderTab","true"); } gigya.accounts.showScreenSet(aem.login.params); } } } function redirect_rochester(part_no){ var url = 'https://api.rocelec.com/parts/MAX/1?callback=callback&q='+ part_no +'&key=Z3kk1y*'; $.ajax({ type: 'GET', url: url, async: false, jsonpCallback: 'callback', contentType: "application/json", dataType: 'jsonp', success: function(json) { if(json.parts[0] != undefined){ if('permalink' in json.parts[0]){ window.open(json.parts[0].permalink,'_blank'); } else{ digitalErrorFunction('
Rochesterに現在この製品の在庫はございませんが、この製品の調達が可能か Rochester に問い合わせすることができます。もし調達ができない場合 マキシムのテクニカルアプリケーションエンジニアにお問い合わせ ください。置換品として使用可能な同様のデバイスについてアドバイスさせていただきます。
'); bootbox.alert('
Rochesterに現在この製品の在庫はございませんが、この製品の調達が可能か Rochester に問い合わせすることができます。もし調達ができない場合 マキシムのテクニカルアプリケーションエンジニアにお問い合わせ ください。置換品として使用可能な同様のデバイスについてアドバイスさせていただきます。
'); } } else{ if(typeof _satellite != "undefined"){ _satellite.track("rochester-popup"); } bootbox.alert('
Rochesterに現在この製品の在庫はございませんが、この製品の調達が可能か Rochester に問い合わせすることができます。もし調達ができない場合 マキシムのテクニカルアプリケーションエンジニアにお問い合わせ ください。置換品として使用可能な同様のデバイスについてアドバイスさせていただきます。
'); } }, error: function(e) { console.log(e.message); digitalErrorFunction(e.message); } }); } function getDistrbutorInventoryData(partNumber) { if(typeof partNumber != "undefined" && partNumber != "") { var distributors = {}; var distributor_template = Handlebars.compile($("#distributorData").html()); var data = "query="+encodeURIComponent(partNumber); $.ajax({ type: "post", url: '/bin/distributorInventoryComponent', async: true, data: data, success: function(data) { if(data.error == "genericerrorText"){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else if(data != null || data != ""){ $('#distributor-loading-image').hide(); if(data != "") { var dataJSON = JSON.parse(data); dataJSON['code']=partNumber; $('#distributor-modal').html(distributor_template(dataJSON)); } } } }); } } function add_to_cart(part_no, buy, params, sampQty,quantity) { var userType = encodeURI(CQ_Analytics.PersonalInfoStoreMgr.getProperty("userType")); if(userType == "") { userType="anonymous"; } if(params == 'Quote'){ $("#addToCartP").attr('data-quote-id', sampQty.quoteId); $("#addToCartP").attr('data-quote-item-number', sampQty.quoteItemNumber); } if (buy == "part") { var result; var small_template = Handlebars.compile($("#buyModalBody").html()); document.cookie="mySearchServlet="+window.location+";domain=.maximintegrated.com;path=/"; var servletName = "/bin/SFComponent"; var url = servletName + "?input=single&query=" + encodeURIComponent(part_no); $.ajax({ url: url, dataType: "json", type: 'POST', xhrFields: { withCredentials: true }, success: function(data) { result = data; if(result == "genericerrorText"){ document.cookie="mySearchServlet="+window.location+";domain=.maximintegrated.com;path=/"; digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); }else if (result != "") { if(result.errors != undefined && result.errors[0].message) { document.cookie="mySearchServlet="+window.location+";domain=.maximintegrated.com;path=/"; digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); }else { document.cookie="mySearchServlet="+window.location+";domain=.maximintegrated.com;path=/"; var sampleJson = result; var vol = sampleJson.volumePrices; sampleJson.userType = userType; var noPricingMsg = 0; minQty = sampleJson.min; mult = sampleJson.mult; if(vol != undefined && userType != "DISTRIBUTOR" ) { for (var i = 0; i < vol.length; i++) { var j = i + 1; var vol1 = ""; if (j <= vol.length) { if(vol[i].minQuantity < 1000) { stdPricingFlag = 1; if(j == vol.length) { vol1 = vol[i].minQuantity + "+"; } else { vol1 = vol[i].minQuantity + "-" + vol[i].maxQuantity; } } else if(vol[i].minQuantity == 1000) { vol1 = "1000+"; stdPricingFlag = 1; } else { if(i ==0 && vol[i].minQuantity > 1000) { //vol1 = "No standard pricing available"; noPricingMsg++; delete sampleJson.volumePrices[i].formattedValue; } else { delete sampleJson.volumePrices[i]; continue; } } } else if(j == vol.length && j == 1) { vol1 = vol[i].minQuantity + "-" + 24; stdPricingFlag = 1; } sampleJson.volumePrices[i].minQuantity = vol1; } } maxInventory = sampleJson.stock.atpInv; leadTime = sampleJson.leadTime; if (maxInventory == "" || maxInventory == undefined) { maxInventory = 0; } $('#addToCart').html(small_template(sampleJson)); if(userType != "DISTRIBUTOR") { call(quantity); } } } else { document.getElementById('buyParams').innerHTML = "Default"; digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } } }); } else if (buy == "sample") { if(userType == "DISTRIBUTOR" || userType == "EMPLOYEE" ){ window.location.href = "https://shop.maximintegrated.com/backoffice/general/index.php?action=DISTRIBUTOR"; return false; } if (localStorage.getItem(part_no) == 1) { mycart_widget("sample", function (status) { if (status && typeof _satellite != "undefined") _satellite.track("cart: add"); }); return false; } else { var data = "input=addtocart&part_no=" + encodeURIComponent(part_no) + "&CartType=sampleCart&sampleQty=" + sampQty + "&usertype=" + userType; if (sampQty >= 1 || userType == "DISTRIBUTOR" || userType == "EMPLOYEE") { $.ajax({ type: "post", url: '/bin/validateSampleOrder', async: false, data: data, success: function (msg, textStatus, jqXHR) { if (textStatus == "success") { //responce will be string when part is added to cart, else it is json obj if (typeof msg == 'string') { if (msg == "false") { digitalErrorFunction('最大数量を超えています。操作を続行するためには数量を減らしてください。'); bootbox.alert('最大数量を超えています。操作を続行するためには数量を減らしてください。'); return false; } else if (msg.match("^You") || msg.match("^Product")) { bootbox.confirm('セッションが期限切れです。もう一度ログインしてください。', function (result) { var authorizableId = CQ_Analytics.PersonalInfoStoreMgr.getProperty("authorizableId"); CQ.shared.Util.load("\x2Fbin\x2FLogoutServlet\x3Flanguage\x3Den" + "&authorizableId=" + authorizableId); window.location = "/jp/mymaxim/login.html"; }); } else if (msg.match("^No orderable unit")) { digitalErrorFunction(msg); bootbox.alert(msg); } else { localStorage.setItem(part_no, "1"); mycart_widget("sample", function (status) { if (status && typeof _satellite != "undefined") _satellite.track("cart: add"); }); } } else { var itemCount = msg.output.validateEmailDomain.itemCount; var orderCount = msg.output.validateEmailDomain.orderCount; if (typeof orderCount != 'undefined' && parseInt(orderCount) >= 1) { bootbox.alert("マキシムの無料サンプルポリシーは各メンバーのサンプル請求数に制限を設けています。お客様はこの最大数を超えました。このメッセージを誤って受信されたと思われる場合は samples-admin@maximintegrated.com までEメールにてご連絡ください。"); return; } else if (typeof itemCount != 'undefined' && parseInt(itemCount) >= 4) { bootbox.alert("一回のサンプル請求の限度である4ラインを越えました。 ご注文ページで製品検索をして追加製品をご購入ください。"); return; } else if (msg.hasOwnProperty('error') && msg.error == "genericerrorText") { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else if (msg.hasOwnProperty('output') && msg.output.hasOwnProperty('validateEmailDomain')) { var sampleMessage = msg.output.validateEmailDomain.message; if (sampleMessage == 'SAMPLEEMAILDENIAL') { $('#sampleemaildenialerrordialog').modal('show'); } else { $('#domainerrordialog').modal('show'); } } else if (msg.hasOwnProperty('status') && msg.status == false) { if (msg.message.match("^Your session expired")) { bootbox.confirm('セッションが期限切れです。もう一度ログインしてください。', function (result) { var authorizableId = CQ_Analytics.PersonalInfoStoreMgr.getProperty("authorizableId"); CQ.shared.Util.load("\x2Fbin\x2FLogoutServlet\x3Flanguage\x3Den" + "&authorizableId=" + authorizableId); window.location = "/jp/mymaxim/login.html"; }); } else { digitalErrorFunction(msg.message); bootbox.alert(msg.message); } } } } else { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。' + JSON.stringify(msg)); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。' + JSON.stringify(msg)); } } }); } else { digitalErrorFunction('サンプルに十分の数量がございません。最大サンプル数量:' + sampQty); bootbox.alert('サンプルに十分の数量がございません。最大サンプル数量:' + sampQty); } } } } $(document).on("click", ".useThisBuyQuote", function () { var quantity = ""; quantity = $('#product-quantityBuyQuote').val(); quantity = quantity.trim(); if(quantity.length == 0){ digitalErrorFunction('数量を入力してお進みください'); bootbox.alert('数量を入力してお進みください'); quantity.focus(); return false; } var part_no = $('#Pcode').val(); var quoteId= $(this).data("quote-id"); var quoteItemId = $(this).data("quote-item-id"); $.ajax({ type: "post", url: '/bin/cartOperations', data: "input=addtocart"eId="+quoteId+""eItemNumber="+quoteItemId+"&qty=" + quantity + "&part_no=" + encodeURIComponent(part_no), success: function(msg, textStatus, jqXHR) { if (textStatus == "success") { if(msg.match("^You") || msg.match("^Product")){ if(msg.match("^Your session expired")) { bootbox.confirm('セッションが期限切れです。もう一度ログインしてください。', function(result) { var authorizableId = CQ_Analytics.PersonalInfoStoreMgr.getProperty("authorizableId"); CQ.shared.Util.load("\x2Fbin\x2FLogoutServlet\x3Flanguage\x3Den"+"&authorizableId="+authorizableId); window.location="/jp/mymaxim/login.html"; }); } else { digitalErrorFunction(msg); bootbox.alert(msg); return false; } } else if (msg.match("^No Price found")){ //bootbox.alert(msg); digitalErrorFunction('この製品につきましてはお客様が入力した数量でのお見積もりが必要です。'); bootbox.alert('この製品につきましてはお客様が入力した数量でのお見積もりが必要です。'); return false; } else if(msg.match('この製品につきましてはお客様が入力した数量でのお見積もりが必要です。')){ digitalErrorFunction(msg); bootbox.alert(msg); return false; } else if(msg==""){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); return false; } else if(quoteId != "" && quoteId != undefined && ! msg.match("statusCode=success")) { digitalErrorFunction(msg); bootbox.alert(msg); return false } else { $('#useQuoteModal').modal('hide'); mycart_widget(); if ($("#buyParams").html() == "SavedLater") { //alert("Yes inside"); deleteSavedForLater(part_no); } } } else { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'+ JSON.stringify(msg)); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'+ JSON.stringify(msg)); } } }); }); function call(quantity) { var qty ="",quoteId,quoteItemNumber = ""; if(typeof quantity != "undefined" && quantity !="") { qty=quantity; } else { var value = $('#product-quantity1').val(); if(value != "undefined" && value != "") { qty = value; } else{ qty = document.getElementById('product-quantity').value; } } qty = qty.trim(); var orderInMult = $('#orderInMult').val(); var orderInMin = $('#orderInMin').val(); var inventoryVal = $('#stockAvaliability').val(); var stockAvaliability = $('#stockAvaliability').val(); var cfValue = $('#cfValue').val(); var carrierTypeValue = $('#carrierTypeValue').val(); quoteId=$("#addToCartP").attr('data-quote-id'); quoteItemNumber=$("#addToCartP").attr('data-quote-item-number'); if(quoteId == undefined){ quoteId =""; quoteItemNumber = ""; } if(quoteId != "" && quoteId != undefined){ } else { if(!(cfValue == 'true' && carrierTypeValue == 'Tape')){ if(parseInt(qty) > parseInt(inventoryVal)){ if(qty != "" && orderInMult != "" && orderInMin != "" ){ if(parseInt(qty) < parseInt(orderInMin)){ $('#product-quantity').val(orderInMin); $('#quantity-label').show(); return false; } else if(qty % orderInMult == 0){ $('#quantity-label').hide(); } else { var modvalue = parseInt(qty) % parseInt(orderInMult); var q4 = parseInt(orderInMult)-parseInt(modvalue); var nearestNum = parseInt(qty) + parseInt(q4); //var nearestNum = (Math.round(qty / orderInMult)+1) * orderInMult; $('#product-quantity').val(nearestNum); $('#quantity-label').show(); return false; } } } else if(parseInt(qty) <= parseInt(inventoryVal) && carrierTypeValue == 'Reel'){ if(qty != "" && orderInMult != "" && orderInMin != "" ){ if(parseInt(qty) < parseInt(orderInMin)){ $('#product-quantity').val(orderInMin); $('#quantity-label').show(); return false; } else if(qty % orderInMult == 0){ $('#quantity-label').hide(); } else { var modvalue = parseInt(qty) % parseInt(orderInMult); var q4 = parseInt(orderInMult)-parseInt(modvalue); var nearestNum = parseInt(qty) + parseInt(q4); //var nearestNum = (Math.round(qty / orderInMult)+1) * orderInMult; $('#product-quantity').val(nearestNum); $('#quantity-label').show(); return false; } } } } // Bulk SOT Check if(cfValue == 'true' && carrierTypeValue == 'Tape'){ if(parseInt(stockAvaliability) == 0){ digitalErrorFunction('大変申し訳ございません、在庫切れの為ご要望にお応えすることができません。このパッケージタイプはテストとテープ&リール一体型のテスターを使用している為、最終テスト完了時にリールサイズに満たない端数ロットが生じた場合にのみテープカット品として販売しております。現在はこの端数ロット在庫が売り切れの状態です。ご注文をテープ&リール品番(末尾が+Tまたは+T&R)へ切り替えてのご購入を検討いただくか、またはマキシム製品販売代理店に少数購入が可能かお問合せお願いいたします。'); bootbox.alert('大変申し訳ございません、在庫切れの為ご要望にお応えすることができません。このパッケージタイプはテストとテープ&リール一体型のテスターを使用している為、最終テスト完了時にリールサイズに満たない端数ロットが生じた場合にのみテープカット品として販売しております。現在はこの端数ロット在庫が売り切れの状態です。ご注文をテープ&リール品番(末尾が+Tまたは+T&R)へ切り替えてのご購入を検討いただくか、またはマキシム製品販売代理店に少数購入が可能かお問合せお願いいたします。'); return false; } } } var part_no = document.getElementById('Pcode').value; if(qty.length == 0){ digitalErrorFunction('数量を入力してお進みください'); bootbox.alert('数量を入力してお進みください'); qty.focus(); return false; } if (qty % 1 != 0) { digitalErrorFunction('少数や負の数は使用しないでください(正の整数のみ)'); bootbox.alert('少数や負の数は使用しないでください(正の整数のみ)'); return false; } var userId = CQ_Analytics.ProfileDataMgr.getProperty("email"); if(CQ_Analytics.PersonalInfoStoreMgr.getProperty("isLoggedIn", true) || CQ_Analytics.PersonalInfoStoreMgr.getProperty("isLoggedIn", true) == "true") { var userType = encodeURI(CQ_Analytics.PersonalInfoStoreMgr.getProperty("userType")); if(typeof quantity != "undefined") { $.removeCookie("redirect"); $.removeCookie("part_no"); $.removeCookie("sampQty"); $.removeCookie("quantity"); $.removeCookie("buy"); } var data = "input=addtocart"eId=" + quoteId + ""eItemNumber=" + quoteItemNumber + "&qty=" + qty + "&part_no=" + encodeURIComponent(part_no); $.ajax({ type: "post", url: '/bin/validateRevenueOrder', async: false, data: data, success: function (msg, textStatus, jqXHR) { if (textStatus == "success") { //responce will be string when part is added to cart, else it is json obj if (typeof msg != 'string') { if(msg.error == "genericerrorText"){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else{ var isOrderAllowed = msg.output.validateEmailDomain.isOrderAllowed; if (typeof isOrderAllowed != 'undefined' && isOrderAllowed != "true") { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); $('#revenuedomainerrordialog').modal('show'); return; } } } else { if(msg.match("^You") || msg.match("^Product")){ if(msg.match("^Your session expired")) { bootbox.confirm('セッションが期限切れです。もう一度ログインしてください。', function(result) { var authorizableId = CQ_Analytics.PersonalInfoStoreMgr.getProperty("authorizableId"); CQ.shared.Util.load("\x2Fbin\x2FLogoutServlet\x3Flanguage\x3Den"+"&authorizableId="+authorizableId); //window.location="/jp/storefront.html"; window.location="/jp/mymaxim/login.html"; }); } else { digitalErrorFunction(msg); bootbox.alert(msg); return false; } } else if (msg.match("^No Price found")){ //bootbox.alert(msg); digitalErrorFunction('この製品につきましてはお客様が入力した数量でのお見積もりが必要です。'); bootbox.alert('この製品につきましてはお客様が入力した数量でのお見積もりが必要です。'); return false; }else if(msg.match('この製品につきましてはお客様が入力した数量でのお見積もりが必要です。')){ digitalErrorFunction(msg); bootbox.alert(msg); return false; }else if(msg.match("^zeroInventoryErrorMsg")){ digitalErrorFunction('大変申し訳ございません、在庫切れの為ご要望にお応えすることができません。このパッケージタイプはテストとテープ&リール一体型のテスターを使用している為、最終テスト完了時にリールサイズに満たない端数ロットが生じた場合にのみテープカット品として販売しております。現在はこの端数ロット在庫が売り切れの状態です。ご注文をテープ&リール品番(末尾が+Tまたは+T&R)へ切り替えてのご購入を検討いただくか、またはマキシム製品販売代理店に少数購入が可能かお問合せお願いいたします。'); bootbox.alert('大変申し訳ございません、在庫切れの為ご要望にお応えすることができません。このパッケージタイプはテストとテープ&リール一体型のテスターを使用している為、最終テスト完了時にリールサイズに満たない端数ロットが生じた場合にのみテープカット品として販売しております。現在はこの端数ロット在庫が売り切れの状態です。ご注文をテープ&リール品番(末尾が+Tまたは+T&R)へ切り替えてのご購入を検討いただくか、またはマキシム製品販売代理店に少数購入が可能かお問合せお願いいたします。'); }else if(msg==""){ digitalErrorFunction('System error occured. Contact customer support for assistance.'); bootbox.alert('System error occured. Contact customer support for assistance.'); return false; } else if(quoteId != "" && quoteId != undefined && ! msg.match("statusCode=success")) { digitalErrorFunction(msg); var msgMatch = msg.match("^Quote compliance not met for quote number (.[0-9]*) as compliance is (.[0-9]%)$"); if(msgMatch){ bootbox.alert('Quote compliance not met for quote number '+ msgMatch[1] + ' as compliance is ' + msgMatch[2]); }else { bootbox.alert(msg); } return false } else if(msg.match('To order this part, you must order the entire inventory of')){ bootbox.alert(msg); return false; } else if(msg.match('We are sorry! Unfortunately, there is not enough excess inventory to support this bulk SOT part request')){ bootbox.alert(msg); return false; } else if(msg.match('A valid quote is required to purchase this part')){ bootbox.alert(msg); return false; }else { $('#addToCartP').modal('hide'); mycart_widget("", function(status){ if(status && typeof _satellite != "undefined") _satellite.track("cart: add"); if(msg.match("entryNumber=1") && typeof _satellite != "undefined"){ _satellite.track("cart: open"); } }); if(quoteId != null && quoteId != "" && quoteId != undefined && msg.match("statusCode=success")){ window.digitalQuoteData = { quoteID : quoteId, quoteQuantity : qty, partNo : encodeURIComponent(part_no) } if(typeof _satellite != "undefined"){ _satellite.track("use-quote"); } } if ($("#buyParams").html() == "SavedLater") { //alert("Yes inside"); deleteSavedForLater(part_no); } } } } else { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'+ JSON.stringify(msg)); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'+ JSON.stringify(msg)); } } }); } else { $.cookie("quantity",qty); $("#addToCartP").modal("hide"); gigya.accounts.showScreenSet(aem.login.params); } } function redirectBulkOrder(partNumber,quantity){ var url="/jp/storefront/bulk-order.html"; if(typeof partNumber != "undefined" && partNumber != "") { url+="?partNumber="+partNumber; } if(typeof quantity != "undefined" && quantity != "") { url+="&quantity="+quantity; } window.location.href = url; } function redirectToModelN(){ window.open("https://maxim.modeln.com/", '_blank',"width=400,height=150").focus(); } $(document).on('click', '.quoteDetails', function() { $("#useQuoteModal .modal-body").html(""); var index = ""; var quoteNo = ""; var part = $(this).data("part-no"); if(part == "" || part == "undefined") { digitalErrorFunction('有効な型番をご入力ください'); bootbox.alert('有効な型番をご入力ください'); return false; } if(quoteNo != "" && quoteNo != "undefined") { getQuotesList(part, index, quoteNo); } else { getQuotesList(part, index, quoteNo); digitalErrorFunction('有効なお見積もり番号をご入力ください'); //bootbox.alert('有効なお見積もり番号をご入力ください'); //return false; } }); var useQuoteModalTemplate = $("#useQuoteModalBody").html(); function getQuotesList(part, index, quoteId) { var userType = CQ_Analytics.PersonalInfoStoreMgr.getProperty("userType"); var oldPart = $("#partHidden"+index).val(); //oldpart == part to handle unnecessary quotelists api calls for same part. if(part == "" || part == undefined || part.length < 5 || oldPart == part) { return false; } if(userType == "" || userType == undefined){ $("#modelBuyCartButton").trigger("click"); gigya.accounts.showScreenSet(aem.login.params); return false; } var queryString = "quoteId="+quoteId+"&pendingStatus=&summery=disti&quantity=&materialNumber="+encodeURIComponent(part); var materialNumber = part; var activeFlag = 0; $.ajax({ url:"/bin/QuoteMangementServlet", type: 'GET', data: queryString, success:function(data){ //alert(JSON.stringify(data)); var useQuoteTemplate = Handlebars.compile(useQuoteModalTemplate); var useQuoteJson = {quotesList : [], code : materialNumber, index : index}; if(data.status == false) { var useQuoteJson = {quotesList : [], code : materialNumber, index : index, errorMessage : data.error.errorList.errors.message }; $("#modelBuyCartButton").trigger("click"); $("#quoteLineFlag"+index).val("false"); $('#useQuoteModal').html(useQuoteTemplate(useQuoteJson)); $('#useQuoteModal').modal('show'); digitalErrorFunction(data.error.errorList.errors.message); return false; } else { var quoteListJson = data.quoteList.quotes.quote; } if($.type(data.quoteList.quotes.quote) != "array") { if($.type(quoteListJson.quote_items) != "array") { if(quoteListJson.quote_items.product.code == materialNumber) { var quoteId = quoteListJson.ecom_qt_id_h; var quantity = quoteListJson.quote_items.quantity; //var price = findPriceByQuantity(quoteListJson.quote_items.product.volumePrices, quoteListJson.quote_items.quantity); price = (quoteListJson.quote_items.requote_price * 1).toFixed(3); if(userType == "DISTRIBUTOR") { price = (quoteListJson.quote_items.adj_disti_cost * 1).toFixed(3); quoteId = quoteListJson.modelNQuoteNumber; } var total = price * quantity; total =total.toFixed(3); if(quoteListJson.quote_items.quoteItemStatus == "ACTIVE" && quantity != "" && quantity != "undefined"){ activeFlag = 1; useQuoteJson.quotesList.push({"totalCost":total, "quoteItemId" : quoteListJson.quote_items.code, "status" : quoteListJson.quote_items.quoteItemStatus, "quantity":quantity, "entryNumber":quoteListJson.quote_items.item_num,"quoteId": quoteId, "price": price, "orderCompilance": quoteListJson.quote_items.ordcompliance}); } } else { //return useQuoteJson; //break; } } else { for(var i =0; i