How to Read the max/min position error record
How to Read the max/min position error record
20200325 by advan
Description
TwinCAT NC provide max/min position error value . The record will start after axis controller enable , Reset record after axes reset(MC_Reset)
ADS Address
Port 501
Index Group = 0x4100 + AxisID
Index Offset = 0x00n0 0000 , n: element index start from 0
Len
TC2 (112 byte)
TC3 (256 byte)
TC2 "Index offset" specification for axis state (Index group 0x4100 + ID)
TC3 "Index offset" specification for Axis state (Index group 0x4100 + ID)
PLC Sample Code (TC3)
Define a struct same as memory layout & fulfill data size 256 bytes & define pack mode continuously(TC3)
{attribute 'pack_mode' := '1'}
TYPE TC3_NCAXISSTATE_ONLINESTRUCT :
STRUCT
Error_State : DWORD;
Dummy_0004 : DWORD;
Actual_Position : LREAL;
Modulo_Actual_Position : LREAL;
Set_Position : LREAL;
Modulo_Set_Position : LREAL;
Actual_Velocity : LREAL;
Set_Velocity : LREAL;
Speed_Override : UDINT; (* 1000000 == 100% *)
Dummy_0052 : DWORD;
Position_Lag : LREAL;
PeakHold_Max_Neg_Position_Lag : LREAL;
PeakHold_Max_Pos_Position_Lag : LREAL;
Controller_Output_In_Percent : LREAL;
Total_Output_In_Percent : LREAL;
Axis_Status_Dword : DWORD;
Axis_Control_Dword : DWORD;
Slave_Coupling_State : DWORD;
Axis_Control_Loop_Index : DINT;
Actual_Acceleration : LREAL;
Set_Acceleration : LREAL;
Set_Jerk : LREAL;
Set_Torque : LREAL; (* or force *)
Actual_Torque : LREAL; (* or force *)
Dummy_0160 : ARRAY[0..95] OF BYTE;
END_STRUCT
END_TYPE
PROGRAM MAIN
VAR
stTC3AxisData : TC3_NCAXISSTATE_ONLINESTRUCT;
FB_AdsRead : ADSREAD;
END_VAR
FB_AdsRead(NETID:= , (* Assign target *)
PORT:= 501,
IDXGRP:= 16#4101, (* 16#4100 + Axis ID *)
IDXOFFS:= , (* most case = 0 *)
LEN:= SIZEOF(stTC3AxisData),
DESTADDR:= ADR(stTC3AxisData),
READ:= ,
TMOUT:= ,
BUSY=> ,
ERR=> ,
ERRID=> );
PLC Sample Code (TC2)
Define a struct same as memory layout & fulfill data size 256 bytes & define pack mode continuously(TC3)
{attribute 'pack_mode' := '1'}
TYPE TC2_NCAXISSTATE_ONLINESTRUCT : (* TC2 NC 112 bytes *)
STRUCT
Error_State : DWORD;
Actual_Position : LREAL;
Modulo_Actual_Position : LREAL;
Set_Position : LREAL;
Modulo_Set_Position : LREAL;
Actual_Velocity : LREAL;
Set_Velocity : LREAL;
Speed_Override : UDINT; (* 1000000 == 100% *)
Position_Lag : LREAL;
PeakHold_Max_Neg_Position_Lag : LREAL;
PeakHold_Max_Pos_Position_Lag : LREAL;
Controller_Output_In_Percent : LREAL;
Total_Output_In_Percent : LREAL;
Axis_Status_Dword : DWORD;
Axis_Control_Dword : DWORD;
Slave_Coupling_State : DWORD;
Axis_Control_Loop_Index : DINT;
END_STRUCT
END_TYPE
PROGRAM MAIN
VAR
stTC2AxisData : TC2_NCAXISSTATE_ONLINESTRUCT;
FB_AdsRead : ADSREAD;
END_VAR
FB_AdsRead(NETID:= , (* Assign target *)
PORT:= 501,
IDXGRP:= 16#4101, (* 16#4100 + Axis ID *)
IDXOFFS:= , (* most case = 0 *)
LEN:= SIZEOF(stTC2AxisData),
DESTADDR:= ADR(stTC2AxisData),
READ:= ,
TMOUT:= ,
BUSY=> ,
ERR=> ,
ERRID=> );
留言
張貼留言