Shift Work Schedules

Is it possible to make A, B, C, D type shifts? Most of our users work on a two week rotating shift. 6am to 6pm, 2 days on, 2 days off, 3 days on, 2 days off, 2 days on, 3 days off.

It seems that schedules can only repeat on a weekly basis, is this true?

It’s absolutely possible, and schedules can skip any number of weeks. It will take a little bit of configuring, but it’s not hard.

Schedule A is a basic schedule of 2 days on, and in the ‘Repeating’ section turn on “Alternate”, set to weekly, with one week on, one off, starting in week 1. Schedule B is also a basic schedule, 3 days on, repeats alternate weeks, starting in week 1. Schedule C is again a basic schedule, 2 days on, repeats alternate weeks, but starting in week 2, not week 1.

Now you’ll need to make a composite of these schedules. Since a composite can have only two other schedules, we’ll first make a composite AB which is schedules A and B. Then we’ll make a composite ABC, which is a composite of the composite AB and the basic schedule C. Your employees then get this composite ABC as their schedule.


Amazing! Thank you! I completely forgot about composite schedules since I was making them from the HMI.

1 Like

Can composite schedules only be created in the Gateway console? It doesn’t seem possible to create or edit them from the Schedule Management component.

Yeah, still Gateway only AFAIK.

I’ve been asked to create an operator scheduling solution in Ignition. They do have four shift rotations so will need to build composite schedules. The scheduler will be the Plant Manager so I’m not sure I want to deliver them a solution that requires them to modify schedules in the Gateway page, then switch to the Ignition Schedule Management component and finally to my custom screens to complete the schedule. It doesn’t seem elegant enough.

Can’t imagine I’m the only one who has tried to implement this. Has anyone else found a solution that isn’t so scattered?

Reach out to your sales rep or support and let them know you need this. We have a ticket for it, and you can help move it up in priority. (If you talk to support, tell them “FB15543”)

Hi Kathy, I have a very similar schedule as the one you helped john.furby with. Do you know if your solution fixed his problem? Has the Schedule function has changed any since this post in 2018? I am using Version 8.0.

Creating schedules in the web interface hasn’t changed, but in 8.0.11 we added system.user.addCompositeSchedule(), which lets you create a new composite schedule from two existing schedules.

Is there a way to see the “Active Now?” Status of each schedule? I have looked for tag but none to be found. It seems like all the other information about the schedules have a a system tag. We are currently using Basic schedules and Composite schedules. Sometimes they change incorrectly and I was hoping to trend the Active Status in Historical form to find my problem.

I’m using 7.9 still, but +1 for having tags displaying active schedules. Currently, the way I track it is kind of hacky, but it works. I have 3 CNC router schedules, and for each schedule I created a generic user. Then I run a gateway timer script to determine if the user is scheduled and write that to a memory tag.

shifts = ['1','2','3']
for value in shifts:
	username = 'router_Shift' + value
	user = system.user.getUser('default',username)
	shiftBool = system.user.isUserScheduled(user)
	tagPath = 'CNC_Global/Schedules/router_Shift%s' % (value)
	system.tag.write(tagPath, shiftBool)
1 Like

So your shift names are 1,2,3 and your user is router_Shift I believe.

This will return the shift value when the shift changes?

I would set my gateway script timer to a small value and record it historically.

I think my shifts are switching on and off periodically going from Sunday to Monday on the 5P - 5A shift.

Did you use this to find a similar problem?

The shift names do not matter, because they are assigned to a user, in my case, router_Shift1. My tags are named the same and are Boolean type memory tags. The gateway timer is set at 3000 ms. On my shift tags are value change scripts.

if currentValue.value:  #This fires when shift changes from inactive to active
	time =


EDIT This system has worked flawlessly for me in 7.9, no problems with wrong shift changes

Thank you for the suggestion. I will try it soon…

For the record, I ended up just not using the schedules. I just wrote a script to determine what shifts it was currently. I still used the User’s schedule to determine what schedule they should be on. It was far easier than trying to deal with Ignition’s scheduling system, especially if you have multiple servers.