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

RTD測定システム設計の基礎


要約: このアプリケーションノートでは、RTD温度測定の誤差を最小化する方法を説明します。

はじめに

高精度温度測定は、産業オートメーションアプリケーションが製品の品質と安全性の両方を確保するため不可欠なデータを提供します。多数のタイプの温度センサーが利用可能で、それぞれに利点と欠点があります。このアプリケーションノートでは測温抵抗体(RTD)に焦点を当て、測定精度を最適化するための設計の基礎を説明します。

測温抵抗体

RTDは、温度で抵抗値が変化する素子を内蔵しています。ほとんどの素子は、白金、ニッケル、または銅のいずれかです。白金RTDは、広い温度範囲にわたって最も直線性と再現性の高い温度-抵抗値の関係を備えているため、最高の性能を提供します。

一般に、RTDは熱電対やサーミスタに比べて、より安定性と再現性の高い出力を生成します。そのため、RTDはより高い測定精度を実現します。

高精度RTD測定の設計オプション

RTDを測定するための2つの最も一般的な方法は、定電流励起(図1)と定電圧励起(図2)です。

目的は、RTDの抵抗値を高精度で測定し、式またはルックアップテーブルを使用して温度に変換することです。理想的な場合は、以下のようになります。

式01 (定電流励起の場合)

または

式02 (定電圧励起の場合)

しかし実際には、RTDのリードワイヤには抵抗があります。長いリードワイヤは、測定精度に大きく影響します。そのため、図1および2に示す回路によって測定される実際の抵抗値は、次のようになります。

RTD + (2 × RWIRE)

ここで、RWIREはリードワイヤの抵抗で、両方のワイヤが同一の抵抗値を備えていると仮定しています。理論的には許容可能ですが、RWIREが同じということは、両方のワイヤが完全に同じ長さで、完全に同じ材質でできていることを意味します。そのような仮定は、重要な温度検出アプリケーションでは保証することができません。そのため、RTDはリードワイヤに起因する測定誤差の除去に役立つよう、3線式または4線式の構成を備えています。

図1. 2線式定電流励起構成 図1. 2線式定電流励起構成

図2. 2線式定電圧励起構成 図2. 2線式定電圧励起構成

3線式RTD構成

3線式RTD用の標準的な定電流および定電圧励起回路を、それぞれ図3および図4に示します。どちらの場合も、ADCはRTDの抵抗値 + RWIRE3 (RWIRE3はリターンリードワイヤの抵抗値)をサンプリングします。ADCの入力は通常はハイインピーダンスで、RWIRE2を流れる電流は事実上ゼロになるため、このシステムはRWIRE2を除去しています。したがって、ADCはRTDおよびRWIRE3両端の電圧のみを測定します。RWIRE3は測定誤差に寄与します。しかし、2線式構成と比較するとリードワイヤに起因する誤差はおよそ50%減少します。

測定精度をさらに向上させる方法の1つは、回路にアナログスイッチを追加することです。その場合、ADCは励起信号の出力の電圧(VX)を測定し、RWIRE1の値を取得します。RWIRE1がほぼRWIRE3と同じだと仮定することによって、RWIRE3を除去することができます。図3を参照すると、電流励起構成において、RWIRE1の抵抗値は次式に等しくなります。

式03

そして、向上したRTD測定の近似値は、次のとおりです。

式04

電圧励起構成の場合は、以下のようになります。

式05

および、

式06

この方式による測定精度の向上は、追加のハードウェアが必要であり、ソフトウェアの複雑性も増大します。

図3. 3線式定電流励起構成 図3. 3線式定電流励起構成

図4. 3線式定電圧励起構成 図4. 3線式定電圧励起構成

4線式RTD構成

4線式RTD構成は、最高の測定精度を提供します。図5および図6は、それぞれ4線式RTDの定電流励起および定電圧励起回路を示します。電流励起構成の場合、RWIRE2またはRWIRE3を通る電流はないため、次のようになります。

式07

したがって、RWIRE2 + RTD + RWIRE3両端の電圧は、RTD両端の電圧と同一になります。残念なことに、定電圧励起構成を使用する場合、ADCシステムが励起電圧出力の電圧(VX)を測定することができない限り、抵抗分圧器の作用によって、RWIRE1およびRWIRE4がやはりRTD測定の誤差を生じさせます。VXの電圧が既知の場合は、次式によってリファレンス電流を計算することができます。

式08

