From 631daf67c5b7578c1ee9ebac2e73337c88e75d95 Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Wed, 2 Nov 2022 08:32:58 +0000
Subject: [PATCH 1/9] Add slow_mode command and trace

---
 controller/dt_ctrl.ctrl | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/controller/dt_ctrl.ctrl b/controller/dt_ctrl.ctrl
index 99b7097..b1a890d 100644
--- a/controller/dt_ctrl.ctrl
+++ b/controller/dt_ctrl.ctrl
@@ -63,6 +63,7 @@ blocks ($(frequency), $(delay)) {
 	{ "rangecheck",            "azimuth_speed_range_positive" }
 	{ "or2",                   "azimuth_position_range"       }
 	{ "command_bool",          "azimuth_recover"              }
+	{ "command_bool",          "azimuth_slow_mode"            }
 	{ "and2",                  "azimuth_position_safe"        }
 	{ "log",                   "azimuth_position_range_log"   }
 	{ "log",                   "azimuth_position_safe_log"    }
@@ -302,7 +303,8 @@ traces {
 	{ "Azimuth_Drive_Safety_p270",        "Boolean",   $<Azimuth_Drive_Safety_p270>                     }
 	{ "Azimuth_Drive_Safety_m270",        "Boolean",   $<Azimuth_Drive_Safety_m270>                     }
 	{ "Azimuth_Override",                 "Boolean",   "azimuth_recover",                  "value"      }
-		
+	{ "Azimuth_Slow_Mode",                "Boolean",   "azimuth_slow_mode",                "value"      }
+
 	{ "Focusbox_Position",                "Volt",      "dt_az",                            "ae1"	    }
 
 	{ "Elevation_Position",               "rad",       $<Elevation_Position>                            }
-- 
GitLab


From 9c85d3f7c1ed00a896168630463865657cb6340e Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Wed, 2 Nov 2022 11:19:28 +0000
Subject: [PATCH 2/9] Add slow_mode input to spg3d

---
 controller/block/block_setpoint_generator_3d.c         | 4 ++++
 controller/block/block_setpoint_generator_3d.test.ctrl | 1 +
 controller/dt_ctrl.ctrl                                | 2 ++
 3 files changed, 7 insertions(+)

diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index 0c733cf..1319d2f 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -48,6 +48,8 @@
      |                             |
  ----| 5 track_v_cmd               |
      |                             |
+ ----| 6 slow_mode                 |
+     |                             |
      -------------------------------
 
 	'setpoint' is the setpoint as the user requested it.
@@ -88,6 +90,7 @@ struct controller_block_private {
 	float *track_v;
 	bool  *track_x_cmd;
 	bool  *track_v_cmd;
+	bool  *slow_mode;
 	
 	/* beware: 'samples' is the time unit, not 'seconds', 
 	   all parameters and commands are scaled on block entry/exit */
@@ -988,6 +991,7 @@ static struct controller_block_interm_list interms[] = {
 	{ "track_v",     CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, track_v)     },
 	{ "track_x_cmd", CONTROLLER_BLOCK_TERM_BOOL,  offsetof(struct controller_block_private, track_x_cmd) },
 	{ "track_v_cmd", CONTROLLER_BLOCK_TERM_BOOL,  offsetof(struct controller_block_private, track_v_cmd) },
+	{ "slow_mode",   CONTROLLER_BLOCK_TERM_BOOL,  offsetof(struct controller_block_private, slow_mode)   },
 	{ NULL }
 };
 
diff --git a/controller/block/block_setpoint_generator_3d.test.ctrl b/controller/block/block_setpoint_generator_3d.test.ctrl
index ea9bb23..c849d74 100644
--- a/controller/block/block_setpoint_generator_3d.test.ctrl
+++ b/controller/block/block_setpoint_generator_3d.test.ctrl
@@ -29,6 +29,7 @@ links {
 	{ "track_v", "value", "spg", "track_v", true }
 	{ "false", "value",   "spg", "track_x_cmd", true }
 	{ "false", "value",   "spg", "track_v_cmd", true }
+	{ "false", "value",   "spg", "slow_mode", true }
 	
 	{ "spg", "x", "x", "value", true }
 	{ "spg", "v", "v", "value", true }
diff --git a/controller/dt_ctrl.ctrl b/controller/dt_ctrl.ctrl
index b1a890d..c0f09b0 100644
--- a/controller/dt_ctrl.ctrl
+++ b/controller/dt_ctrl.ctrl
@@ -144,6 +144,7 @@ links {
 	{ "zero",                           "value",      "azimuth_spg",                      "track_v"      , true }
 	{ "false",                          "value",      "azimuth_spg",                      "track_x_cmd"  , true }
 	{ "false",                          "value",      "azimuth_spg",                      "track_v_cmd"  , true }
+	{ "false",                          "value",      "azimuth_spg",                      "slow_mode"    , true }
 	{ "azimuth_spg",                    "x",          "azimuth_servo_state",              "spg_x"        , true }
 	{ "azimuth_spg",                    "v",          "azimuth_servo_state",              "spg_v"        , true }
 	{ "azimuth_spg",                    "a",          "azimuth_servo_state",              "spg_a"        , true }
@@ -193,6 +194,7 @@ links {
 	{ "zero",                           "value",      "elevation_spg",                    "track_v"      , true }
 	{ "false",                          "value",      "elevation_spg",                    "track_x_cmd"  , true }
 	{ "false",                          "value",      "elevation_spg",                    "track_v_cmd"  , true }
+	{ "false",                          "value",      "elevation_spg",                    "slow_mode"    , true }
 	{ "elevation_spg",                  "x",          "elevation_servo_state",            "spg_x"        , true }
 	{ "elevation_spg",                  "v",          "elevation_servo_state",            "spg_v"        , true }
 	{ "elevation_spg",                  "a",          "elevation_servo_state",            "spg_a"        , true }
-- 
GitLab


From 22c504abd5837c44ae6d32e020ee4fbaf4c56aa1 Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Wed, 2 Nov 2022 20:27:09 +0000
Subject: [PATCH 3/9] Add direct slow mode

---
 .../block/block_setpoint_generator_3d.c       | 39 +++++++++++--------
 controller/dt_ctrl.ctrl                       |  4 +-
 2 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index 1319d2f..d29de18 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -34,23 +34,23 @@
        inputs     outputs
        nr name    nr name
 
-     -------------------------------
-     |                             |
- ----| 0 reset_x       0  x        |----
-     |                             |
- ----| 1 reset         1  v        |----
-     |                             |
- ----| 2 track_x       2  a        |----
-     |                             |
- ----| 3 track_v       3  j        |----
-     |                             |
- ----| 4 track_x_cmd   4  setpoint |----
-     |                             |
- ----| 5 track_v_cmd               |
-     |                             |
- ----| 6 slow_mode                 |
-     |                             |
-     -------------------------------
+     -------------------------------------
+     |                                   |
+ ----| 0 reset_x       0  x              |----
+     |                                   |
+ ----| 1 reset         1  v              |----
+     |                                   |
+ ----| 2 track_x       2  a              |----
+     |                                   |
+ ----| 3 track_v       3  j              |----
+     |                                   |
+ ----| 4 track_x_cmd   4  setpoint       |----
+     |                                   |
+ ----| 5 track_v_cmd   5  slow_mode_used |
+     |                                   |
+ ----| 6 slow_mode                       |
+     |                                   |
+     -------------------------------------
 
 	'setpoint' is the setpoint as the user requested it.
 	'x' is the output of the setpoint generator.
@@ -91,6 +91,7 @@ struct controller_block_private {
 	bool  *track_x_cmd;
 	bool  *track_v_cmd;
 	bool  *slow_mode;
+	bool  slow_mode_used;
 	
 	/* beware: 'samples' is the time unit, not 'seconds', 
 	   all parameters and commands are scaled on block entry/exit */
@@ -242,9 +243,11 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 	bool must_brake = false;
 	bool good_x;
 	bool good_v;
+	bool slow_mode_used;
 
 	cur_x = priv->cur_x;
 	cur_v = priv->cur_v;
+	slow_mode_used = *priv->slow_mode; // TODO add logic here!
 
 	t_max_a = priv->t_max_a;
 
@@ -809,6 +812,7 @@ set_output:
 	priv->cmd_x_out = priv->cmd_x;
 	priv->cur_x = cur_x;
 	priv->cur_v = cur_v;
+	priv->slow_mode_used = slow_mode_used;
 }
 
 static int block_setpoint_generator_command_filter(struct controller_command *command,
@@ -1001,6 +1005,7 @@ static struct controller_block_outterm_list outterms[] = {
 	{ "a",        CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cur_a_out) },
 	{ "j",        CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cur_j_out) },
 	{ "setpoint", CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cmd_x_out) },
+	{ "slow_mode_used", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, slow_mode_used) },
 	{ "id",       CONTROLLER_BLOCK_TERM_UINT32, offsetof(struct controller_block_private, id)       },
 	{ NULL }
 };
diff --git a/controller/dt_ctrl.ctrl b/controller/dt_ctrl.ctrl
index c0f09b0..baa289e 100644
--- a/controller/dt_ctrl.ctrl
+++ b/controller/dt_ctrl.ctrl
@@ -64,6 +64,7 @@ blocks ($(frequency), $(delay)) {
 	{ "or2",                   "azimuth_position_range"       }
 	{ "command_bool",          "azimuth_recover"              }
 	{ "command_bool",          "azimuth_slow_mode"            }
+	{ "value",                 "azimuth_slow_mode_used"       }
 	{ "and2",                  "azimuth_position_safe"        }
 	{ "log",                   "azimuth_position_range_log"   }
 	{ "log",                   "azimuth_position_safe_log"    }
@@ -144,7 +145,7 @@ links {
 	{ "zero",                           "value",      "azimuth_spg",                      "track_v"      , true }
 	{ "false",                          "value",      "azimuth_spg",                      "track_x_cmd"  , true }
 	{ "false",                          "value",      "azimuth_spg",                      "track_v_cmd"  , true }
-	{ "false",                          "value",      "azimuth_spg",                      "slow_mode"    , true }
+	{ "azimuth_slow_mode",              "value",      "azimuth_spg",                      "slow_mode"    , true }
 	{ "azimuth_spg",                    "x",          "azimuth_servo_state",              "spg_x"        , true }
 	{ "azimuth_spg",                    "v",          "azimuth_servo_state",              "spg_v"        , true }
 	{ "azimuth_spg",                    "a",          "azimuth_servo_state",              "spg_a"        , true }
@@ -305,7 +306,6 @@ traces {
 	{ "Azimuth_Drive_Safety_p270",        "Boolean",   $<Azimuth_Drive_Safety_p270>                     }
 	{ "Azimuth_Drive_Safety_m270",        "Boolean",   $<Azimuth_Drive_Safety_m270>                     }
 	{ "Azimuth_Override",                 "Boolean",   "azimuth_recover",                  "value"      }
-	{ "Azimuth_Slow_Mode",                "Boolean",   "azimuth_slow_mode",                "value"      }
 
 	{ "Focusbox_Position",                "Volt",      "dt_az",                            "ae1"	    }
 
-- 
GitLab


From ef34076f69b2b04b0aae54e17c04d549ea7c5b9d Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Wed, 2 Nov 2022 20:54:48 +0000
Subject: [PATCH 4/9] Implement logic for changing slow mode

---
 controller/block/block_setpoint_generator_3d.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index d29de18..8063172 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -91,7 +91,6 @@ struct controller_block_private {
 	bool  *track_x_cmd;
 	bool  *track_v_cmd;
 	bool  *slow_mode;
-	bool  slow_mode_used;
 	
 	/* beware: 'samples' is the time unit, not 'seconds', 
 	   all parameters and commands are scaled on block entry/exit */
@@ -139,6 +138,7 @@ struct controller_block_private {
 	double cur_v;
 	double cur_a;
 	double cur_j;
+	bool cur_slow_mode;
 	float cur_x_out; /* float version of the internal values */
 	float cur_v_out;
 	float cur_a_out;
@@ -243,11 +243,17 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 	bool must_brake = false;
 	bool good_x;
 	bool good_v;
-	bool slow_mode_used;
 
 	cur_x = priv->cur_x;
 	cur_v = priv->cur_v;
-	slow_mode_used = *priv->slow_mode; // TODO add logic here!
+	if (fabs(cur_v) < 1.e-5) {
+		// Slow mode can only be changed when almost standing still
+		if (priv->cur_slow_mode != *priv->slow_mode) {
+			log_send(LOG_T_WARNING, "Slow mode changed\n");
+			//log_send(LOG_T_WARNING, "cur_v = %5.8g!\n", cur_v);
+		}
+		priv->cur_slow_mode = *priv->slow_mode;
+	}
 
 	t_max_a = priv->t_max_a;
 
@@ -812,7 +818,6 @@ set_output:
 	priv->cmd_x_out = priv->cmd_x;
 	priv->cur_x = cur_x;
 	priv->cur_v = cur_v;
-	priv->slow_mode_used = slow_mode_used;
 }
 
 static int block_setpoint_generator_command_filter(struct controller_command *command,
@@ -1005,7 +1010,7 @@ static struct controller_block_outterm_list outterms[] = {
 	{ "a",        CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cur_a_out) },
 	{ "j",        CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cur_j_out) },
 	{ "setpoint", CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cmd_x_out) },
-	{ "slow_mode_used", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, slow_mode_used) },
+	{ "slow_mode_used", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, cur_slow_mode) },
 	{ "id",       CONTROLLER_BLOCK_TERM_UINT32, offsetof(struct controller_block_private, id)       },
 	{ NULL }
 };
@@ -1061,6 +1066,7 @@ static struct controller_block * block_setpoint_generator_3d_create(char *name,
 	spg->private->cur_v_out = 0.0;
 	spg->private->cur_a_out = 0.0;
 	spg->private->cur_j_out = 0.0;
+	spg->private->cur_slow_mode = false;
 	spg->private->cmd_x_out = 0.0;
 	spg->private->id = COMMAND_ID_NONE;
 
-- 
GitLab


From ef89ade1ced5421524ad85478f734727b1b1540a Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Thu, 3 Nov 2022 20:46:00 +0000
Subject: [PATCH 5/9] Use half speed in slow mode

---
 controller/block/block_setpoint_generator_3d.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index 8063172..31df2e8 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -98,6 +98,7 @@ struct controller_block_private {
 	float  cmd_x_out; /* float version of the internal cmd_x */
 	double cmd_v;
 	float max_x;
+	float max_v_fac;
 	float min_x;
 	float max_v;
 	float max_a;
@@ -253,6 +254,10 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 			//log_send(LOG_T_WARNING, "cur_v = %5.8g!\n", cur_v);
 		}
 		priv->cur_slow_mode = *priv->slow_mode;
+		if (priv->cur_slow_mode)
+			priv->max_v_fac = 0.5;
+		else
+			priv->max_v_fac = 1.0;
 	}
 
 	t_max_a = priv->t_max_a;
@@ -710,7 +715,7 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		v = v_after_ticks(priv, v, a, j, t);
 		
 		/* If not already at the right jerk, set it */
-		if (fabs(v) > priv->max_v && signbit(priv->cur_j) != signbit(j)) {
+		if (fabs(v) > priv->max_v_fac * priv->max_v && signbit(priv->cur_j) != signbit(j)) {
 			if (t <= 1) {
 				priv->cur_j = 0;
 				priv->cur_a = 0;
@@ -768,7 +773,7 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		priv->start_t = 0;
 	}
 
-	if (fabs(cur_v) >= priv->max_v) {
+	if (fabs(cur_v) >= priv->max_v_fac * priv->max_v) {
 		/* prevent further acceleration beyond max v */
 		if (signbit(cur_v) == signbit(priv->cur_a)) {
 			priv->cur_a = 0.0;
@@ -776,7 +781,7 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		if (signbit(cur_v) == signbit(priv->cur_j)) {
 			priv->cur_j = 0.0;
 		}
-		cur_v = copysign(priv->max_v, cur_v);
+		cur_v = copysign(priv->max_v_fac * priv->max_v, cur_v);
 
 		priv->start_j = priv->cur_j;
 		priv->start_a = priv->cur_a;
@@ -842,8 +847,8 @@ static int block_setpoint_generator_command_filter(struct controller_command *co
 		case COMMAND_PTYPE_SPEED: {
 			float value = entry->value.f;
 			
-			if (fabs(value) > priv->max_v_sec)
-				value = copysign(priv->max_v_sec, value);
+			if (fabs(value) > priv->max_v_fac * priv->max_v_sec)
+				value = copysign(priv->max_v_fac * priv->max_v_sec, value);
 			
 			entry->value.f = value;
 			
@@ -1036,6 +1041,7 @@ static struct controller_block * block_setpoint_generator_3d_create(char *name,
 	spg->private->max_x = 0.0;
 	spg->private->min_x = 0.0;
 	spg->private->max_v = 0.0;
+	spg->private->max_v_fac = 1.0;
 	spg->private->max_a = 0.0;
 	spg->private->inv_max_a = 1.0;
 	spg->private->max_j = 0.0;
-- 
GitLab


From f05a9f42c24415915f926a7b9c9c94dbc6efa017 Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Thu, 3 Nov 2022 21:15:19 +0000
Subject: [PATCH 6/9] Add slow mode to mech.html

---
 console/htdocs/mech.html | 37 ++++++++++++++++++++++++++++++++-----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/console/htdocs/mech.html b/console/htdocs/mech.html
index 3ba55d8..5e6f216 100644
--- a/console/htdocs/mech.html
+++ b/console/htdocs/mech.html
@@ -119,6 +119,17 @@ var azimuth_software = new dt_ui_window_trace("azimuth_software", "Azimuth Softw
 		is_number:	false,
 		highlight:	false,
 	},
+	{
+		name:		"azimuth_spg.slow_mode_used",
+		frequency:	0,
+		label:		"Max speed",
+		true_text:	"Reduced max speed",
+		false_text:	"Normal max speed",
+		func:		one,
+		is_bool:	true,
+		true_color:	"orange",
+		false_color:	"lightgreen"
+	},
 	{
 		name: 		"Azimuth_Position",
 		frequency:	4,
@@ -467,6 +478,7 @@ var weather_url = "status.cgi";
 
 var azimuth_enable_command = new controller_command("azimuth_servo_state", "bool");
 var azimuth_recover_command = new controller_command("azimuth_recover", "bool");
+var azimuth_slow_mode_command = new controller_command("azimuth_slow_mode", "bool");
 var elevation_enable_command = new controller_command("elevation_servo_state", "bool");
 var elevation_recover_command = new controller_command("elevation_recover", "bool");
 
@@ -475,10 +487,13 @@ var button_azimuth_enable = new dt_ui_button("button_azimuth_enable");
 var button_azimuth_disable = new dt_ui_button("button_azimuth_disable");
 var button_azimuth_override = new dt_ui_button("button_azimuth_override");
 var button_azimuth_normal = new dt_ui_button("button_azimuth_normal");
+var button_azimuth_normal_speed = new dt_ui_button("button_azimuth_normal_speed");
+var button_azimuth_reduced_speed = new dt_ui_button("button_azimuth_reduced_speed");
 
 azimuth_software.add([
 	button_azimuth_enable, button_azimuth_disable,
-	button_azimuth_override, button_azimuth_normal, ]);
+	button_azimuth_override, button_azimuth_normal,
+	button_azimuth_normal_speed, button_azimuth_reduced_speed, ]);
 
 button_azimuth_enable.text_set("Enable");
 button_azimuth_enable.color_set("darkgreen");
@@ -506,16 +521,28 @@ button_azimuth_override.onclick = function azimuth_override() {
 	azimuth_recover_command.send(1);
 }
 
+button_azimuth_normal_speed.text_set("Set normal speed");
+button_azimuth_normal_speed.color_set("darkgreen");
+button_azimuth_normal_speed.onclick = function azimuth_set_normal_speed() {
+	azimuth_slow_mode_command.send(0);
+}
+
+button_azimuth_reduced_speed.text_set("Set reduced speed");
+button_azimuth_reduced_speed.color_set("darkgreen");
+button_azimuth_reduced_speed.onclick = function azimuth_set_reduced_speed() {
+	azimuth_slow_mode_command.send(1);
+}
 
 azimuth_software.resize_equal([
 	button_azimuth_enable, button_azimuth_disable,
 	button_azimuth_override, button_azimuth_normal, ]);
 azimuth_software.align_vertical([ button_azimuth_enable, button_azimuth_normal ]);
-azimuth_software.align_horizontal([ button_azimuth_enable, button_azimuth_disable ]);
-azimuth_software.align_horizontal([ button_azimuth_normal, button_azimuth_override ]);
-
-
+azimuth_software.align_horizontal([ button_azimuth_enable, button_azimuth_disable, button_azimuth_normal_speed ]);
+azimuth_software.align_horizontal([ button_azimuth_normal, button_azimuth_override, button_azimuth_reduced_speed ]);
 
+azimuth_software.resize_equal([
+	button_azimuth_normal_speed, button_azimuth_reduced_speed]);
+azimuth_software.align_vertical([button_azimuth_normal_speed, button_azimuth_reduced_speed]);
 
 
 var button_elevation_enable = new dt_ui_button("button_elevation_enable");
-- 
GitLab


From 619aade0b61d3d65084d0823075c2a48a5dc54fa Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Sun, 7 Apr 2024 21:15:10 +0200
Subject: [PATCH 7/9] Rename slow_mode_used -> slow_mode_active

---
 console/htdocs/mech.html                      |  2 +-
 .../block/block_setpoint_generator_3d.c       | 36 +++++++++----------
 controller/dt_ctrl.ctrl                       |  2 +-
 3 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/console/htdocs/mech.html b/console/htdocs/mech.html
index 5e6f216..343d577 100644
--- a/console/htdocs/mech.html
+++ b/console/htdocs/mech.html
@@ -120,7 +120,7 @@ var azimuth_software = new dt_ui_window_trace("azimuth_software", "Azimuth Softw
 		highlight:	false,
 	},
 	{
-		name:		"azimuth_spg.slow_mode_used",
+		name:		"azimuth_spg.slow_mode_active",
 		frequency:	0,
 		label:		"Max speed",
 		true_text:	"Reduced max speed",
diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index 31df2e8..cacd2ba 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -34,23 +34,23 @@
        inputs     outputs
        nr name    nr name
 
-     -------------------------------------
-     |                                   |
- ----| 0 reset_x       0  x              |----
-     |                                   |
- ----| 1 reset         1  v              |----
-     |                                   |
- ----| 2 track_x       2  a              |----
-     |                                   |
- ----| 3 track_v       3  j              |----
-     |                                   |
- ----| 4 track_x_cmd   4  setpoint       |----
-     |                                   |
- ----| 5 track_v_cmd   5  slow_mode_used |
-     |                                   |
- ----| 6 slow_mode                       |
-     |                                   |
-     -------------------------------------
+     ---------------------------------------
+     |                                     |
+ ----| 0 reset_x       0  x                |----
+     |                                     |
+ ----| 1 reset         1  v                |----
+     |                                     |
+ ----| 2 track_x       2  a                |----
+     |                                     |
+ ----| 3 track_v       3  j                |----
+     |                                     |
+ ----| 4 track_x_cmd   4  setpoint         |----
+     |                                     |
+ ----| 5 track_v_cmd   5  slow_mode_active |
+     |                                     |
+ ----| 6 slow_mode                         |
+     |                                     |
+     ---------------------------------------
 
 	'setpoint' is the setpoint as the user requested it.
 	'x' is the output of the setpoint generator.
@@ -1015,7 +1015,7 @@ static struct controller_block_outterm_list outterms[] = {
 	{ "a",        CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cur_a_out) },
 	{ "j",        CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cur_j_out) },
 	{ "setpoint", CONTROLLER_BLOCK_TERM_FLOAT, offsetof(struct controller_block_private, cmd_x_out) },
-	{ "slow_mode_used", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, cur_slow_mode) },
+	{ "slow_mode_active", CONTROLLER_BLOCK_TERM_BOOL, offsetof(struct controller_block_private, cur_slow_mode) },
 	{ "id",       CONTROLLER_BLOCK_TERM_UINT32, offsetof(struct controller_block_private, id)       },
 	{ NULL }
 };
diff --git a/controller/dt_ctrl.ctrl b/controller/dt_ctrl.ctrl
index baa289e..5b2ca3a 100644
--- a/controller/dt_ctrl.ctrl
+++ b/controller/dt_ctrl.ctrl
@@ -64,7 +64,7 @@ blocks ($(frequency), $(delay)) {
 	{ "or2",                   "azimuth_position_range"       }
 	{ "command_bool",          "azimuth_recover"              }
 	{ "command_bool",          "azimuth_slow_mode"            }
-	{ "value",                 "azimuth_slow_mode_used"       }
+	{ "value",                 "azimuth_slow_mode_active"     }
 	{ "and2",                  "azimuth_position_safe"        }
 	{ "log",                   "azimuth_position_range_log"   }
 	{ "log",                   "azimuth_position_safe_log"    }
-- 
GitLab


From 0d755b73eab33223d6212a224573b97bada48012 Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Sun, 7 Apr 2024 21:16:34 +0200
Subject: [PATCH 8/9] Rename max_v_fac -> max_v_factor

---
 controller/block/block_setpoint_generator_3d.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index cacd2ba..241d9e6 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -98,7 +98,7 @@ struct controller_block_private {
 	float  cmd_x_out; /* float version of the internal cmd_x */
 	double cmd_v;
 	float max_x;
-	float max_v_fac;
+	float max_v_factor;
 	float min_x;
 	float max_v;
 	float max_a;
@@ -255,9 +255,9 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		}
 		priv->cur_slow_mode = *priv->slow_mode;
 		if (priv->cur_slow_mode)
-			priv->max_v_fac = 0.5;
+			priv->max_v_factor = 0.5;
 		else
-			priv->max_v_fac = 1.0;
+			priv->max_v_factor = 1.0;
 	}
 
 	t_max_a = priv->t_max_a;
@@ -715,7 +715,7 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		v = v_after_ticks(priv, v, a, j, t);
 		
 		/* If not already at the right jerk, set it */
-		if (fabs(v) > priv->max_v_fac * priv->max_v && signbit(priv->cur_j) != signbit(j)) {
+		if (fabs(v) > priv->max_v_factor * priv->max_v && signbit(priv->cur_j) != signbit(j)) {
 			if (t <= 1) {
 				priv->cur_j = 0;
 				priv->cur_a = 0;
@@ -773,7 +773,7 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		priv->start_t = 0;
 	}
 
-	if (fabs(cur_v) >= priv->max_v_fac * priv->max_v) {
+	if (fabs(cur_v) >= priv->max_v_factor * priv->max_v) {
 		/* prevent further acceleration beyond max v */
 		if (signbit(cur_v) == signbit(priv->cur_a)) {
 			priv->cur_a = 0.0;
@@ -781,7 +781,7 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 		if (signbit(cur_v) == signbit(priv->cur_j)) {
 			priv->cur_j = 0.0;
 		}
-		cur_v = copysign(priv->max_v_fac * priv->max_v, cur_v);
+		cur_v = copysign(priv->max_v_factor * priv->max_v, cur_v);
 
 		priv->start_j = priv->cur_j;
 		priv->start_a = priv->cur_a;
@@ -847,8 +847,8 @@ static int block_setpoint_generator_command_filter(struct controller_command *co
 		case COMMAND_PTYPE_SPEED: {
 			float value = entry->value.f;
 			
-			if (fabs(value) > priv->max_v_fac * priv->max_v_sec)
-				value = copysign(priv->max_v_fac * priv->max_v_sec, value);
+			if (fabs(value) > priv->max_v_factor * priv->max_v_sec)
+				value = copysign(priv->max_v_factor * priv->max_v_sec, value);
 			
 			entry->value.f = value;
 			
@@ -1041,7 +1041,7 @@ static struct controller_block * block_setpoint_generator_3d_create(char *name,
 	spg->private->max_x = 0.0;
 	spg->private->min_x = 0.0;
 	spg->private->max_v = 0.0;
-	spg->private->max_v_fac = 1.0;
+	spg->private->max_v_factor = 1.0;
 	spg->private->max_a = 0.0;
 	spg->private->inv_max_a = 1.0;
 	spg->private->max_j = 0.0;
-- 
GitLab


From 2c38b093f482b87bb2daeee05f4cd610546986d8 Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <T.J.Dijkema@gmail.com>
Date: Mon, 8 Apr 2024 11:18:41 +0200
Subject: [PATCH 9/9] Clarify log message

---
 controller/block/block_setpoint_generator_3d.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/controller/block/block_setpoint_generator_3d.c b/controller/block/block_setpoint_generator_3d.c
index 241d9e6..5ca4324 100644
--- a/controller/block/block_setpoint_generator_3d.c
+++ b/controller/block/block_setpoint_generator_3d.c
@@ -250,7 +250,11 @@ static void setpoint_generator_3d_calculate(struct controller_block *spg)
 	if (fabs(cur_v) < 1.e-5) {
 		// Slow mode can only be changed when almost standing still
 		if (priv->cur_slow_mode != *priv->slow_mode) {
-			log_send(LOG_T_WARNING, "Slow mode changed\n");
+			if (*priv->slow_mode) {
+				log_send(LOG_T_WARNING, "Slow mode activated\n");
+			} else {
+				log_send(LOG_T_WARNING, "Slow mode deactivated\n");
+			}
 			//log_send(LOG_T_WARNING, "cur_v = %5.8g!\n", cur_v);
 		}
 		priv->cur_slow_mode = *priv->slow_mode;
-- 
GitLab