MES and Barcodes

Good morning,
We are testing out using a barcode scanner to expedite users entering data into MES. I guess I didn’t realize how many steps the users have to go through. I setup my barcode scanner to auto tab after each scan.

Start Production/Setup Activity:

  1. Click “Login”.
  2. Type/Scan in employee ID, press enter.
  3. Click “Start Production Activity”.
  4. Type/Scan in the job number, then the assembly number, then the operation number.
  5. Click “OK”.
  6. Click “Logout”.

End Activity:

  1. Click “Login”.
  2. Type/Scan in employee ID, press enter.
  3. Choose the correct Active Job from the list.
  4. Click “End Activity”.
  5. Type in number of complete parts (and scrap parts if needed).
  6. Click “Complete” if necessary.
  7. Click “OK”.
  8. Click “Logout”.

How can we make this process faster/easier on our staff? Adding the barcode scanner into the mix does not obviously speed things up. In fact, initially it will slow everyone down as they fiddle with the scanner.

What have others done when using barcodes on job travelers, or other forms? Did you add a customization to make MES more user friendly? Did you create a BPM to help? Did you setup any fancy settings on your scanner like always on, or auto tab? Do you have any other tips or tricks to share?
Thanks!
Nate

2 Likes

If your situation allows, depends on people per station, type of MES station etc…
Let users start multiple sessions, one per employee. Licenses free up after 15min, at least they don’t have to login each time, just walk up and select their window.
Again this may not me a solution on a screen that has more than a couple of employees using it.

1 Like

Neat idea! I see what you mean. We have 3 data collection MES consoles, and about 40 people sharing them. We leave Epicor MES signed in to a single generic user.

Again pending on your situation.
When the user presses Start Setup or Start Production then Job Number Button.
We load a Quick Search which asks for the Resource Group.
A schedule for the Resource Group is displayed.
The user can see the work which is next to prepare for also:
Select the Job to work on and proceed.
So basically we are picking the job off a schedule list so if the schedule changed 5 seconds ago, the operator is getting the most current information.

1 Like

We did some minor customization to mes. In start production they can just scan job, assembly, and operation. Out of the box kinetic mes had problems with this due to the search fields. The scanning is still much faster for us then welders typing. On the login screen they just scan their bar code and no longer have to press OK except the first time of the day I believe, after our customization.

Unfortunately, most of the rest of the items we couldn’t really automate. For us, they need to login, they need to say if they are doing production or indirect work and they need to log out so someone doesn’t actually make chages to the wrong person. In our case we have had enough problems with people accidentally making changes to the wrong things when they don’t pay attention to who is currently signed in. Claiming parts on the wrong thing, clocking a person off a job that is still on it and putting them on a different one while the actual person ends up still on there old job. Completing the wrong job.

For end activity they needed to login, they needed to say what they were no longer doing. They needed to say how many they made, for ours this will check complete itself if the qty needed and produced are equal, they need to say okay to ensure they are done filling out the information and they need to logout for the same reasons as above.

1 Like

In Classic MES it was very important to have the employee photo display so users would not report on someone else’s labor reporting. I see in Kinetic MES the employee photo is no longer displayed.

1 Like

My bad, I see employee photo’s do display in MES.

We have done a lot of barcoding in our MES.

MES Main Form:

We added a text box called ScanValue… the trick is to place it so it is in-focus.

We have barcodes set up for values like:

  • STARTPROD
  • STARTSU
  • STARTREWORK
  • Etc.
    … all of these are printed out and posted next to our kiosks.

The user has to log in. But then can scan a STARTPROD barcode. The scanner has an auto-tab…

