Padmi

MES Software Engineer

CharlottePosted 1 month ago
Software engineeringUnspecified
Apply at Compunnel

Opens the source posting on staffline.compunnel.com

Source description

About the role

View original

Upload Resume

  • { margin: 0; padding: 0; outline: 0; border: 0 }

body { font-family: "open sans","Helvetica Neue",Helvetica,Arial,sans-serif; background-color: #011f4b; font-size: 12px; color: #333 !important }

.full_width { width: 100%; float: left }

#uploadResumeCandidateOuter header .headerTop { padding: 1em 5em 1em 2.5em; background: #fff; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; -webkit-transition: all .3s ease-in-out; transition: all .3s ease-in-out; -webkit-box-align: center; -ms-flex-align: center; align-items: center; box-shadow: 0 1px 5px rgba(0,0,0,.2) }

#uploadResumeCandidateOuter .logo { float: left; font-size: 0; position: relative; z-index: 2 }

#uploadResumeCandidateOuter header .logo img, #uploadResumeCandidateOuter header .logo svg { -webkit-transition: all .3s ease-in-out; transition: all .3s ease-in-out; height: 60px }

#jobdetailsContent { background: #fff }

.jobDetailsWrapper { max-width: 1134px; margin: 0 auto }

.jobDetailsWrapper h2 { font-size: 2.3em; color: #002d69; font-weight: 600; margin-bottom: 30px; margin-top: 30px }

.jobDetailsWrapper .buttonFooter { text-align: right; border: 0; padding-top: 25px }

.btn.btn-nursedeck.back { color: #646464 !important; border: 2px solid #646464 !important }

.btn.btn-nursedeck.back:active, .btn.btn-nursedeck.back:focus, .btn.btn-nursedeck.back:hover { background-color: #646464; color: #fff !important }

.btn.slpback { background-color: #646464 }

.btn.slpback:active, .btn.slpback:focus, .btn.slpback:hover { background-color: #646464 }

.jobdetail h3 { margin-top: 5px; font-size: 16px; font-weight: 600 }

.jobDetailsWrapper .submitResumeSec { border: 1px solid #e5e6e7; box-shadow: inset 0 1px 1px rgba(0,0,0,.075) }

.jobDetailsWrapper .col-md-5.control-label { text-align: left; font-weight: 400; margin: 0; margin-top: 5px }

.form-group { margin-bottom: 15px }

.jobDetailsWrapper .col-md-5.control-label span { color: red }

.p-h-md { padding: 25px 0 }

.submitCandi_list li .fa.fa-circle { color: #19967d }

.submitResumeSec > ul { padding: 20px 1.5em; list-style: none; margin-bottom: 10px; }

.submitResumeSec > ul > li { padding-left: 10px; }

.submitResumeSec .descHeight { height: auto !important; }

.jobDetailsWrapper .col-md-3.control-label { text-align: left; font-weight: 400; margin: 0; margin-top: 5px; width: 20% }

.jobDetailsWrapper .col-md-9 { width: 80% }

.upLoadResumeWindow { padding-top: 15px; margin-top: 15px; border-top: 1px solid #e5e6e7 }

.submitCandi_header { width: 100%; float: left; padding-bottom: 0 }

.submitCandi_header h3 { color: #0c7cba; font-size: 2em; margin: 0; display: block; line-height: normal }

.submitCandi_header span { font-size: 1.3em; margin: 0; display: block; line-height: normal }

.submitCandi_list { width: 100%; float: left; padding: 1em 0; text-align: left; max-width: 56em }

.submitCandi_list li { display: inline-block; margin-right: 3em; margin-bottom: 2em }

.submitCandi_list li:last-child { margin-right: 0 }

.submitCandi_list li i { display: inline-block; font-size: 1.15em }

.submitCandi_list li p { display: inline-block; margin: 0 0 0 .1em; vertical-align: top; font-size: 1.1em; line-height: 1.3em }

.submitCandi_list li p span { font-size: .9em }

.submitCandi_list li p label { font-weight: 600 }

.submitCandi_list li .fa.fa-circle { color: #19967d }

.submitCandi_list li .fa.fa-circle.InactiveStage { color: red }

.submitCandi_list li .fa.fa-circle.HoldStage { color: orange }

.page-heading .buttonFooter { border-top: none; margin-top: 20px }

.buttonFooter .btn { width: 102px; padding: 6px 12px; margin-right: 5px; font-size: 14px; border: 1px solid transparent; display: inline-block; font-weight: 400; line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; background-color: #144991; touch-action: manipulation; cursor: pointer; user-select: none; color: #fff !important; background-image: none; border-radius: 4px }

.buttonFooter .btn.close_btn { border: 1px solid #d2d2d2 }

.btn.slpback { background-color: #646464 }

.fixedBTN { z-index: 99 }

.btnFixed { width: 96%; padding: 5px 15px; width: calc(100% - 70px); display: block; right: 0 }

.form-control, .single-line { background-color: #fff; background-image: none; border: 1px solid #e5e6e7; border-radius: 4px; color: inherit; display: block; padding: 4px 5px; transition: border-color .15s ease-in-out 0s,box-shadow .15s ease-in-out 0s; width: 100%; font-size: 12px; height: 28px; transition: all .3s }

.form-control[disabled]:focus, .form-control[disabled]:hover, .form-control[readonly]:focus, .form-control[readonly]:hover, fieldset[disabled] .form-control:focus, fieldset[disabled] .form-control:hover { border: 1px solid #e5e6e7 }

.has-success .form-control { border-color: #1ab394 }

.has-warning .form-control { border-color: #f8ac59 }

.has-error .form-control { border-color: #ed5565 !important }

.valError { color: #ed5565; font-size: 10px; display: block; text-align: left }

.loaderSection { background: rgba(51,51,51,.35); height: 100%; position: fixed; top: 0; width: 100%; left: 0; display: none; z-index: 99999 }

.container { padding: 15px 25px; max-width: 330px; border-radius: 8px; -webkit-border-radius: 8px; position: fixed; margin: 10px 0; top: 4px; right: 13px !important; z-index: 99999; display: none }

.container p { color: #fff; font: normal 16px/18px Arial,Helvetica,sans-serif }

.container b { border-radius: 50%; -webkit-border-radius: 50%; background: #479248; width: 33px; height: 34px; position: absolute; padding: 5px 0 0 5px; left: -15px; top: 16%; bottom: 30%; border: 2px solid #fff }

.cross { background: #cc3633; display: none }

.cross b { background: #bd3927; top: 18%; cursor: pointer }

.warning { background: #f8ac59 }

.warning b { background: #ddd; top: 18% }

.rightcontainer { background: #479248 }

Submit Resume

Back Submit

MES Software Engineer

North Carolina, Charlotte

07/24/2026

Contract

Active

Job Description:

plaintext JOB SUMMARY Join us as an MES Software Engineer and play a key role in shaping the digital manufacturing landscape across a global environment. In this role, you will design, develop, integrate, and support Siemens Opcenter Execution (MES) solutions that enable reliable shop floor operations, streamline manufacturing processes, and connect critical systems across the enterprise. This is an opportunity to work at the intersection of software engineering, manufacturing operations, and system integration, partnering with business leaders, plant users, and IT teams to deliver scalable, high-impact solutions in a fast-paced production environment. This role requires a seasoned, hands-on engineer who can work independently, contribute strong technical judgment, and help drive major changes and initiatives across MES and related systems.

Key Responsibilities Design, develop, and support MES applications using .NET, C#, ASP.NET, and Web APIs. Configure and enhance Siemens Opcenter Execution solutions to meet evolving manufacturing and business needs. Build and maintain integrations between MES, enterprise systems, and shop floor equipment to ensure seamless data flow and operational continuity. Partner closely with manufacturing stakeholders, business teams, and IT colleagues to understand requirements and translate them into practical, high-quality technical solutions. Provide technical input on solution design, implementation approach, and system improvements across MES-related initiatives. Help drive major system changes, enhancements, and integration efforts by identifying risks, recommending solutions, and executing effectively. Implement and support messaging technologies such as MSMQ, ActiveMQ, RabbitMQ, or similar tools to enable reliable communication across manufacturing systems. Ensure the integrity, consistency, and reliability of data across integrated applications and platforms. Troubleshoot complex issues in production and non-production environments, identify root causes, and implement effective long-term solutions. Test and validate applications, integrations, and system changes to ensure performance, stability, and business readiness. Contribute to project planning, technical estimates, and delivery schedules to support successful implementation of MES initiatives. Create and maintain clear technical documentation and provide user support and knowledge sharing as needed. Participate in an on-call support rotation after onboarding and training are complete.

Required Qualifications Bachelor’s degree in Computer Science, Information Technology, Information Systems, Engineering, or a related field. 7+ years of experience developing software solutions using .NET, C#, and ASP.NET. Experience building and supporting enterprise applications using RESTful APIs and modern integration patterns. Hands-on experience with messaging technologies such as MSMQ, ActiveMQ, RabbitMQ, or similar middleware. Strong understanding of software engineering fundamentals and the Software Development Life Cycle (SDLC). Experience with source control and development tools such as Git, Azure DevOps/TFS, or similar platforms. Strong understanding of relational databases such as Oracle or SQL Server. Experience working in or supporting systems within a 24/7 manufacturing, industrial, or operational environment. Demonstrated ability to work independently, manage complex technical work, and contribute to large-scale system changes. Strong analytical, problem-solving, and communication skills, with the ability to work effectively across technical and business teams.

Preferred Qualifications

Experience with Siemens Opcenter Execution Designer and Portal (formerly Camstar). Experience working with other Manufacturing Execution Systems (MES) platforms. Experience contributing to or driving significant system implementations, upgrades, or integration initiatives. Familiarity with TDD, CI/CD, and automated deployment practices. Experience with CI/CD tools such as GitLab, GitHub Actions, Jenkins, or similar. Experience working in a Scrum/Agile team environment. Familiarity with modern developer productivity tools, including AI-assisted coding tools. A track record of delivering solutions that are both technically sound and aligned with business needs. The ability to adapt quickly, manage competing priorities, and thrive in a dynamic manufacturing environment.

Why This Role Matters This role directly supports the systems and integrations that keep manufacturing operations running efficiently and reliably. You’ll have the opportunity to work on meaningful technical challenges, contribute to major MES initiatives and global standardization efforts, and help modernize the digital backbone of manufacturing execution.

Email ID *

This field is required Please enter valid emailId.

Cell phone *

This field is required Please enter valid cell phone.

First Name *

This field is required Please enter valid first name.

Last Name *

This field is required Please enter valid last name.

Upload Resume

Resume Title *

This field is required

Comments for Recruiter

This field is required

.

.

.

$(document).ready(function () { var JobId = '5851256'; if (JobId == '') { $(".jobdetail").hide(); $("#headertext").html('Upload Resume'); } else { $("#headertext").html('Submit Resume'); } });

function fillEmailId() { if ($.trim($("#txtEmailIdtoSearch").val()) == "") { showvalidation($("#txtEmailIdtoSearch")); $(".loaderSection").hide(); return false; } else { var Reg = new RegExp("^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)@[A-Za-z0-9]+(\.[A-Za-z0-9]+)(\.[A-Za-z]{2,})$"); var matches = $.trim($("#txtEmailIdtoSearch").val()).match(Reg); if (!matches) { hidevalidation($("#txtEmailIdtoSearch")); showRegExpvalidation($("#txtEmailIdtoSearch")); return false; } else { hideRegExpvalidation($("#txtEmailIdtoSearch")); hidevalidation($("#txtEmailIdtoSearch")); } } } function fillFirstName() { if ($.trim($("#txtFirstName").val()) == "") { showvalidation($("#txtFirstName")); $(".loaderSection").hide(); return false; } else { var Reg = new RegExp("^[a-zA-Z][0-9a-zA-Z .,'-]$"); if (!Reg.test($.trim($("#txtFirstName").val()))) { hidevalidation($("#txtFirstName")); showRegExpvalidation($("#txtFirstName")); return false; } else { hideRegExpvalidation($("#txtFirstName")); hidevalidation($("#txtFirstName")); } } } function fillLastName() { if ($.trim($("#txtLastName").val()) == "") { showvalidation($("#txtLastName")); $(".loaderSection").hide(); return false; } else { var Reg = new RegExp("^[a-zA-Z][0-9a-zA-Z .,'-]$"); if (!Reg.test($.trim($("#txtLastName").val()))) { hidevalidation($("#txtLastName")); showRegExpvalidation($("#txtLastName")); return false; } else { hideRegExpvalidation($("#txtLastName")); hidevalidation($("#txtLastName")); } } } function fillCandidateComments() { if ($.trim($("#txtCandidateComments").val()) == "") { showvalidation($("#txtCandidateComments")); $(".loaderSection").hide(); return false; } else { hidevalidation($("#txtCandidateComments")); } } function fillPhone() { if ($.trim($("#txtPhone").val()) == "") { showvalidation($("#txtPhone")); $(".loaderSection").hide(); return false; } else { var Reg = /(?\d{3})?-? *\d{3}-? *-?\d{4}/g; var matches = $.trim($("#txtPhone").val()).match(Reg); if (!matches) { hidevalidation($("#txtPhone")); showRegExpvalidation($("#txtPhone")); return false; } else { hideRegExpvalidation($("#txtPhone")); hidevalidation($("#txtPhone")); } } } function fillResumeTitle() { if ($.trim($("#txtDefDocTitle").val()) == "") { showvalidation($("#txtDefDocTitle")); $(".loaderSection").hide(); return false; } else { hidevalidation($("#txtDefDocTitle")); } } function showRegExpvalidation(ctrl) { $(ctrl).parent().addClass("has-error"); $(ctrl).parent().find("span.freg").show(); $(".loaderSection").hide(); } function hideRegExpvalidation(ctrl) { $(ctrl).parent().removeClass("has-error"); $(ctrl).parent().find("span.freg").hide(); $(".loaderSection").hide(); } function showvalidation(ctrl) { $(ctrl).parent().addClass("has-error"); $(ctrl).parent().find("span.freq").show(); $(".loaderSection").hide(); } function hidevalidation(ctrl) { $(ctrl).parent().removeClass("has-error"); $(ctrl).parent().find("span.freq").hide(); $(".loaderSection").hide(); } function ValidateData() { var isProceedToSave = true; $(".loaderSection").show();

if ($.trim($("#txtEmailIdtoSearch").val()) == "") { showvalidation($("#txtEmailIdtoSearch")); isProceedToSave = false; } if ($.trim($("#txtFirstName").val()) == "") { showvalidation($("#txtFirstName")); isProceedToSave = false; } else { var Reg = new RegExp("^[a-zA-Z][0-9a-zA-Z .,'-]$"); if (!Reg.test($.trim($("#txtFirstName").val()))) { hidevalidation($("#txtFirstName")); showRegExpvalidation($("#txtFirstName")); isProceedToSave = false; } } if ($.trim($("#txtLastName").val()) == "") { showvalidation($("#txtLastName")); isProceedToSave = false; } else { var Reg = new RegExp("^[a-zA-Z][0-9a-zA-Z .,'-]$"); if (!Reg.test($.trim($("#txtLastName").val()))) { hidevalidation($("#txtLastName")); showRegExpvalidation($("#txtLastName")); isProceedToSave = false; } } if ($.trim($("#txtPhone").val()) == "") { showvalidation($("#txtPhone")); isProceedToSave = false; } if (isProceedToSave) { var fileUpload = $("#FileUpload2").get(0); var files = fileUpload.files; if (files.length == 0) { ShowErrorNotification("Please attach a resume."); $(".loaderSection").hide(); isProceedToSave = false; } return isProceedToSave; } else { ShowErrorNotification("Whoops! Looks like you've missed entering some data. Please enter data in the highlighted fields."); $(".loaderSection").hide(); window.scrollTo(10, 10); return isProceedToSave; } }

function SubmitResume() { if (ValidateData()) { var FileName = ''; var JobId = '0';

if ('5851256' != '') JobId = '5851256';

var txtemailid = $("#txtEmailIdtoSearch").val(); $.ajax({ url: '/Support/GetCandidateDetailByEmailId', type: "GET", dataType: "JSON", data: { CandidateEmail: txtemailid, JobId: JobId }, success: function (data) { if (data == "exists") { $(".loaderSection").hide(); ShowErrorNotification("You are already submitted to this position."); return false; } else //If email does not exist { if (data.Resume_Id != undefined && data.Resume_Id != null && parseInt(data.Resume_Id) > 0) { SubmitDocument(data.Resume_Id, 0, 1); } else { UploadDocUsingAPI(); } } } }); } else $(".loaderSection").hide(); } function UploadDocUsingAPI() { var fileUpload = $("#FileUpload2").get(0); var files = fileUpload.files; if (files.length == 0) { ShowErrorNotification("Please attach a resume."); $(".loaderSection").hide(); return false; }

if (files.length > 0) { if (window.FormData !== undefined) { var data = new FormData(); for (var i = 0; i 0) { SubmitDocument(data.candidateId, 1, 0); // $(".loaderSection").hide(); } else { ShowErrorNotification(data.EventStatusStatus); $(".loaderSection").hide(); } //callback(data.UploadedFileName); }, error: function (err) { ShowErrorNotification(err.statusText); $(".loaderSection").hide(); window.scrollTo(10, 10); return false; } }); } else { alert("This browser doesn't support HTML5 file uploads!"); } } } async function SubmitDocument(Resume_Id, Datafrom, IsExist) { var FileName = ''; var JobId = '0'; var RecId = '0'; var Source = '4414'; var EntityGroup = '2321'; var SubSource = '13304';

if ('5851256' != '') JobId = '5851256';

if ('0' != '') RecId = '0';

if (Datafrom == 0) { // Wait for the document upload to complete FileName = await UploadCandidateDoc(); if (!FileName) { ShowErrorNotification("Whoops! Looks like some issues in uploading resume. Please try again."); return; // Exit if upload failed } } var ResumeDetails = $.param({ Email_Id: $("#txtEmailIdtoSearch").val(), FirstName: $("#txtFirstName").val(), LastName: $("#txtLastName").val(), Phone: $("#txtPhone").val(), CandidateComments: $("#txtCandidateComments").val(), JobId: JobId, UploadedFileName: FileName, ResumeId: Resume_Id, Datafrom: Datafrom, RecId: RecId, IsExist: IsExist, Source: Source, EntityGroup: EntityGroup, ResumeFromJobPortal: 1, UploadedDocName: $.trim($("#txtDefDocTitle").val()), SubSource: SubSource }); $.ajax({ url: '/Support/UploadResumeForJobPortal', type: "POST", dataType: "JSON", data: ResumeDetails, success: function (data) { if (data.headerCode == "20001") { ShowSaveNotification(data.EventStatusStatus); $(".loaderSection").hide(); window.scrollTo(10, 10); } else if (data.headerCode == "10001") { ShowErrorNotification(data.data.errorDetail); $(".loaderSection").hide(); window.scrollTo(10, 10); } else if (data.headerCode == "20003") { ShowErrorNotification(data.EventStatusStatus); $(".loaderSection").hide(); window.scrollTo(10, 10); } else { ShowErrorNotification(data.PortalJob_Status); $(".loaderSection").hide(); window.scrollTo(10, 10); } } }); }

// Function to convert a file to base64 async function fileToBase64(file) { var base64String; const createPromise = new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result); reader.onerror = (error) => reject(error); });

await createPromise.then((promisedata) => { base64String = promisedata; });

return base64String; }

function getFileExtension(filename) { if (!filename || !filename.includes('.')) { return ''; } return filename.split('.').pop(); }

function getFileName(filename) { if (!filename || !filename.includes('.')) { return filename; } return filename.split('.').slice(0, -1).join('.'); }

//Upload Document - Returns Promise async function UploadCandidateDoc() { var fileUpload = $("#FileUpload2").get(0); var files = fileUpload.files;

if (files.length == 0) { ShowErrorNotification("Please attach a resume."); $(".loaderSection").hide(); return null; }

if (files.length > 0) { if (window.FormData !== undefined) { var strFileNameWithoutExt = getFileName(files[0].name); var strFileExt = getFileExtension(files[0].name); var strNewFileName = strFileNameWithoutExt.replace("//", "").replace("+", "").replace("*", "").replace(" ", "").replace(":", "").replace(".", "") + "_" + "7" + "24" + "2026" + "17" + "18" + "29" + "." + strFileExt;

var fileBase64String; if (files[0]) { fileBase64String = await fileToBase64(files[0]); } var data = JSON.stringify({ docType: 9001, fileName: strNewFileName, encodedData: fileBase64String.split(',')[1], pjEmployeeId: null, placementTrackerId: null, employeeDetailsId: null });

var encodedData = btoa(data);

// Return a Promise instead of using callback return new Promise((resolve, reject) => { $.ajax({ type: "POST", url: 'https://stafflineapi.compunnel.com/' + "document/upload", contentType: "application/json; charset=utf-8", data: JSON.stringify({ data: encodedData }), timeout: 30000, json: true, headers: { "Authorization": 'qwerty~!@', }, success: function (result) { resolve(strNewFileName); }, error: function (err) { ShowErrorNotification(err.statusText); $(".loaderSection").hide(); window.scrollTo(10, 10); reject(null); } }); }); } else { alert("This browser doesn't support HTML5 file uploads!"); return null; } } return null; } $(function () { if ($('.formSection').offset() != undefined) { var stickyHeaderTop = $('.formSection').offset().top; $(window).scroll(function () { if ($(window).scrollTop() > stickyHeaderTop - 100) { $('.fixedBTN').addClass('btnFixed').css({ position: 'fixed', top: '65px', margin: '0px' });

} else { $('.fixedBTN').removeClass('btnFixed').css({ position: 'static', top: '0px', 'margin-top': '20px' });

} }); }; });

function ShowSaveNotification(strText) { $('.rightcontainer').find('p').text(strText); $('.rightcontainer').css({ 'opacity': '0', top: "50px" }).show(); $('.rightcontainer').stop().animate({ 'opacity': '1', top: "-=50px" }, 1000, function () { $(this).delay(3000).fadeOut(900); }); }

function ShowErrorNotification(strText) { $('.cross').find('p').html(strText); $('.cross').css({ 'opacity': '0', top: "50px" }).show(); $('.cross').stop().animate({ 'opacity': '1', top: "-=50px" }, 1000, function () { $(this).delay(3000).fadeOut(900); }); //$('.cross').show(); }

function ShowWarningNotification(strText) { $('.warning').find('p').html(strText); $('.warning').css({ 'opacity': '0', top: "50px" }).show(); $('.warning').stop().animate({ 'opacity': '1', top: "-=50px" }, 000, function () { $(this).delay(4000).fadeOut(900); }); }

One address, no account. We’ll tell you when matching roles go live.

More at Compunnel

Related open roles

View all roles