etherlab/plc_cia402node.c
changeset 2091 d964dbc2c7b0
parent 2088 c0952932d74b
child 2092 c9776ae8b5d0
--- a/etherlab/plc_cia402node.c	Fri Nov 09 11:25:44 2012 +0100
+++ b/etherlab/plc_cia402node.c	Fri Nov 09 11:27:30 2012 +0100
@@ -39,6 +39,11 @@
     axis_s* axis;
 } __CIA402Node;
 
+#define AXIS_UNIT_TO_USER_UNIT(param)\
+(IEC_LREAL)(param) * __CIA402Node_%(location)s.axis->RatioDenominator / __CIA402Node_%(location)s.axis->RatioNumerator
+#define USER_UNIT_TO_AXIS_UNIT(param)\
+(IEC_DINT)(param * __CIA402Node_%(location)s.axis->RatioNumerator / __CIA402Node_%(location)s.axis->RatioDenominator)
+
 static __CIA402Node __CIA402Node_%(location)s;
 
 %(extern_located_variables_declaration)s
@@ -107,7 +112,8 @@
 
 	// Default variables retrieve
 	__CIA402Node_%(location)s.axis->PowerFeedback = __CIA402Node_%(location)s.state == __OperationEnabled;
-	__CIA402Node_%(location)s.axis->ActualPosition = (IEC_LREAL)(*(__CIA402Node_%(location)s.ActualPosition)) * __CIA402Node_%(location)s.axis->RatioDenominator / __CIA402Node_%(location)s.axis->RatioNumerator;
+	__CIA402Node_%(location)s.axis->ActualPosition = AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualPosition));
+	__CIA402Node_%(location)s.axis->ActualVelocity = AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualVelocity));
 
 	// Extra variables retrieve
 %(extra_variables_retrieve)s
@@ -142,7 +148,7 @@
 
 	// Default variables publish
 	if (__CIA402Node_%(location)s.axis->CSP && *(__CIA402Node_%(location)s.ModesOfOperationDisplay) == 0x08) {
-		*(__CIA402Node_%(location)s.TargetPosition) = (IEC_DINT)(__CIA402Node_%(location)s.axis->PositionSetPoint * __CIA402Node_%(location)s.axis->RatioNumerator / __CIA402Node_%(location)s.axis->RatioDenominator);
+		*(__CIA402Node_%(location)s.TargetPosition) = USER_UNIT_TO_AXIS_UNIT(__CIA402Node_%(location)s.axis->PositionSetPoint);
 	}
 	else {
 		*(__CIA402Node_%(location)s.TargetPosition) = *(__CIA402Node_%(location)s.ActualPosition);