ここで、RREFはこの場合は3.32kΩです。同様に、次式は電流励起構成の場合の式と同一になります。

式09

信号チェーン内のその他の多数の要素が、測定精度に影響します。これらの要素には、ADCシステムの入力インピーダンス、ADCの分解能、RTDを流れる電流の量、電圧リファレンスの安定性、および励起信号の安定性が含まれます。

リードワイヤ両端(たとえば4線式構成のRWIRE2およびRWIRE3)での電圧降下を防ぐために、ADCシステムの入力はハイインピーダンスである必要があります。ADCがハイインピーダンス入力を備えていない場合は、ADCの入力の前にバッファを追加してください。

図5. 4線式定電流励起構成 図5. 4線式定電流励起構成

図6. 4線式定電圧励起構成 図6. 4線式定電圧励起構成

加熱誤差

RTDはセンサーですが、抵抗でもあります。電流が抵抗を通って流れると、消費電力が発生します。消費電力は、抵抗を加熱します。この自己加熱効果によって、測定に誤差が生じます。励起電流を注意深く選択して、発生する誤差がエラーバジェット内に収まることを確保する必要があります。自己加熱誤差の主要な計算式は、次のとおりです。

ΔT = (I2REF ×RRTD) × F

ここで、FはRTDの自己加熱係数で、mW/℃で表されます。たとえば、自己加熱係数が0.05℃/mWのPT-100白金RTDを氷水に入れます。測定温度が0℃のとき、RRTDは100Ωです。IREFを10mAに設定した場合、自己加熱誤差は次のようになります。

((0.01A)2 × 100Ω) × 50°C/W = 0.5°C

アプリケーションによって、この誤差を許容することができる場合とできない場合があります。高精度測定の場合、より低い励起電流を使うと自己加熱誤差が低減します。たとえば、IREFを1mAに低めると、自己加熱誤差は0.005℃になります。このレベルの誤差なら、はるかに許容可能です。励起電流を下げると自己加熱誤差が低減しますが、RTD両端での電圧信号の範囲も狭まるため、ADCがより多くの分離した信号レベルを抽出することができるように、RTD信号を増幅する必要が生じます。別の方法としては、より高分解能のADCを使用することが考えられます。

ここまでの段階で、解説してきたすべての式にIREFまたはVREFのいずれかが含まれていました。しかし、これらの励起信号が安定性を欠く場合はどうなるでしょう?不安定性は、短期的または長期的ドリフトによって生じます。明らかに、励起信号が不正確になると、上記のすべての計算に誤差が含まれることになります。そのため、定期的な較正が必要です。もちろん、エンジニアは超低温度ドリフト/長期的ドリフトを備えた非常に安定性の高い電圧リファレンスを使用することもできます。しかし、通常そのようなデバイスは非常に高コストです。別の方法として、レシオメトリック温度測定法は、不正確な励起信号に起因する誤差を除去します。

レシオメトリック温度測定

レシオメトリック測定は、絶対電圧を使用して抵抗を測定する代わりに、リファレンス抵抗に対する比としてRTDの抵抗値の測定を提供します。言い換えると、RRTDはVREFまたはIREFではなくRREFの関数になります。この方法では、同じ励起信号を使用して、RTD両端の電圧とADC用の電圧リファレンスの両方を生成します。励起信号が変化すると、その変化はRTD両端の電圧とADCのリファレンス入力の両方に反映されます。図7および図8は、電流励起構成と電圧励起構成のレシオメトリック測定回路を示します。

一般的なADCの変換公式は、次のとおりです。

式10

ここで、

VIN = ADCの入力電圧
VREF = リファレンス電圧(REFP - REFN)
CODE = ADCコード
N = ADCの分解能

VINはRTD両端の電圧と等しい値です。電流励起モードの場合、以下のようになります。

VIN = IREF × RRTDおよびVREF = IREF × RREF

VINおよびVREFをADCの変換公式に代入すると、次式を得ます。

式11

そこから次式を得ます。

式12

同様に、電圧励起の場合は次のようになります。

式13

VINをADCの変換公式に代入すると、次式を得ます。

式14

RRTDについて解くと、次式を得ます。

式15

どちらの場合も、式の簡約化のあと、RRTDはRREFとADCコードの関数になります。したがって、RTD測定の精度はRREFに依存します。そのため、リファレンス抵抗を選択するときに、エンジニアは低い温度ドリフト/長期的ドリフトを備えたものを選ぶ必要があります。

