// ===================================================================== // WMCU — Wiper Motor Control Unit // ===================================================================== // // An automotive wiper system with a sensor (wiper switch), ignition // hardware, a microcontroller (UC), the wiper motor (WM_HW), and a // safety monitor that detects a stuck-at-off condition. The TLE is // "OffNotSlow" — the wiper fails to run at slow speed when commanded. // // Domain: Automotive (ISO 26262) // Functions: 6 (fits Lite version, max 10) // Complexity: Medium — includes conditional logic (COND gates) // and a safety monitor feedback loop // // Copyright (c) 2026 Dr. Wolfgang Freese, Overath (Germany) // All rights reserved. This file is provided as an example for // use with MCSA (mcsa.appliedfusa.de). // // ===================================== MAIN FUNCTION FUNCTION WMCU INPUT WS INPUT IGN OUTPUT WM_Slow OUTPUT WM_Fast FUNCTION WS_HW INPUT WS_Sts OUTPUT WS_Sts OIM WS_Sts.OffNotSlow.WS_Sts.OffNotSlow OIM WS_Sts.OffNotFast.WS_Sts.OffNotFast OIM WS_Sts.SlowNotOff.WS_Sts.SlowNotOff OIM WS_Sts.SlowNotFast.WS_Sts.SlowNotFast OIM WS_Sts.FastNotOff.WS_Sts.FastNotOff OIM WS_Sts.FastNotSlow.WS_Sts.FastNotSlow END FUNCTION FUNCTION IGN_HW INPUT IGN_Sts OUTPUT IGN_Sts OIM IGN_Sts.OffNotOn.IGN_Sts.OffNotOn OIM IGN_Sts.OnNotCrank.IGN_Sts.OnNotCrank OIM IGN_Sts.OffNotRun.IGN_Sts.OffNotRun OIM IGN_Sts.OnNotOff.IGN_Sts.OnNotOff OIM IGN_Sts.OnNotCrank.IGN_Sts.OnNotCrank OIM IGN_Sts.OnNotRun.IGN_Sts.OnNotRun OIM IGN_Sts.CrankNotOff.IGN_Sts.CrankNotOff OIM IGN_Sts.CrankNotOn.IGN_Sts.CrankNotOn OIM IGN_Sts.CrankNotRun.IGN_Sts.CrankNotRun OIM IGN_Sts.RunNotOff.IGN_Sts.RunNotOff OIM IGN_Sts.RunNotOn.IGN_Sts.RunNotOn OIM IGN_Sts.RunNotCrank.IGN_Sts.RunNotCrank END FUNCTION FUNCTION UC INPUT WS_Sts INPUT IGN_Sts INPUT WM_HW_StuckAtOff_Sts OUTPUT WS_Sts OUTPUT WM_Stop_Ctrl OIM WS_Sts.OffNotSlow.OR(WS_Sts.OffNotSlow; IGN_Sts.OffNotOn; IGN_Sts.OffNotRun; IGN_Sts.CrankNotOn; IGN_Sts.CrankNotRun) OIM WS_Sts.OffNotFast.OR(WS_Sts.OffNotFast; IGN_Sts.OffNotOn; IGN_Sts.OffNotRun; IGN_Sts.CrankNotOn; IGN_Sts.CrankNotRun) OIM WS_Sts.SlowNotOff.WS_Sts.SlowNotOff OIM WS_Sts.SlowNotFast.WS_Sts.SlowNotFast OIM WS_Sts.FastNotOff.WS_Sts.FastNotOff OIM WS_Sts.FastNotSlow.WS_Sts.FastNotSlow OIM WM_Stop_Ctrl.OffNotOn.WM_HW_StuckAtOff_Sts.OffNotOn OIM WM_Stop_Ctrl.OnNotOff.WM_HW_StuckAtOff_Sts.OnNotOff END FUNCTION FUNCTION WM_HW INPUT WS_Sts INPUT WM_Stop_Ctrl OUTPUT WS_Sts OUTPUT WM_Slow OUTPUT WM_Fast OIM WM_Slow.OffNotOn.OR(WS_Sts.OffNotSlow; AND(COND.WM_Slow.On; WM_Stop_Ctrl.OffNotOn)) OIM WM_Slow.OnNotOff.WS_Sts.SlowNotOff OIM WM_Fast.OffNotOn.OR(WS_Sts.OffNotFast; AND(WM_Stop_Ctrl.OffNotOn; COND.WM_Fast.On)) OIM WM_Fast.OnNotOff.WS_Sts.FastNotOff END FUNCTION FUNCTION SM_WM_HW_StuckAtOff_Sts INPUT WS_Sts INPUT WM_Slow INPUT WM_Fast OUTPUT SM_WM_HW_StuckAtOff_Sts OIM SM_WM_HW_StuckAtOff_Sts.OffNotOn.OR(WS_Sts.OffNotSlow; WS_Sts.OffNotFast; AND(COND.WS_Sts.Slow; WM_Slow.OffNotOn); AND(COND.WS_Sts.Fast; WM_Fast.OffNotOn)) OIM SM_WM_HW_StuckAtOff_Sts.OnNotOff.WS_Sts.OnNotOff END FUNCTION // =============================================================================== // --- Signalfluss --- INT WS_Sts_1.WMCU.IN.WS.WS_HW.IN.WS_Sts INT WS_Sts_2.WS_HW.OUT.WS_Sts.UC.IN.WS_Sts INT IGN_Sts_1.WMCU.IN.IGN.IGN_HW.IN.IGN_Sts INT IGN_Sts_2.IGN_HW.OUT.IGN_Sts.UC.IN.IGN_Sts INT WS_Sts_3.UC.OUT.WS_Sts.WM_HW.IN.WS_Sts INT WM_Stop_Ctrl_Int.UC.OUT.WM_Stop_Ctrl.WM_HW.IN.WM_Stop_Ctrl INT WM_Slow.WM_HW.OUT.WM_Slow.WMCU.OUT.WM_Slow INT WM_Fast.WM_HW.OUT.WM_Fast.WMCU.OUT.WM_Fast INT SM_WM_HW_StuckAtOff_WS_Sts.WM_HW.OUT.WS_Sts.SM_WM_HW_StuckAtOff_Sts.IN.WS_Sts INT SM_WM_HW_StuckAtOff_WM_SLOW_Sts.WM_HW.OUT.WM_Slow.SM_WM_HW_StuckAtOff_Sts.IN.WM_Slow INT SM_WM_HW_StuckAtOff_WM_FAST_Sts.WM_HW.OUT.WM_Fast.SM_WM_HW_StuckAtOff_Sts.IN.WM_Fast INT SM_WM_HW_StuckAtOff_Result.SM_WM_HW_StuckAtOff_Sts.OUT.SM_WM_HW_StuckAtOff_Sts.UC.IN.WM_HW_StuckAtOff_Sts TLE OffNotSlow.OR(WM_Slow.OffNotOn; WM_Fast.OnNotOff) // END WMCU END FUNCTION // =============================================================================== // Fehlerraten // ISF: Normalverteilung mu=1e-6, sigma=25%*mu = 2.5e-7 // SF: Normalverteilung mu=2.5e-7, sigma=55%*mu = 1.375e-7 // TF: Normalverteilung mu=5e-8, sigma=30%*mu = 1.5e-8 ISF WMCU.WS.OffNotSlow 1.0762e-06 ISF WMCU.WS.OffNotFast 7.4000e-07 ISF WMCU.WS.FastNotOff 7.3826e-07 ISF WMCU.IGN.OffNotOn 1.1876e-06 ISF WMCU.IGN.OffNotRun 1.2351e-06 ISF WMCU.IGN.CrankNotOn 5.1224e-07 ISF WMCU.IGN.CrankNotRun 6.7446e-07 SF WS_HW.WS_Sts.OffNotSlow 2.6758e-07 SF WS_HW.WS_Sts.OffNotFast 4.8161e-07 SF WS_HW.WS_Sts.FastNotOff 1.6799e-07 SF IGN_HW.IGN_Sts.OffNotOn 2.0652e-07 SF IGN_HW.IGN_Sts.OffNotRun 2.4769e-07 SF IGN_HW.IGN_Sts.CrankNotOn 1.3271e-07 SF IGN_HW.IGN_Sts.CrankNotRun 3.7092e-07 SF UC.WS_Sts.OffNotSlow 3.5695e-07 SF UC.WS_Sts.OffNotFast 8.4413e-09 SF UC.WS_Sts.FastNotOff 1.8705e-07 SF UC.WM_Stop_Ctrl.OffNotOn 2.6134e-07 SF WM_HW.WS_Sts.OffNotSlow 1.8614e-07 SF WM_HW.WS_Sts.OffNotFast 2.5695e-07 SF WM_HW.WM_Slow.OffNotOn 2.5908e-07 SF WM_HW.WM_Fast.OffNotOn 3.4436e-07 SF WM_HW.WM_Fast.OnNotOff 4.0500e-07 SF SM_WM_HW_StuckAtOff_Sts.SM_WM_HW_StuckAtOff_Sts.OffNotOn 3.1428e-07 TF WS_Sts_1.OffNotSlow 3.7111e-08 TF WS_Sts_2.OffNotSlow 5.5531e-08 TF WS_Sts_3.OffNotSlow 3.5617e-08 TF IGN_Sts_1.OffNotOn 6.3177e-08 TF IGN_Sts_1.OffNotRun 4.9251e-08 TF IGN_Sts_1.CrankNotOn 4.7227e-08 TF IGN_Sts_1.CrankNotRun 3.9786e-08 TF IGN_Sts_2.OffNotOn 6.8338e-08 TF IGN_Sts_2.OffNotRun 4.7682e-08 TF IGN_Sts_2.CrankNotOn 4.3575e-08 TF IGN_Sts_2.CrankNotRun 4.4718e-08 TF WM_Slow.OffNotOn 5.7985e-08 TF WM_Fast.OnNotOff 5.5482e-08 TF SM_WM_HW_StuckAtOff_Result.OnNotOff 5.6191e-08 TF WM_Stop_Ctrl_Int.OffNotOn 5.6462e-08 TF SM_WM_HW_StuckAtOff_Result.OffNotOn 5.6417e-08 TF SM_WM_HW_StuckAtOff_WS_Sts.OffNotSlow 4.1437e-08 TF SM_WM_HW_StuckAtOff_WS_Sts.OffNotFast 8.9817e-08 TF SM_WM_HW_StuckAtOff_WM_SLOW_Sts.OffNotOn 2.5872e-08 TF SM_WM_HW_StuckAtOff_WM_FAST_Sts.OffNotOn 5.9926e-08 TF WS_Sts_1.OffNotFast 4.7849e-08 TF WS_Sts_2.OffNotFast 4.4682e-08 TF WS_Sts_3.OffNotFast 6.5995e-08 TF WS_Sts_1.FastNotOff 2.2731e-08 TF WS_Sts_2.FastNotOff 3.5230e-08 TF WS_Sts_3.FastNotOff 4.8288e-08