Skip to main content
Overhead view of a car going across a bridge

推动能源转型

我们助力客户创新,实现更加可持续的未来。了解 UL Solutions 如何在支持可再生能源的生产、传输和使用的同时,始终坚守安全承诺。

致力于实现能源脱碳

从依赖化石燃料的世界向一个完全由清洁、可再生能源驱动的未来转变是不可避免的趋势。在这一能源转型过程中,我们必须将安全作为首要考量。如果能源的生产、储存和使用方式不能确保安全,那么这种能源方式将无法持续。

如果能源使用无法确保可持续性,那么它将对我们人类构成威胁。

这就是我们面临的挑战:能源创新先驱者如何才能在不牺牲安全或性能的前提下应对可持续发展的需求?

 

 

我们为能源转型提供的解决方案

 

UL Solutions 一直秉持安全电气化的核心理念。这不仅是我们 1894 年创立时的初衷,至今也作为核心原则,推动着我们去实现更大使命:构建一个更加安全、可靠和可持续的世界。

UL Solutions 致力于助力企业在推动能源转型和绿色交通战略的过程中,将安全作为核心价值。我们是如何做到的?

Icon of a checklist

明确需求

我们的使命是将安全科学应用于生活。UL Solutions 促进监管机构、制造商和关键利益相关方之间的沟通,在全球范围内推动可再生能源、建筑环境和交通运输领域的标准化,以应对我们所处的这个快速变化的时代。

Icon of a computer with an upward trending line graph

增强信心

通过我们标志性的 UL 认证标志,为创新型企业提供综合性的解决方案,助力他们识别和降低潜在风险,从而增强市场对产品的信任。

Lightbulb icon

把握机遇

凭借我们在电气化领域的数十年丰富经验、专业技术和先进实验室设备,我们支持客户的创新之旅,助力他们进行能源转型并提升其潜力。

 

 

为更安全、可持续性的能源转型提供综合解决方案

Overhead view of a wind turbine

电力脱碳

我们为各大规模的电力生产商及其合作伙伴提供软件、指导和支持服务,以助力减少可再生能源项目的不确定性,助力其实现向清洁能源转型。

了解详情
Two engineers having a discussion in front of pipes at a gas storage plant

更安全、更可持续的储能系统

我们认识到电池储能的变革潜力,并提供综合解决方案,以助力在制造、安装和使用的各个阶段识别和降低风险。

了解详情
Wind turbines positioned on a plain next to electric grid towers

能源转型中的电网现代化

我们通过一系列验证和测试服务,助力推动电网向现代化、分布式转型,并确认电网是否合规,以推动电网集成。

了解详情
Upward view of trees against glass skyscrapers

能源转型与建筑环境

我们为客户提供有关新兴标准和技术的综合性见解,助力他们安全提升能源韧性。

了解详情
Person plugging their electric vehicle into a charger

交通运输脱碳

我们为汽车和出行领域的创新者提供先进的软件、培训和咨询服务,助力提升电动汽车的供应能力,同时保障安全性。

了解详情

我们致力于推动能源转型 

在严峻的气候危机面前,全球发明家们致力于在清洁能源生产、储存与传输、脱碳交通基础设施以及建筑环境方面实现突破性进展。 

尽管这些进展至关重要,但我们必须提早、主动预设和应对可能危害人员、财产和数据的安全威胁。 

下载能源转型手册

与我们的专家面对面

Kenneth Boyce

副总裁,首席工程师

Ken Boyce 在 UL Solutions 长达 40 年的职业生涯中,推动了多个行业在安全科学领域工程方法的发展,涵盖了可再生能源的生产、储存与传输。他对安全科学的多个领域充满热情,尤其是在应对气候变化和鼓励年轻人投身科学、技术、工程和数学 (STEM) 职业方面表现出极大的热忱。

更多关于 Ken 的信息
X

Get connected with our sales team

Thanks for your interest in our products and services. Let's collect some information so we can connect you with the right person.