図7. レシオメトリック測定の電流励起構成 図7. レシオメトリック測定の電流励起構成

図8. レシオメトリック測定の電圧励起構成 図8. レシオメトリック測定の電圧励起構成

RTDから温度への変換

回路がどれほど正確にRTDの抵抗値を測定しても、エンジニアが適切な方法を使って高精度でRTDの抵抗値を温度に変換しなければ、すべての努力は無駄になります。一般的な方法の1つは、ルックアップテーブルの使用です。しかし、要求される分解能が高く、測定対象の温度範囲が広い場合、ルックアップテーブルが肥大化し、この方法の有効性が低下します。もう1つの方法は、温度を計算することです。

白金RTDの場合、抵抗値と温度の関係はCallendar-Van Dusenの式によって次のように表されます。

R(t) = R0 × (1 + A × t +B × t2 + (t - 100) × C × t3)

ここで、

R(t) = RTDの抵抗値
t = 温度
R0 = 0℃でのRTDの抵抗値
A = 3.908 × 10-3
B = -5.775 × 10-7
C = -4.183 × 10-12 (t < 0℃の場合)
C = 0 (t > 0℃の場合)

この式は、既知の温度を与えると、予想されるRTDの抵抗値を提供します。対象の温度範囲が0℃以上の場合、定数Cは0になり、式は2次式になります。2次式を解くのは簡単です。しかし、温度が0℃を下回り、定数Cが0ではなくなると、式は難解な4次式になります。この場合、多項式補間による近似が非常に有効なツールとなります。Microsoft Excelのソリューションの例を示します。

  1. スプレッドシート上に、2列のデータを作成します。1つの列に、温度を記入します。第2の列に、Callendar-Van Dusenの式から計算した対応するRTD抵抗値を記入します。
  2. X-Y散布図を作成します。
  3. グラフに多項式近似曲線を追加します。多項式が高次であるほど、より高精度の近似が得られます。
  4. 「近似曲線の書式設定」メニューで、「グラフに数式を表示する」を選択します。

PT100でt < 0℃の場合、結果の多項式は次のようになります。

t = -1.6030e -13 × r6 + 2.0936e -10 × r5 -3.6239e -8 × r4 -4.2504e -6 × r3 + 2.5646e -3 × r2 + 2.2233 × r -2.4204e2

多項式係数の小数点以下の桁数を増やすと、誤差が減少します。上記の式のように小数点以下4桁の場合、温度近似誤差は0.005℃以下になり、ほとんどのアプリケーションにとって許容可能となります。

マキシムのリファレンスデザインソリューション

図9. MAXREFDES67#のシステムボード 図9. MAXREFDES67#のシステムボード