This kicks off an onblur event which is pretty complex “switch” event. (one switch for each possible menu selection (startprod, start set-up, start rework, end this, end that, etc.). So, if the scanned value is STARTPROD, it has a condition to verify a user is logged-in and then opens the Start Production slide out.

On our routings/travelers… we created (1) barcode which includes the Job, assembly, and operation separated by a chosen variable “$A” for example. This gives the user only (1) barcode to scan. That value lands in a textbox bound to TransView.ScanValue (or something to that effect).

We have a function which splits this scan and parses the data (based on the above chosen variable) into the target fields. So, with one scan from the routing, the job/assembly/operation is all filled in.

They can then scan their Resource ID from a printed list of barcodes (if it isn’t the default on the operation).

Click “Ok” and they’re on the job.

Likewise, if they initially scanned a STARTREWORK barcode, it would open that form, they scan the job/assembly/op barcode on the routing… verify Resource ID… click “ok” and they’re on the job.

At the end of each leg of the “switch” event, we set the onfocus back to the ScanValue field so it can receive the next barcode instruction.

3 Likes

Very Cool @dcamlin! I was just making a combined barcode with embedded tabs. Then I realized that the reader doesn’t wait long enough between fields for the cursor to move. I love your idea of a parsing field. I think this is the kind of solution I was hoping for. I will attempt to model our approach based on this concept. Thank you!!
Nate

I’ve also done a chain event using multiple row updates… this provides the system time to load in-between each “tab”. If that helps. Here’s a link to a little background:

1 Like

Trying not to hijack the thread here, as I’ve been having a think about this also (we’re just starting our journey to using MES).

Would there be an opportunity to configure a prefix into the barcode (some barcode guns can also prefix/suffix scans as well), and having the barcode contain a series of Key:Value pairs that MES could process into the desired fields? Rather than depending on the fields to always be in the correct order to ‘Tab’ through them…

Hoping to work on a Proof-of-Concept to validate this idea, in the coming weeks.

2 Likes

So, I am looking for some help with the BPM as I don’t know C# code and I am very new to Kinetic and BPMs…this is what I’ve got.

foreach (var row in ttLaborDtl)
{
   if (row.RowMod != "") // Only modify rows that have been changed
   {
       string sourceValue = row.Combined_Job_Assy_Op_Data_c ?? "";
       string[] parts = sourceValue.Split(new string[] { ".." }, StringSplitOptions.None);

       if (parts.Length > 0)
       {
           row.JobNum = parts[0];
       }

       int asmSeq, oprSeq;

       if (parts.Length > 1 && int.TryParse(parts[1], out asmSeq))
       {
           row.AssemblySeq = asmSeq;
       }

       if (parts.Length > 2 && int.TryParse(parts[2], out oprSeq))
       {
           row.OprSeq = oprSeq;
       }
   }
}

When I check the syntax, I get an error that say: “The name ‘ttLaborDtl’ does not exist in the current context”. When I try just “LaborDtl”, I get this error: “LaborDtl’ is a type, which is not valid in the given context”. Any help on this would be greatly appreciated!

Hi Duane,

Which business object and method are you using to trigger this?

Thanks,

Nathan

I believe as of 2021.1, the “tt”-aliases were replaced with “ds”-aliases.

Older BPMs and such were to be updated automatically when systems were upgraded, but if you’re creating something new, I would try “ds” not “tt”.

Give that a try.

Is there a specific reason you are having them log in/out for every activity?

Having them clock in once at the start of the day and clock out once at the end of the day would save you a ton of steps.

Also if they are running a lot of jobs concurrently it might be worth checking out Work Queue it allows you to start and report against multiple jobs at once.

Hi @ServantOMallard,

Erp.BO.Labor.Update is what I am using with a Pre-Processing directive. This is the first BPM I have done, so I am very new to how these function. Thank you for any help you can provide!

Hi @dcamlin,

This does sound familiar and I did change to dsLaborDtl and got the following error:
“The name ‘dsLaborDtl’ does not exist in the current context.”

Thank you for any help you can provide!

Hi @hackaphreaka,

I’m not trying to accomplish having them log in/out for every activity…so if that is what this statement is doing, I need more help than I thought. lol
I am trying to make it so I can scan a concatenated barcode and have it be “split” into three fields. This will save time for our users to only have to scan the one barcode and get the “Job”, “Assembly”, and “Operation” on the MES screen after clicking “Start Production”.
Does that help clear things up?

We hired a consulting firm prior to going Live to do this exact thing, so, I’m plagiarizing, but it has worked for us. You can create a function like below:

You’ll need to adjust the above based on whatever you’re using to concatenate your string values. We used “$A”.

In your Start Production Activity custom layer, you’ll need a custom textbox to scan your barcode value into (you may already have that set up). Create an onBlur event for that textbox which calls the function and then passes the split values through various rest calls to populate the required fields.

Because this was done by a consultant, I don’t want to reverse engineer and put their entire works here. If you want to build it out yourself, this should be enough to get your started. But, its a pretty complex customization.

If you’re interested, I can DM you the consultant’s contact information and you can work with them if you’d like. I don’t like the idea of just posting all the details of their work… they gots to make a living, you know?

2 Likes

Embedding extra data as mentioned is the way. Also, using 2 different delimiters you can have groups of key\value pairs (also already mentioned) is great.
You can preprocess any text coming into a field with a before change event, where you can process the data and strip off any not relevant to the actual field.

Come up with a simple structure. Could be as simple as A=Action, J=Job, O=Op, A = Asm, U = User

Then you can have a barcode like A:Start|J:JobHere|A:0|O:10 to start a job.
If preferred you could alternatively just have it start act if not already started and stop act if it is.

You can do similar things for part labels to have Part|Qty|Uom for streamlining movements as well.

Caveats, you are limited to what characters you can use based on your barcode spec and\or hardware - i.e. CODE39, CODE128, etc.