How to Detect Compressed Air, Gas + Vacuum Leaks: AND Find Hidden Profits (2024)

Energy efficiency, Leak detection, Fundamentals, Energy management, Troubleshooting

For industrial plants and facilities, compressed air, gas and vacuum systems are a vital source of converted energy. Easier than other resources such as electricity, compressors are everywhere in today’s factories. They run machines, tools, robotics, lasers, product handling systems, and much more.

Yet many compressed air, gas and vacuum systems are compromised by wear and poor maintenance practices, which contribute to the greatest waste of all—the ever-present leaks. These leaks can be hidden behind machines, at connection points, overhead in fixed pipes, or in cracked pipes or worn hoses. The waste adds up quickly and can even lead to downtime.

The high cost of wasted air

According to the U.S. Department of Energy, a single 1/8” (3mm) leak in a compressed air line can cost upwards of $2,500 a year. The U.S. Department of Energy estimates an average U.S. plant that has not been well maintained, can waste 20 % of its total compressed air production capacity through leaks. The New Zealand government, as part of its Target Sustainability project, estimates that system leaks can account for 30 to 50 % of a compressed air system’s capacity. Quick detection of compressed air, gas and vacuum leaks is a single factor in finding hidden profits. Air leaks can also lead to capital expenses, rework, downtime or quality issues and increased maintenance costs.

To make up the pressure loss due to leaks, operators often overcompensate by buying a larger compressor than is needed, which requires significant capital costs along with increasing energy costs. System leaks can also cause air dependent equipment to fail due to low system pressure. That can lead to production delays, unplanned downtime, quality issues, decreased service life, and increased maintenance due to unnecessary cycling of compressors.

The maintenance manager of one United States manufacturer, for instance, says low pressure in one of their air torqueing tools can potentially lead to product defects. “Mis-torqued units, either under torqued or over torqued, can lead to recalls. That also leads to more man hours put into something that should have been a very standard process,” he says. “It’s money out the door in lost profits and lost units. In the worst-case scenario we also wind up with lost demand because we weren't able to deliver.”

It’s no wonder that utilities, industry, and government all target compressed air systems as a potential source of cost savings. Leaks lead to waste. Correcting those leaks can save the operator money and prevent the utility from having to build additional capacity into their system.

Finding and fixing leaks isn’t easy

Many plants and facilities do not have a leak detection program. Finding and fixing leaks isn’t easy. Quantifying the amount of waste and determining the cost, requires energy specialists or consultants who use energy analyzers and loggers to audit your air systems. By systematically calculating the annual cost savings of eliminating the leaks, they can make a strong business case for proceeding on such a project.

Energy audits of compressed air systems are often conducted through partnerships with industry, government, and nongovernmental organizations (NGOs). One such partnership, the Compressed Air Challenge (CAC) is a voluntary collaboration of those types of groups. Its single goal is to provide product-neutral information and educational materials to help industries generate and use compressed air at maximum sustainable efficiency.

Why ultrasonic leak detection is inefficient

Mainstream leak detection practices are, unfortunately quite primitive. An age-old method is to listen for hissing sounds, which are virtually impossible to hear in many environments and to spray soapy water on the area of the suspected leak, which is messy and can create a possible slipping hazard.

The current go-to tool for finding compressor leaks is an ultrasonic acoustic detector–a portable electronic device that recognizes high frequency sounds associated with air leaks. Typical ultrasonic detectors help find leaks but they’re time consuming to use and repair crews can generally only use them during planned downtime, when maintaining other critical machines might be a better use of their time. These units also require the operator to be located close to the equipment to find leaks, which makes it difficult to use in hard-to-reach areas such as ceilings or behind other equipment.

In addition to the time it takes to find leaks using either soapy water or ultrasonic detectors, there can be safety issues with finding leaks overhead or under equipment using these techniques. Climbing ladders or crawling around equipment can pose dangers.

Compressed air leak detection game changer

