Hi Martin!
Your model does not have anything that specifies the initial output from the block. When statements only update the output when an event happens (your input crosses over a certain value in your case). If your input is constant, no event will occur. Since there is nothing that forces the output to start at a specific value, the solver will make a qualified guess. If nothing is connected to the output it chooses the table value. If something is connected in to the output, say a Modelica.Mechanics.Rotational.Sources.Speed it will have its own preferred initialization value, in most cases 0. So out of those two conflicting initialization, the solver chooses the 0 value, and then it stays at that value since no event happens.
You could write add the "initial algorithm" section to set the initial output of the block, and set
discrete Modelica.Blocks.Interfaces.RealOutput RPM(fixed=true);
to force the solver to use that as the initial value.
You mentioned it in your post, but I wonder if the built in Modelica.Blocks.Tables.CombiTable1D component would be suitable for your model with the right parameters? You can set the smoothness to constant segments, and use the same table as you had defined previously:
Modelica.Blocks.Tables.CombiTable1D combiTable1D(table = [0, 1200; 200, 1200; 380, 1200; 450, 1400; 550, 1600; 650, 1800; 750, 1950; 850, 2100; 1000, 2100; 1200, 2100], smoothness = Modelica.Blocks.Types.Smoothness.ConstantSegments);
Is that an option you think?
Regards, Patrik