etherlab/plc_cia402node.c
changeset 2091 d964dbc2c7b0
parent 2088 c0952932d74b
child 2092 c9776ae8b5d0
equal deleted inserted replaced
2090:52b398c75ba9 2091:d964dbc2c7b0
    36 typedef struct {
    36 typedef struct {
    37 %(entry_variables)s
    37 %(entry_variables)s
    38     __CIA402NodeState state;
    38     __CIA402NodeState state;
    39     axis_s* axis;
    39     axis_s* axis;
    40 } __CIA402Node;
    40 } __CIA402Node;
       
    41 
       
    42 #define AXIS_UNIT_TO_USER_UNIT(param)\
       
    43 (IEC_LREAL)(param) * __CIA402Node_%(location)s.axis->RatioDenominator / __CIA402Node_%(location)s.axis->RatioNumerator
       
    44 #define USER_UNIT_TO_AXIS_UNIT(param)\
       
    45 (IEC_DINT)(param * __CIA402Node_%(location)s.axis->RatioNumerator / __CIA402Node_%(location)s.axis->RatioDenominator)
    41 
    46 
    42 static __CIA402Node __CIA402Node_%(location)s;
    47 static __CIA402Node __CIA402Node_%(location)s;
    43 
    48 
    44 %(extern_located_variables_declaration)s
    49 %(extern_located_variables_declaration)s
    45 
    50 
   105 		return;
   110 		return;
   106 	}
   111 	}
   107 
   112 
   108 	// Default variables retrieve
   113 	// Default variables retrieve
   109 	__CIA402Node_%(location)s.axis->PowerFeedback = __CIA402Node_%(location)s.state == __OperationEnabled;
   114 	__CIA402Node_%(location)s.axis->PowerFeedback = __CIA402Node_%(location)s.state == __OperationEnabled;
   110 	__CIA402Node_%(location)s.axis->ActualPosition = (IEC_LREAL)(*(__CIA402Node_%(location)s.ActualPosition)) * __CIA402Node_%(location)s.axis->RatioDenominator / __CIA402Node_%(location)s.axis->RatioNumerator;
   115 	__CIA402Node_%(location)s.axis->ActualPosition = AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualPosition));
       
   116 	__CIA402Node_%(location)s.axis->ActualVelocity = AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualVelocity));
   111 
   117 
   112 	// Extra variables retrieve
   118 	// Extra variables retrieve
   113 %(extra_variables_retrieve)s
   119 %(extra_variables_retrieve)s
   114 }
   120 }
   115 
   121 
   140 	    	break;
   146 	    	break;
   141 	}
   147 	}
   142 
   148 
   143 	// Default variables publish
   149 	// Default variables publish
   144 	if (__CIA402Node_%(location)s.axis->CSP && *(__CIA402Node_%(location)s.ModesOfOperationDisplay) == 0x08) {
   150 	if (__CIA402Node_%(location)s.axis->CSP && *(__CIA402Node_%(location)s.ModesOfOperationDisplay) == 0x08) {
   145 		*(__CIA402Node_%(location)s.TargetPosition) = (IEC_DINT)(__CIA402Node_%(location)s.axis->PositionSetPoint * __CIA402Node_%(location)s.axis->RatioNumerator / __CIA402Node_%(location)s.axis->RatioDenominator);
   151 		*(__CIA402Node_%(location)s.TargetPosition) = USER_UNIT_TO_AXIS_UNIT(__CIA402Node_%(location)s.axis->PositionSetPoint);
   146 	}
   152 	}
   147 	else {
   153 	else {
   148 		*(__CIA402Node_%(location)s.TargetPosition) = *(__CIA402Node_%(location)s.ActualPosition);
   154 		*(__CIA402Node_%(location)s.TargetPosition) = *(__CIA402Node_%(location)s.ActualPosition);
   149 	}
   155 	}
   150 
   156