What if there were a leak detection technology that could pinpoint the precise location of a leak from up to 50 meters away, in a noisy environment, without shutting down equipment? Fluke has developed an industrial imager that does just that. Industrial maintenance managers are calling the Fluke ii900 Sonic Industrial Imager (Acoustic Imager), a “gamechanger” in the pursuit of finding compressed air leaks.

This new sonic industrial imager—which can detect a broader range of frequencies than traditional ultrasonic devices–uses new SoundSight™ technology to deliver enhanced visual scans of air leaks, similar to the way infrared cameras detect hotspots.

The ii900 Fluke Industrial Acoustic Imager includes an acoustical array of tiny super sensitive microphones that detect both sonic and ultrasonic sound waves. The ii900 recognizes a sound source at a potential leak location and then it applies proprietary algorithms that interpreter the sound as a leak. The results produce a SoundMap™ image—a color map superimposed over the visible light image—showing exactly where the leak is. The results are displayed on the 7” LCD screen as a still image or a real time video. The ii900 can save up to 999 image files or 20 video files for documentation or compliance purposes.

Large areas can be scanned quickly which helps locate leaks much faster than with other methods. It also allows for filtering on intensity and frequency ranges. A team at a large manufacturing plant recently used two ii900 prototype units to locate 80 compressed air leaks in one day. The maintenance manager said it would have taken them weeks to find that number of leaks using traditional methods. By finding and fixing leaks quickly, the crew also saved potential downtime, which at this plant can cost an estimated $100,000 an hour in lost productivity.

Where to find leaks:

  • Couplings
  • Hoses
  • Tubes
  • Fittings
  • Threaded pipe joints
  • Quick disconnects
  • FRLs (filter, regulator, lubricator combinations)
  • Condensate traps
  • Valves
  • Flanges
  • Packings
  • Pneumatic holding tanks

How much air are you wasting?

The first step in controlling leaks in compressed air, gas and vacuum systems is to estimate your leak load. Some leakage (less than 10 %) is to be expected. Anything beyond that is considered wasteful. The first step is to determine your current leak load so you can use that as a benchmark to compare improvements against.

The best method for estimating leak load is based on your control system. If you have a system with start/stop controls, simply start your compressor when there is no demand on the system—after hours or off shift. Then take several readings of compressor cycles to determine the average time to unload the loaded system. With no equipment running, the unloading of the system is due to leaks.

Leakage (%) = (T x 100) ÷ (T + t)T = onload time (minutes), t = offload time (minutes)

To estimate leak load in systems with more complex control strategies, place a pressure gauge downstream from the volume (V, in cubic feet), including all secondary receivers, mains, and piping. With no demand on the system, except leakage, bring the system up to its normal operating pressure (P1, in psig). Select a second pressure (P2, about half the value of P1) and measure the time (T, in minutes) it takes for the system to drop to P2.

