From a80bbe87a20968eb17aa05a27ab257111478b70b Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Thu, 2 Dec 2021 15:09:59 +0100 Subject: [PATCH] Part 2 ... not finished yet --- src/logic/tool_change.dot | 47 +++++++++++++++++++++++++++ src/logic/tool_change.h | 2 ++ src/logic/unload_filament.cpp | 35 -------------------- src/logic/unload_filament.dot | 61 +++++++++++++++++++---------------- src/logic/unload_to_finda.dot | 36 +++++++++++++++++++++ src/logic/unload_to_finda.h | 3 ++ 6 files changed, 122 insertions(+), 62 deletions(-) create mode 100644 src/logic/tool_change.dot create mode 100644 src/logic/unload_to_finda.dot diff --git a/src/logic/tool_change.dot b/src/logic/tool_change.dot new file mode 100644 index 0000000..56b8675 --- /dev/null +++ b/src/logic/tool_change.dot @@ -0,0 +1,47 @@ +digraph architecture { + graph [fontname=Helvetica, fontsize=10] + node [shape=record, fontname=Helvetica, fontsize=10] + edge [fontname=Helvetica, fontsize=10] + compound=true; + subgraph cluster_tool_change { label="tool_change" + reset + ActiveSlot_FilamentLoadState [label="Slot && FilLoadState", shape=diamond] + return + FilamentLoadState [shape=diamond] + UnloadingFilament + FeedingToFinda + FINDA [shape=diamond] + ErrorFINDAnotON + FeedingToBondtech + FSensor [shape=diamond] + ErrorFSnotON + ERRWaitingForUser + FinishedCorrectly + {rank = same + FeedingToBondtech ErrorFINDAnotON + } + {rank = same + FinishedCorrectly ERRWaitingForUser + } + {rank = same + FinishedCorrectly return + + } + } + reset -> ActiveSlot_FilamentLoadState + ActiveSlot_FilamentLoadState:w -> return [label = "Slot && InNozzle"] + ActiveSlot_FilamentLoadState:s -> FilamentLoadState:n + FilamentLoadState -> UnloadingFilament [label=">=InSelector"] + FilamentLoadState:e -> FeedingToFinda [label=" FeedingToFinda + FeedingToFinda -> FINDA + FINDA:w -> ErrorFINDAnotON [label="OFF"] + ErrorFINDAnotON -> ERRWaitingForUser + FINDA:s -> FeedingToBondtech:n [label="ON"] + FeedingToBondtech -> FSensor + FSensor:w -> ErrorFSnotON [label="OFF"] + ErrorFSnotON -> ERRWaitingForUser + FSensor -> FinishedCorrectly [label="ON"] + + +} diff --git a/src/logic/tool_change.h b/src/logic/tool_change.h index 0703e45..17a39af 100644 --- a/src/logic/tool_change.h +++ b/src/logic/tool_change.h @@ -9,6 +9,8 @@ namespace logic { /// @brief A high-level command state machine - handles the complex logic of tool change - which is basically a chain of an Unload and a Load operation. +/// State machine overview: +/// @dotfile tool_change.dot class ToolChange : public CommandBase { public: inline ToolChange() diff --git a/src/logic/unload_filament.cpp b/src/logic/unload_filament.cpp index 88d78f7..5d4ae9a 100644 --- a/src/logic/unload_filament.cpp +++ b/src/logic/unload_filament.cpp @@ -1,39 +1,4 @@ /// @file unload_filament.cpp -///@dot -///digraph architecture { -/// graph [fontname=Helvetica, fontsize=10]; -/// node [shape=record, fontname=Helvetica, fontsize=10]; -/// edge [fontname=Helvetica, fontsize=10]; -/// compound=true; -/// subgraph cluster_unload_filament { label="unload_filament" -/// reset; -/// UnloadFilament [ URL="\ref logic::UnloadFilament"]; -/// finda_FilLoadState [ shape=diamond, label="FINDA && FilLoadState"]; -/// return [shape="oval"]; -/// UnloadingToFinda [ URL="\ref logic::UnloadingToFinda", shape=diamond]; -/// ErrorFSnotOFF [shape=oval]; -/// ErrorFINDAnotOFF [shape=oval]; -/// RetractingFromFinda [shape=diamond]; -/// DisengagingIdler [shape=diamond]; -/// ERRDisengagingIdler [shape=hexagon]; -/// Finished [shape=oval]; -/// {rank = same; finda_FilLoadState; return;} -/// {rank = same; ErrorFSnotOFF; UnloadingToFinda; ErrorFINDAnotOFF;} -/// {rank = same; DisengagingIdler; ERRDisengagingIdler;} -/// } -/// reset -> finda_FilLoadState -/// finda_FilLoadState -> return [label="NO && < 2"]; -/// finda_FilLoadState -> UnloadFilament [label="YES && >=2"]; -/// UnloadFilament -> UnloadingToFinda; -/// UnloadingToFinda -> ErrorFSnotOFF [label="err"]; -/// UnloadingToFinda -> ErrorFINDAnotOFF [label="err"]; -/// UnloadingToFinda -> RetractingFromFinda; -/// RetractingFromFinda -> ErrorFINDAnotOFF [label="err"]; -/// RetractingFromFinda -> DisengagingIdler; -/// DisengagingIdler -> ERRDisengagingIdler [label="err"]; -/// DisengagingIdler -> Finished; -///} -///@enddot #include "unload_filament.h" #include "../modules/finda.h" diff --git a/src/logic/unload_filament.dot b/src/logic/unload_filament.dot index 1bbe425..950c51c 100644 --- a/src/logic/unload_filament.dot +++ b/src/logic/unload_filament.dot @@ -1,33 +1,40 @@ digraph architecture { - graph [fontname=Helvetica, fontsize=10]; - node [shape=record, fontname=Helvetica, fontsize=10]; - edge [fontname=Helvetica, fontsize=10]; + graph [fontname=Helvetica, fontsize=10] + node [shape=record, fontname=Helvetica, fontsize=10] + edge [fontname=Helvetica, fontsize=10] compound=true; subgraph cluster_unload_filament { label="unload_filament" - reset; - UnloadFilament [ URL="\ref logic::UnloadFilament"]; - finda_FilLoadState [ shape=diamond, label="FINDA && FilLoadState"]; - return [shape="oval"]; - UnloadingToFinda [ URL="\ref logic::UnloadingToFinda", shape=diamond]; - ErrorFSnotOFF [shape=oval]; - ErrorFINDAnotOFF [shape=oval]; - RetractingFromFinda [shape=diamond]; - DisengagingIdler [shape=diamond]; - ERRDisengagingIdler [shape=hexagon]; - Finished [shape=oval]; - {rank = same; finda_FilLoadState; return;} - {rank = same; ErrorFSnotOFF; UnloadingToFinda; ErrorFINDAnotOFF;} - {rank = same; DisengagingIdler; ERRDisengagingIdler;} + reset + UnloadFilament [ URL="\ref logic::UnloadFilament"] + finda_FilLoadState [ shape=diamond, label="FINDA && FilLoadState"] + return [shape="oval"] + UnloadingToFinda [ URL="\ref logic::UnloadingToFinda", shape=diamond] + ErrorFSnotOFF [shape=oval] + ErrorFINDAnotOFF [shape=oval] + RetractingFromFinda [shape=diamond] + DisengagingIdler [shape=diamond] + ERRDisengagingIdler [shape=hexagon] + Finished [shape=oval] + {rank = same + finda_FilLoadState return + } + {rank = same + edge[ style=invis] + ErrorFSnotOFF -> UnloadingToFinda-> ErrorFINDAnotOFF + } + {rank = same + DisengagingIdler ERRDisengagingIdler + } } reset -> finda_FilLoadState - finda_FilLoadState -> return [label="NO && < 2"]; - finda_FilLoadState -> UnloadFilament [label="YES && >=2"]; - UnloadFilament -> UnloadingToFinda; - UnloadingToFinda -> ErrorFSnotOFF [label="err"]; - UnloadingToFinda -> ErrorFINDAnotOFF [label="err"]; - UnloadingToFinda -> RetractingFromFinda; - RetractingFromFinda -> ErrorFINDAnotOFF [label="err"]; - RetractingFromFinda -> DisengagingIdler; - DisengagingIdler -> ERRDisengagingIdler [label="err"]; - DisengagingIdler -> Finished; + finda_FilLoadState -> return [label="NO && < 2"] + finda_FilLoadState -> UnloadFilament [label="YES && >=2"] + UnloadFilament -> UnloadingToFinda + UnloadingToFinda -> ErrorFSnotOFF [label="err"] + UnloadingToFinda -> ErrorFINDAnotOFF [label="err"] + UnloadingToFinda -> RetractingFromFinda + RetractingFromFinda:e -> ErrorFINDAnotOFF [label="err"] + RetractingFromFinda:s -> DisengagingIdler:n + DisengagingIdler -> ERRDisengagingIdler [label="err"] + DisengagingIdler -> Finished } diff --git a/src/logic/unload_to_finda.dot b/src/logic/unload_to_finda.dot new file mode 100644 index 0000000..57c7d03 --- /dev/null +++ b/src/logic/unload_to_finda.dot @@ -0,0 +1,36 @@ +digraph architecture { + graph [fontname=Helvetica, fontsize=10]; + node [shape=record, fontname=Helvetica, fontsize=10]; + edge [fontname=Helvetica, fontsize=10]; + compound=true; + subgraph cluster_unload_to_finda { label="unload_to_finda" + Reset; + retry [shape=circle]; + finda_state [ shape=diamond, label="FINDA"]; + engage_idler [shape=circle]; + EngagingIdler [ shape=diamond]; + UnloadingToFinda [shape=diamond]; + pull_pulley [shape=circle]; + WaitingForFINDA [ shape=diamond, label="Waiting for FINDA"]; + AboardPlannedMoves [shape=circle]; + OK; + Failed; + {rank = same; finda_state; retry;} + {rank = same; engage_idler; EngagingIdler;} + {rank = same; pull_pulley; UnloadingToFinda;} + {rank = same; WaitingForFINDA; AboardPlannedMoves;} + {rank = same; OK; Failed;} + } + Reset -> finda_state; + finda_state -> OK [label="NO"]; + finda_state -> EngagingIdler [label="YES"]; + EngagingIdler -> engage_idler; + EngagingIdler -> UnloadingToFinda [label=">=InSelector"]; + EngagingIdler -> Failed [label=" pull_pulley [label="Idler engaged"]; + UnloadingToFinda -> WaitingForFINDA; + WaitingForFINDA -> AboardPlannedMoves [label="FINDA off"]; + AboardPlannedMoves -> OK; + WaitingForFINDA -> retry [label="FINDA still on"]; + retry -> Reset [label="maxTries"]; +} diff --git a/src/logic/unload_to_finda.h b/src/logic/unload_to_finda.h index 05bcf91..348832f 100644 --- a/src/logic/unload_to_finda.h +++ b/src/logic/unload_to_finda.h @@ -11,6 +11,9 @@ namespace logic { /// - rotate pulley to some direction as long as the FINDA is on/off /// - rotate some axis to some fixed direction /// - load/unload to finda +/// +/// State machine overview: +/// @dotfile unload_to_finda.dot struct UnloadToFinda { /// internal states of the state machine enum {