Please wait…
'; let submitButton = $('form.mktoForm .mktoButtonWrap .mktoButton'); submitButton.prop("disabled", true); submitButton.append(loadingHTML); // Ocp-Apim-Subscription-Key: '***'. var $ocpKey = drupalSettings.ul_marketo_validate_key; var $ocpUrl = drupalSettings.ul_marketo_validate_url; var $ocpEnv = drupalSettings.ul_marketo_validate_env; if (submitCount > 1 || isResponseSuccess == true) { isResponseHandled = true; form.submittable(true); console.log("NO.10 submitCount > 1: form.submit() "); submitButton.click(); } else { var email = form.vals().Email; var phone = (form.vals().Phone) ? (form.vals().Phone) : '18472728800'; var country = (form.vals().Country) ? (form.vals().Country) : 'United States'; var countryCode = (phone == '18472728800') ? 'US' : getCountryCode(country); var $emailMsg = drupalSettings.ul_marketo_validate.email; var $phoneMsg = drupalSettings.ul_marketo_validate.phone; console.log("paramsDebug:", paramsDebug); sendingData = JSON.stringify({ 'Input_Email': email, 'Input_Phone': phone, 'Input_ISO2_Country_Code': countryCode }); console.log('URL, debug missing button:', $ocpUrl); console.log("Sending Data to API service (ajax):", sendingData); // API call for validate email/phone/country. var sendDate = (new Date()).getTime(); var responseTimeMs = sendDate; // Start a timer to handle a 3-second response timeout setTimeout(function() { if (!isResponseHandled) { isResponseHandled = true; // Handle the assumed "success" due to timeout here console.log('No response within timeout, proceeding with default validation success.'); $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); // set form to be submittable here $('#valSpinner').remove(); submitButton.prop("disabled", false); // Setup status as Timeout instead of Unknown. emailAddressStatus = "Timeout"; phoneNumberStatus = "Timeout"; phoneNumberValidated = "Timeout"; form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); form.submittable(true); isResponseSuccess = true; let receiveDate = (new Date()).getTime(); responseTimeMs = (receiveDate - sendDate) / 1000; console.log("setTimeout: " + responseTimeMs + " seconds."); submitButton.click(); } }, paramsDebug.timeout * 1000); //END setTimeout $.ajax({ url: $ocpUrl, type: 'POST', data: sendingData, headers: { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': $ocpKey, }, success: function (response) { $('#valSpinner').remove(); submitButton.prop("disabled", false); phoneNumberValidated = response.Validated_Phone_Number; if (!isResponseHandled) { isResponseHandled = true; // **** Handle the validation response console.log("API Response Data: ", response); var emailCode = response.Email_Validation_Status_Number; var phoneCode = response.Phone_Validation_Status_Number; // Add values into two status fields. if (emailValidCode.hasOwnProperty(emailCode)) { emailAddressStatus = emailValidCode[emailCode]; } else { // API error code doesn't exist, set defaul. emailAddressStatus = emailValidCode['300']; } if (phoneValidCode.hasOwnProperty(phoneCode)) { phoneNumberStatus = phoneValidCode[phoneCode]; } else { // API error code doesn't exist, set defaul. phoneNumberStatus = phoneValidCode['301']; } if (emailAddressStatus.indexOf("email_not") != -1) { emailAddressStatus = 'Invalid'; } else if(emailAddressStatus == 'valid') { emailAddressStatus = 'Valid'; } if (phoneNumberStatus.indexOf('invalid_') != -1) { phoneNumberStatus = 'Invalid'; } else if(phoneNumberStatus == 'valid') { phoneNumberStatus = 'Valid'; } console.log('form.emailAddressStatus ' + emailAddressStatus); console.log('form.phoneNumberStatus ' + phoneNumberStatus); console.log('form.phoneNumberValidated ' + phoneNumberValidated); if (validEmailCode.includes(emailCode) && validPhoneCode.includes(phoneCode)) { // Remove the loading spinner. $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); $('#valSpinner').remove(); submitButton.prop("disabled", false); console.log("NO.1.1 VALID OK submitCount = " + submitCount); isResponseSuccess = true; form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); form.submittable(true); submitButton.click(); } // API valid code is not "valid". else { form.submittable(false); console.log("NO.1.2 Submittable false : count= " + submitCount + " validateOrigin " + validateOrigin + " isResponseSuccess " + isResponseSuccess ); // Set the invalid message in language translation. var msgEmailStatus = ""; if (!validEmailCode.includes(emailCode)) { if (emailCode == '300' || emailCode == '400') { msgEmailStatus = $emailMsg.email_not_valid; } else if (emailCode == '310' || emailCode == '500' ) { msgEmailStatus = $emailMsg.email_not_accept; } else { msgEmailStatus = "Unknown"; } console.log("NOT validEmailCode: " + msgEmailStatus); errEmail = ''; $('#Email').after(errEmail); form.submittable(false); } // Set the invalid message in language translation. var msgPhoneStatus = "" if (!validPhoneCode.includes(phoneCode)) { msgPhoneStatus = $phoneMsg[phoneValidCode[phoneCode]]; console.log("NOT validPhoneCode: " + msgPhoneStatus); errPhone = ''; $('#Phone').after(errPhone); form.submittable(false); } console.log('msgEmailStatus:', msgEmailStatus); console.log('msgPhoneStatus:', msgPhoneStatus); // Remove the loading spinner. $('#valSpinner').remove(); submitButton.prop("disabled", false); console.log("NO.1.6 Submittable false, count= " + submitCount); form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); // 2nd API call and subit form. if (submitCount >= 1) { $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); isResponseSuccess = true; form.submittable(true); console.log("NO.1.8 : 2nd Submit:: submittable=true && count=1 : " + submitCount); if (submitCount==1) { submitButton.click(); } } } //END if{} else{}. }//END if (!isResponseHandled) // Calculate the time comsumed for the API call. let receiveDate = (new Date()).getTime(); responseTimeMs = (receiveDate - sendDate) / 1000; console.log("NO.1.9 : AJAX success: Time for API call: " + responseTimeMs + " seconds."); submitCount++; }, //END success: function(); // API call error response. error: function (error) { $('#valSpinner').remove(); submitButton.prop("disabled", false); if (!isResponseHandled) { isResponseHandled = true; $('#valSpinner').remove(); submitButton.prop("disabled", false); // 2nd API call and subit form. if ( submitCount >= 1 ) { $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); form.submittable(true); isResponseSuccess = true; if ( submitCount == 1 ) { form.submittable(true); } } // Handle AJAX error console.log('**** 2 ajax error. submitCount = ' + submitCount); console.log(error); // Calculate the time comsumed for the API call. let receiveDate = (new Date()).getTime(); responseTimeMs = (receiveDate - sendDate) / 1000; console.log("NO.2.3 AJAX error: Time for API call: " + responseTimeMs + " seconds."); } submitCount++; // Error status 500, then submit the form. submitButton.click(); } //END error: function(); }); //END $.ajax; if (isResponseSuccess) { console.log("NO.8.0 submittable(true)"); form.submittable(true); } } //END: if (submitCount > 1) else // Setup the form.vals and form.submittable; form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); } //END: if (validateOrigin && (marketoBundle)) else { // For Event form and Newsletter form. if (validateOrigin === true){ form.submittable(true); } } }); //END form.onValidate() // Success callback() form.onSuccess(function(values, followUpUrl){ // Debug Phone/Email validation. console.log("NO.9.1 onSuccess: submittable = " + form.submittable()); console.log(form.getValues()); // Track analytics. if (typeof dataLayer !== 'undefined'){ dataLayer.push({ event: drplMkto.dataLayerEvent, mktoFormId: form.getId(), 'FormValues': cleanFormVals(form.getValues()), 'FormFields': form.allFieldsFilled(), 'Submittable': form.submittable() }); } // If function exists, delete UTM cookie: if(typeof _deleteUtmCookie === "function"){ _deleteUtmCookie(); } // Marketo Modal "Thank You" message: if(use_post_submit_mssg){ $('html, body').animate({ scrollTop: 0 }, 'slow'); $('.mkto-presubmit').addClass('hidden'); $('.mktoModalContent').addClass('mkto_thnx_center'); $('.mktoModalMask').addClass('not_clicable'); $('.mkto-postsubmit').removeClass('hidden'); $('.mktoButton').removeAttr('disabled').text(drupalSettings.marketo.button_text); $('.mktoForm')[0].reset(); grecaptcha.reset(); } // Else, redirect user: else { window.location.href = drplMkto.success_url; } // IMPORTANT: Return false to prevent further code execution. return false; }); //END form.onSuccess. }); })(jQuery, drupalSettings.marketo);