Leakage (cfm free air) = [(V x ( P1 – P2) ÷ (T x 14.7)] x 1.25

The 1.25 multiplier corrects leakage to normal system pressure, thereby accounting for reduced leakage with decreasing system pressure.

Efficiently fixing and repairing leaks can lead to substantial cost reduction for air-dependent businesses. Companies are not only able to save on energy use by repairing leaks but can also improve production levels and extend equipment life.

Chat with ourFluke assistant

Clear Chat

Contact Us

Get 10% off

'; // Append the new message element at the end of the container const botCon = document.querySelector('.bot-message-container'); botCon.appendChild(messageElement); scrollToBottom();}/* Create a helper function to monitor when the bot-content container height is increased. As it is increasing, the winder should scroll with it. */function scrollToBottom() { const botContent = document.querySelector('.bot-content'); botContent.scrollTop = botContent.scrollHeight;}/* Create a helper function for the intro text. This is the first messages found in the bot bot-intro. It is also re-added when we use the clear button */function addInitialBuzz(path) { const botContainer = document.querySelector('.bot-container'); // If the locale storage item buzzLastState is set, we want to set the bot container to that state const lastState = localStorage.getItem('buzzLastState'); if (lastState) { botContainer.className = lastState; } // Path customization getPathCustomization(path); // If the localStorage has chatMessages, replace the bot-message-container with the saved messages instead of any intro text const chatMessages = localStorage.getItem('chatMessages'); if (chatMessages) { const botCon = document.querySelector('.bot-message-container'); botCon.innerHTML = chatMessages; return; } else { // The intro text is added to the bot-intro element const introText = document.querySelector('.bot-intro'); introText.innerHTML = `

Hi, I’m your virtual assistant, I will do my very best to help you navigate all things Fluke related. You can ask me anything!

I’m new and might make a few mistakes. For safe use of Fluke tools, refer to the product manuals, safety sheets, and your company’s safety requirements. To speak with a person, visit our Talk to Sales page. For information on how we handle personal data, see our Privacy Policy

Please note that the use of Fluke’s products requires professional knowledge, skills and training and should only be purchased for use by appropriately qualified professionals.

`; // Promps are and additional message that can be added to the chat window. They are added after the intro text, and addPrompts(path); }}/* Create a helper function to add prompts to the chat window * Prompts are bot messages appended after the into text for specific paths.*/function addPrompts(path) { const validLocales = ['en', 'en-us', 'en-ie', 'en-gb', 'en-ca']; // Example usage if (!isValidHostAndLocale(validLocales)) { // Return the unmodified message if the host or locale is invalid. return; } const botCon = document.querySelector('.bot-message-container'); // Check if a bot-prompts already exists const existingPrompt = botCon.querySelector('.bot.bot-prompts'); if (existingPrompt) { return; } // If path is 6 characters or less, it is assumed to be the homepage if (path.length <= 6) { path = 'home'; } let message; switch (path) { case 'home': message = "

How can I help you today?

" + "

I want to learn more about a product

" + "

I want to purchase a product

" + "

I am looking for product support

" + "

What's new?

"; break; case '/en-us/products/electrical-testing/best-solar-energy-industry-tools': message = "

Thanks for checking out Fluke's solar solutions! How can I help you today?

" + "

I want to learn more about a Fluke solar product(s)

" + "

I want to purchase a product for my solar application

" + "

"; break; case '/en-us/products/calibration-tools/temperature-calibrators': message = "

Thanks for checking out Fluke's Temperature Calibration solutions! How can I help you today?

" + "

I want to learn more about a Fluke Temperature Calibration product(s)

" + "

I want to learn more about Temperature Calibration

"; break; default: return; } const messageElement = document.createElement('div'); messageElement.classList.add('bot', 'bot-prompts'); messageElement.innerHTML = message; botCon.appendChild(messageElement);}function getPathCustomization(path) { const validLocales = ['en', 'en-us', 'en-ie', 'en-gb', 'en-ca']; // Example usage if (!isValidHostAndLocale(validLocales)) { // Dont attempt to fire any path customization if the host or locale is invalid. return; } if (path.length <= 6) { const lastState = localStorage.getItem('buzzLastState'); if (lastState) { return; } botTransitionMid(); scrollToBottom(); // Handle the case when the path is less than 6 characters } else if (path.includes('search/fluke')) { const lastState = localStorage.getItem('buzzLastState'); if (!lastState) { botTransitionMid(); } // Get the content of input.alg-search-input. We'll use this instead of query params because they are more accurate. let searchInput = document.querySelector('input.alg-search-input'); let botInput = document.getElementById('user-input'); // Function to build and insert CTA function buildAndInsertCta(searchValue) { let algoliaContainer = document.querySelector('.alg-full-results'); let builtCta = "

Try the Fluke assistant to learn more about \"" + searchValue + "\"

"; algoliaContainer.insertAdjacentHTML('afterbegin', builtCta); botInput.value = "Please tell me more about " + searchValue; } // If the search input has a value, we want to update the CTA and the bot input field if (searchInput) { // Now find the algolia container we will be adding the CTA to let algoliaContainer = document.querySelector('.alg-full-results'); // If the container exists, we place the CTA and update the value if (algoliaContainer) { // Check to see if .buzz-algolia exists. If it does, we want to update the CTA and the bot input field let existingCta = document.querySelector('.buzz-algolia'); if (!existingCta) { buildAndInsertCta(searchInput.value); } } // Additionally, when the input changes we change the CTA and the bot input field to keep them in sync searchInput.addEventListener('input', function () { let currentCta = document.getElementsByClassName('toc-cta')[0]; if (currentCta) { currentCta.innerHTML = "Try the Fluke assistant to learn more about \"" + searchInput.value + "\""; botInput.value = "Please tell me more about " + searchInput.value; } else { buildAndInsertCta(searchInput.value); } }); // If .buzz-algolia exists, we are gonna add a click event listener to the button let algoliaCta = document.querySelector('.toc-cta'); if (algoliaCta) { algoliaCta.addEventListener('click', function () { // If the bot-container isnt bot-mid or bot-full, we want to transition to bot-mid if (!document.querySelector('.bot-container').classList.contains('bot-mid')) { botTransitionMid(); } sendMessage(botInput.value); // Clear the input field botInput.value = ''; }); } } // Handle the case when the path contains 'search/fluke' } else if ( path.includes('products/electrical-testing/digital-multimeters') || path.includes('en-us/products/calibration-tools/temperature-calibrators') || path.includes('en-us/products/electrical-testing/best-solar-energy-industry-tools') ) { const lastState = localStorage.getItem('buzzLastState'); if (lastState) { return; } botTransitionMid(); scrollToBottom(); // Handle the cases when the path contains specific products }}function getOrGenerateChatId() { let chatId; chatId = localStorage.getItem('chatId'); // If chatId does not exist in localStorage, generate a new one if (!chatId || chatId === '') { chatId = 'chat-' + Date.now() + '-' + Math.floor(Math.random() * 1000); localStorage.setItem('chatId', chatId); } return chatId;}// Clear chat functionfunction clearMessages(path) { localStorage.removeItem('chatMessages'); localStorage.removeItem('chatId'); localStorage.setItem('chatQuestion', 0); // Reset to 0 localStorage.removeItem('buzzLastState'); chatId = getOrGenerateChatId(); sendDataLayer({ 'event': 'chat_bot_event', 'chatId': localStorage.getItem('chatId'), 'reponseCount': localStorage.getItem('chatQuestion'), 'requestType': 'clear_chat' }); const botCon = document.querySelector('.bot-message-container'); // After clearing the chat we want to remove the innerHTML of the bot-message-container, and add the intro text again botCon.innerHTML = ""; addInitialBuzz(path);}function appendSentiment(thumbs, chatId, chatDialogId) { const botCon = document.querySelector('.bot-message-container'); const lastBotMessage = botCon.querySelector('.bot:last-of-type'); if (thumbs) { const botRatingDiv = document.createElement('div'); botRatingDiv.classList.add('bot-rating'); // Insert bot rating div after lastBotMessage lastBotMessage.parentNode.insertBefore(botRatingDiv, lastBotMessage.nextSibling); // Insert buttons inside bot rating div botRatingDiv.innerHTML = ` `; const thumbupElements = botRatingDiv.querySelectorAll('.thumbup'); const thumbdownElements = botRatingDiv.querySelectorAll('.thumbdown'); thumbupElements.forEach((thumbup) => { thumbup.addEventListener('click', function () { chatRating = 1; this.classList.add('responded'); thumbdownElements.forEach((thumbdown) => thumbdown.classList.add('responded-alt')); thumbupElements.forEach((thumbup) => thumbup.style.pointerEvents = 'none'); thumbdownElements.forEach((thumbdown) => thumbdown.style.pointerEvents = 'none'); // Call your sendRating function with appropriate parameters sendRating(chatRating, chatId, chatDialogId) }); }); thumbdownElements.forEach((thumbdown) => { thumbdown.addEventListener('click', function () { chatRating = -1; this.classList.add('responded'); thumbupElements.forEach((thumbup) => thumbup.classList.add('responded-alt')); thumbupElements.forEach((thumbup) => thumbup.style.pointerEvents = 'none'); thumbdownElements.forEach((thumbdown) => thumbdown.style.pointerEvents = 'none'); // Call your sendRating function with appropriate parameters sendRating(chatRating, chatId, chatDialogId) }); }); }}// Function to send user message to Azure Chatbotfunction sendRating(chatRating, chatId, chatDialogId) { const endpoint = 'https://flk-delphiapi-sitegpt-prd-001.azurewebsites.net/v1/chat/ratings'; const payload = { chatId: chatId, dialogId: chatDialogId, chatRating: chatRating, }; const headers = { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '078db2f23dcb4b23a5cb1b6255fc08c8', }; // Add this line at the beginning of your function to record the start time const startTime = new Date(); fetch(endpoint, { method: 'POST', headers: headers, body: JSON.stringify(payload), }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { if (data) { console.log('sent rating ' + chatRating + ' for question ' + chatDialogId); } }) .catch(error => console.error('Error:', error));}function cloudflareTestingPortal(botResponse, timeTakenInSeconds, payload, dataLayerObject) { //Get the hostname const hostname = window.location.hostname; // If the hostname is uat-gpt.fluke.com, add a console message if (hostname === 'uat-gpt.fluke.com') { // Add the botResponse, timeTakenInSeconds, payload, and gtm the respective containers // last-message-right, last-response-right, data-layer-right, payload-right const lastMessageRight = document.querySelector('#last-message-right'); const lastResponseRight = document.querySelector('#last-response-right'); const dataLayerRight = document.querySelector('#data-layer-right'); const payloadRight = document.querySelector('#payload-right'); lastMessageRight.innerHTML = botResponse; lastResponseRight.innerHTML = timeTakenInSeconds; dataLayerRight.innerHTML = JSON.stringify(dataLayerObject); payloadRight.innerHTML = JSON.stringify(payload); }}// We need to pass datalayer stuffies.function sendDataLayer(data) { // Function for event tracking window.dataLayer = window.dataLayer || []; window.dataLayer.push(data);}// For global launch, we are only supporting en-us for many of the Kaizen specific features. function isValidHostAndLocale(validLocales) { // Get the hostname - currently only supported on *.fluke.com. The first path segment is the lang-locale, and we are only supporting en-us at launch const hostname = window.location.hostname; const path = window.location.pathname; const langLocale = path.split('/')[1]; // If the hostname is not 'www.fluke.com' or 'regression.fluke.com', or the langLocale is not in the validLocales array, return false if ((hostname !== 'www.fluke.com' && hostname !== 'regression.fluke.com') || !validLocales.includes(langLocale)) { return false; } // If the hostname and langLocale pass the conditions, return true return true;}
How to Detect Compressed Air, Gas + Vacuum Leaks: AND Find Hidden Profits (2024)
Top Articles
Latest Posts
Article information

Author: Fr. Dewey Fisher

Last Updated:

Views: 5402

Rating: 4.1 / 5 (62 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Fr. Dewey Fisher

Birthday: 1993-03-26

Address: 917 Hyun Views, Rogahnmouth, KY 91013-8827

Phone: +5938540192553

Job: Administration Developer

Hobby: Embroidery, Horseback riding, Juggling, Urban exploration, Skiing, Cycling, Handball

Introduction: My name is Fr. Dewey Fisher, I am a powerful, open, faithful, combative, spotless, faithful, fair person who loves writing and wants to share my knowledge and understanding with you.