PID Tuning Rules
lsys = TransferFunctionModel[Unevaluated[{{(1.0/(s + 1)^3)}}], s, SamplingPeriod -> None, SystemsModelLabels -> None];
dResponseTFM[trule_] := PIDTune[lsys, {Automatic, trule}, "DisturbanceOutput"]
dResponsePlot[trule_] := Plot[Evaluate@{OutputResponse[dResponseTFM[trule], UnitStep[t - 5], {t, 0, 50}], UnitStep[t - 5]}, {t, 0, 50}, PlotRange -> All, Exclusions -> None]dResponsePlot["ZieglerNichols"]dResponsePlot["KappaTau"]dResponsePlot["AMIGO"]dResponsePlot["ChienHronesReswick"]dResponsePlot["CohenCoon"]dResponsePlot["LambdaTuning"]dResponsePlot["SkogestadIMC"]dResponsePlot["TyreusLuyben"]plot[trule_, ticks_] := Show[{Plot[UnitStep[t - 5], {t, 0, 50}, Exclusions -> None, PlotStyle -> RandomChoice[ColorData[3, "ColorList"]]], Plot[Evaluate[OutputResponse[PIDTune[lsys, {Automatic, trule}, "DisturbanceOutput"], UnitStep[t - 5], {t, 5, 50}]], {t, 0, 50}, PlotRange -> All, PlotStyle -> RandomChoice[ColorData[3, "ColorList"]]]}, PlotRange -> All, PlotLabel -> trule, Ticks -> ticks]plots = plot[#, True]& /@ {"AMIGO", "ChienHronesReswick", "CohenCoon", "LambdaTuning", "SkogestadIMC", "TyreusLuyben"};Grid[Partition[plot[#, None]& /@ {"ZieglerNichols", "ChienHronesReswick", "CohenCoon", "LambdaTuning", "SkogestadIMC", "TyreusLuyben"}, 3]]