@troy The way we usually define heat-up curves is with a set of time/temperature points, rather than time-at-temperature. The controller then does a linear ramp of its setpoint between the points given.
So your example may be given as something like:
0,0 ;Nominal start time, temperature floating (read current temp for start of ramp)
120,140 ; Ramp up to 140 degrees over 2 minutes
240,140 ; hold at 140 for 2 minutes
270,180 ; ramp up to 180 over 30 seconds
300,180 ; hold at 180 for 30 seconds
360,25 ; ramp down to 25 over 1 minute, then turn off
Entry of this sort of curve should be easy to add to your current temperature display chart, with the ability to add/remove and drag around points. Doing it graphically makes it easy to see problems that could be introduced by a typo!
Then just add the ability to save/load by recognizable names, perhaps in a single XML/YAML type file rather than multiple CSVs, given the low number of points required in each.
I haven’t checked that the numbers in my example make sense, obviously you have to use ramp rates the machine is capable of. On the furnaces our software controls a heating cycle takes around a week. We sample once/second but only log every 30 minutes, lots of thermal inertia and things don’t change quickly.