Part 2 ... not finished yet
parent
dcd355b13f
commit
b1a5170b85
|
|
@ -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="<InSelector"]
|
||||||
|
UnloadingFilament -> 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"]
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
namespace logic {
|
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.
|
/// @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 {
|
class ToolChange : public CommandBase {
|
||||||
public:
|
public:
|
||||||
inline ToolChange()
|
inline ToolChange()
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,4 @@
|
||||||
/// @file unload_filament.cpp
|
/// @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 "unload_filament.h"
|
||||||
#include "../modules/finda.h"
|
#include "../modules/finda.h"
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,40 @@
|
||||||
digraph architecture {
|
digraph architecture {
|
||||||
graph [fontname=Helvetica, fontsize=10];
|
graph [fontname=Helvetica, fontsize=10]
|
||||||
node [shape=record, fontname=Helvetica, fontsize=10];
|
node [shape=record, fontname=Helvetica, fontsize=10]
|
||||||
edge [fontname=Helvetica, fontsize=10];
|
edge [fontname=Helvetica, fontsize=10]
|
||||||
compound=true;
|
compound=true;
|
||||||
subgraph cluster_unload_filament { label="unload_filament"
|
subgraph cluster_unload_filament { label="unload_filament"
|
||||||
reset;
|
reset
|
||||||
UnloadFilament [ URL="\ref logic::UnloadFilament"];
|
UnloadFilament [ URL="\ref logic::UnloadFilament"]
|
||||||
finda_FilLoadState [ shape=diamond, label="FINDA && FilLoadState"];
|
finda_FilLoadState [ shape=diamond, label="FINDA && FilLoadState"]
|
||||||
return [shape="oval"];
|
return [shape="oval"]
|
||||||
UnloadingToFinda [ URL="\ref logic::UnloadingToFinda", shape=diamond];
|
UnloadingToFinda [ URL="\ref logic::UnloadingToFinda", shape=diamond]
|
||||||
ErrorFSnotOFF [shape=oval];
|
ErrorFSnotOFF [shape=oval]
|
||||||
ErrorFINDAnotOFF [shape=oval];
|
ErrorFINDAnotOFF [shape=oval]
|
||||||
RetractingFromFinda [shape=diamond];
|
RetractingFromFinda [shape=diamond]
|
||||||
DisengagingIdler [shape=diamond];
|
DisengagingIdler [shape=diamond]
|
||||||
ERRDisengagingIdler [shape=hexagon];
|
ERRDisengagingIdler [shape=hexagon]
|
||||||
Finished [shape=oval];
|
Finished [shape=oval]
|
||||||
{rank = same; finda_FilLoadState; return;}
|
{rank = same
|
||||||
{rank = same; ErrorFSnotOFF; UnloadingToFinda; ErrorFINDAnotOFF;}
|
finda_FilLoadState return
|
||||||
{rank = same; DisengagingIdler; ERRDisengagingIdler;}
|
}
|
||||||
|
{rank = same
|
||||||
|
edge[ style=invis]
|
||||||
|
ErrorFSnotOFF -> UnloadingToFinda-> ErrorFINDAnotOFF
|
||||||
|
}
|
||||||
|
{rank = same
|
||||||
|
DisengagingIdler ERRDisengagingIdler
|
||||||
|
}
|
||||||
}
|
}
|
||||||
reset -> finda_FilLoadState
|
reset -> finda_FilLoadState
|
||||||
finda_FilLoadState -> return [label="NO && < 2"];
|
finda_FilLoadState -> return [label="NO && < 2"]
|
||||||
finda_FilLoadState -> UnloadFilament [label="YES && >=2"];
|
finda_FilLoadState -> UnloadFilament [label="YES && >=2"]
|
||||||
UnloadFilament -> UnloadingToFinda;
|
UnloadFilament -> UnloadingToFinda
|
||||||
UnloadingToFinda -> ErrorFSnotOFF [label="err"];
|
UnloadingToFinda -> ErrorFSnotOFF [label="err"]
|
||||||
UnloadingToFinda -> ErrorFINDAnotOFF [label="err"];
|
UnloadingToFinda -> ErrorFINDAnotOFF [label="err"]
|
||||||
UnloadingToFinda -> RetractingFromFinda;
|
UnloadingToFinda -> RetractingFromFinda
|
||||||
RetractingFromFinda -> ErrorFINDAnotOFF [label="err"];
|
RetractingFromFinda:e -> ErrorFINDAnotOFF [label="err"]
|
||||||
RetractingFromFinda -> DisengagingIdler;
|
RetractingFromFinda:s -> DisengagingIdler:n
|
||||||
DisengagingIdler -> ERRDisengagingIdler [label="err"];
|
DisengagingIdler -> ERRDisengagingIdler [label="err"]
|
||||||
DisengagingIdler -> Finished;
|
DisengagingIdler -> Finished
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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="<InSelector"];
|
||||||
|
UnloadingToFinda -> pull_pulley [label="Idler engaged"];
|
||||||
|
UnloadingToFinda -> WaitingForFINDA;
|
||||||
|
WaitingForFINDA -> AboardPlannedMoves [label="FINDA off"];
|
||||||
|
AboardPlannedMoves -> OK;
|
||||||
|
WaitingForFINDA -> retry [label="FINDA still on"];
|
||||||
|
retry -> Reset [label="maxTries"];
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,9 @@ namespace logic {
|
||||||
/// - rotate pulley to some direction as long as the FINDA is on/off
|
/// - rotate pulley to some direction as long as the FINDA is on/off
|
||||||
/// - rotate some axis to some fixed direction
|
/// - rotate some axis to some fixed direction
|
||||||
/// - load/unload to finda
|
/// - load/unload to finda
|
||||||
|
///
|
||||||
|
/// State machine overview:
|
||||||
|
/// @dotfile unload_to_finda.dot
|
||||||
struct UnloadToFinda {
|
struct UnloadToFinda {
|
||||||
/// internal states of the state machine
|
/// internal states of the state machine
|
||||||
enum {
|
enum {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue