etherlab/plc_cia402node.c
changeset 2136 71fdfd4a12a3
parent 2128 c053f90229bc
child 2150 08514552944f
equal deleted inserted replaced
2134:6f4b08348a60 2136:71fdfd4a12a3
    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 
    41 
    42 #define AXIS_UNIT_TO_USER_UNIT(param)\
    42 #define AXIS_UNIT_TO_USER_UNIT(param, type, name)\
    43 (IEC_LREAL)(param) * __CIA402Node_%(location)s.axis->RatioDenominator / __CIA402Node_%(location)s.axis->RatioNumerator
    43 (IEC_##type)(param) * __CIA402Node_%(location)s.axis->name##RatioDenominator / __CIA402Node_%(location)s.axis->name##RatioNumerator
    44 #define USER_UNIT_TO_AXIS_UNIT(param)\
    44 #define USER_UNIT_TO_AXIS_UNIT(param, type, name)\
    45 (IEC_DINT)(param * __CIA402Node_%(location)s.axis->RatioNumerator / __CIA402Node_%(location)s.axis->RatioDenominator)
    45 (IEC_##type)(param * __CIA402Node_%(location)s.axis->name##RatioNumerator / __CIA402Node_%(location)s.axis->name##RatioDenominator)
       
    46 
       
    47 #define DEFAULT_AXIS_UNIT_TO_USER_UNIT(param) AXIS_UNIT_TO_USER_UNIT(param, LREAL,)
       
    48 #define DEFAULT_USER_UNIT_TO_AXIS_UNIT(param) USER_UNIT_TO_AXIS_UNIT(param, DINT,)
       
    49 #define TORQUE_AXIS_UNIT_TO_USER_UNIT(param) AXIS_UNIT_TO_USER_UNIT(param, LREAL, Torque)
       
    50 #define TORQUE_USER_UNIT_TO_AXIS_UNIT(param) USER_UNIT_TO_AXIS_UNIT(param, INT, Torque)
    46 
    51 
    47 static __CIA402Node __CIA402Node_%(location)s;
    52 static __CIA402Node __CIA402Node_%(location)s;
    48 
    53 
    49 %(extern_located_variables_declaration)s
    54 %(extern_located_variables_declaration)s
    50 
    55 
   116 
   121 
   117 	// Default variables retrieve
   122 	// Default variables retrieve
   118 	__CIA402Node_%(location)s.axis->CommunicationReady = *(__CIA402Node_%(location)s.StatusWord) != 0;
   123 	__CIA402Node_%(location)s.axis->CommunicationReady = *(__CIA402Node_%(location)s.StatusWord) != 0;
   119 	__CIA402Node_%(location)s.axis->ReadyForPowerOn = __CIA402Node_%(location)s.state == __SwitchedOn || __OperationEnabled;
   124 	__CIA402Node_%(location)s.axis->ReadyForPowerOn = __CIA402Node_%(location)s.state == __SwitchedOn || __OperationEnabled;
   120 	__CIA402Node_%(location)s.axis->PowerFeedback = __CIA402Node_%(location)s.state == __OperationEnabled;
   125 	__CIA402Node_%(location)s.axis->PowerFeedback = __CIA402Node_%(location)s.state == __OperationEnabled;
   121 	__CIA402Node_%(location)s.axis->ActualPosition = AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualPosition));
   126 	__CIA402Node_%(location)s.axis->ActualPosition = DEFAULT_AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualPosition));
   122 	__CIA402Node_%(location)s.axis->ActualVelocity = AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualVelocity));
   127 	__CIA402Node_%(location)s.axis->ActualVelocity = DEFAULT_AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualVelocity));
       
   128 	__CIA402Node_%(location)s.axis->ActualTorque = TORQUE_AXIS_UNIT_TO_USER_UNIT(*(__CIA402Node_%(location)s.ActualTorque));
   123 
   129 
   124 	// Extra variables retrieve
   130 	// Extra variables retrieve
   125 %(extra_variables_retrieve)s
   131 %(extra_variables_retrieve)s
   126 }
   132 }
   127 
   133 
   150 	    	break;
   156 	    	break;
   151 	    default:
   157 	    default:
   152 	    	break;
   158 	    	break;
   153 	}
   159 	}
   154 
   160 
       
   161 	// CIA402 node modes of operation computation according to axis motion mode
       
   162 	switch (__CIA402Node_%(location)s.axis->AxisMotionMode) {
       
   163 		case mc_mode_cst:
       
   164 			*(__CIA402Node_%(location)s.ModesOfOperation) = 0x0a;
       
   165 			break;
       
   166 		case mc_mode_csv:
       
   167 			*(__CIA402Node_%(location)s.ModesOfOperation) = 0x09;
       
   168 			break;
       
   169 		default:
       
   170 			*(__CIA402Node_%(location)s.ModesOfOperation) = 0x08;
       
   171 			break;
       
   172 	}
       
   173 
   155 	// Default variables publish
   174 	// Default variables publish
   156 	*(__CIA402Node_%(location)s.TargetPosition) = USER_UNIT_TO_AXIS_UNIT(__CIA402Node_%(location)s.axis->PositionSetPoint);
   175 	*(__CIA402Node_%(location)s.TargetPosition) = DEFAULT_USER_UNIT_TO_AXIS_UNIT(__CIA402Node_%(location)s.axis->PositionSetPoint);
       
   176 	*(__CIA402Node_%(location)s.TargetVelocity) = DEFAULT_USER_UNIT_TO_AXIS_UNIT(__CIA402Node_%(location)s.axis->VelocitySetPoint);
       
   177 	*(__CIA402Node_%(location)s.TargetTorque) = TORQUE_USER_UNIT_TO_AXIS_UNIT(__CIA402Node_%(location)s.axis->TorqueSetPoint);
   157 
   178 
   158 	// Extra variables publish
   179 	// Extra variables publish
   159 %(extra_variables_publish)s
   180 %(extra_variables_publish)s
   160 }
   181 }