MAXREFDES67#リファレンスデザインは、上記の4線式レシオメトリック構成および多項式近似を実装しています。また、後から変更および実装が可能なように、設計ファイルとファームウェアが利用可能です。さらに、このリファレンスデザイン(図9、10、11)は、産業アプリケーション用の完全な汎用アナログ入力です。この独自の24ビットフロントエンドは、RTD測定以外にもバイポーラ電圧および電流、および熱電対(TC)入力を受け付けます。MAXREFDES67#はマキシムの超小型Micro PLC形状に実装され、最大22.3ビットの実効分解能で動作し、温度誤差は-40℃~150℃の範囲にわたってわずか±0.1%です。図12は、MAXREFDES67#のRTD入力によって測定された温度誤差と、3種類の温度計を基準とする温度との関係を示します。基準は、それぞれOmega HH41温度計、ETIリファレンス温度計、およびFluke 724温度キャリブレータです。MAXREFDES67#に接続したRTDプローブ(Omega P-M-1/10-1/4-6-0-G-3)をFluke 7341較正用バスに入れ、20℃で較正を行いました。

  販売代理店向け単価はございません 以下から見積もりをご請求ください: 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; } var userId = CQ_Analytics.ProfileDataMgr.getProperty("email"); var isSampleOrderAllowed = "true"; var sampleMessage = ""; var data = "userId="+userId; $.ajax({ type: "post", url: '/bin/validateSampleOrder', async: false, data: data, success: function(msg) { if(msg.error == "genericerrorText"){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else if(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 { isSampleOrderAllowed = msg.output.validateEmailDomain.isOrderAllowed; sampleMessage = msg.output.validateEmailDomain.message; var itemCount = msg.output.validateEmailDomain.itemCount; var orderCount = msg.output.validateEmailDomain.orderCount; if(localStorage.getItem(part_no) == 1) { mycart_widget("sample", function(status){ if(status && typeof _satellite != "undefined") _satellite.track("cart: add"); }); return false; } else { sampleAddToCart(isSampleOrderAllowed, sampQty, part_no, sampleMessage,itemCount,orderCount); } } } }); } 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"; } var userId = CQ_Analytics.ProfileDataMgr.getProperty("email"); if(params == 'Quote'){ $("#addToCartP").attr('data-quote-id', sampQty.quoteId); $("#addToCartP").attr('data-quote-item-number', sampQty.quoteItemNumber); } if (buy == "part") { var message = ""; var data = "userId="+userId; var isOrderAllowed="true"; $.ajax({ type: "post", url: '/bin/validateRevenueOrder', async: false, data: data, success: function(msg) { if(msg.error == "genericerrorText"){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else{ isOrderAllowed = msg.output.validateEmailDomain.isOrderAllowed; message = msg.output.validateEmailDomain.message; } } }); if(isOrderAllowed == "true") { 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 { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); $('#revenuedomainerrordialog').modal('show'); } } else if (buy == "sample") { if(userType == "DISTRIBUTOR" || userType == "EMPLOYEE" ){ window.location.href = "https://shop.maximintegrated.com/backoffice/general/index.php?action=DISTRIBUTOR"; return false; } var isSampleOrderAllowed = "true"; var sampleMessage = ""; var data = "userId="+CQ_Analytics.ProfileDataMgr.getProperty("email"); $.ajax({ type: "post", url: '/bin/validateSampleOrder', async: false, data: data, success: function(msg) { if(msg.error == "genericerrorText"){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else if(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{ isSampleOrderAllowed = msg.output.validateEmailDomain.isOrderAllowed; sampleMessage = msg.output.validateEmailDomain.message; var itemCount = msg.output.validateEmailDomain.itemCount; var orderCount = msg.output.validateEmailDomain.orderCount; if (localStorage.getItem(part_no) == 1) { mycart_widget("sample", function (status) { if (status && typeof _satellite != "undefined") _satellite.track("cart: add"); }); return false; } else { sampleAddToCart(isSampleOrderAllowed, sampQty, part_no, sampleMessage,itemCount,orderCount); } } } }); } } function sampleAddToCart(isSampleOrderAllowed, sampQty, part_no, sampleMessage,itemCount,orderCount) { if(isSampleOrderAllowed == "true"){ 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{ //var qty = document.getElementById('product-quantity').value; if (sampQty >= 1 || userType == "DISTRIBUTOR" || userType == "EMPLOYEE") { var qty = 1; //taking qty fixed as 5 for sample var data = "input=addtocart&qty=" + qty + "&part_no=" + encodeURIComponent(part_no) + "&CartType=sampleCart&sampleQty="+sampQty+"&usertype="+userType; $.ajax({ type: "post", url: '/bin/cartOperations', async: false, data: data, success: function (msg, textStatus, jqXHR) { if (textStatus == "success") { 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 { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。' + JSON.stringify(msg)); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。' + JSON.stringify(msg)); } } }); } else { digitalErrorFunction('サンプルに十分の数量がございません。最大サンプル数量:' + sampQty); bootbox.alert('サンプルに十分の数量がございません。最大サンプル数量:' + sampQty); } } } else { if(sampleMessage =='SAMPLEEMAILDENIAL'){ //bootbox.alert(sampleMessage); $('#sampleemaildenialerrordialog').modal('show'); } else{ $('#domainerrordialog').modal('show'); } //bootbox.alert(sampleMessage); } } $(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 message = ""; var data = "userId="+userId; var isOrderAllowed="true"; $.ajax({ type: "post", url: '/bin/validateRevenueOrder', async: false, data: data, success: function(msg) { if(msg.error == "genericerrorText"){ digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); bootbox.alert('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); } else{ isOrderAllowed = msg.output.validateEmailDomain.isOrderAllowed; message = msg.output.validateEmailDomain.message; } } }); if(isOrderAllowed == "true") { $.ajax({ type: "post", url: '/bin/cartOperations', data: "input=addtocart"eId="+quoteId+""eItemNumber="+quoteItemNumber+"&qty=" + qty + "&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/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 { digitalErrorFunction('システムエラーが発生しました。カスタマーサポートまでご連絡ください。'); $('#revenuedomainerrordialog').modal('show'); } }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