(* PLS UDFB"User Defined Function Block" UDFB can be used as a sub-function block in another program of the application. It is described using FBD, LD, ST or IL language. Input / output parameters of a UDFB (as well as private variables) are declared in the variable editor as local variables of the UDFB: FAULT output turns TRUE when the selected Axis goes into a Fault State. The function block also outputs the total number of faults, and the fault number and message for the last 3 drive faults. Inputs: 1. EtherCat_ID (DINT) - Ethercat address desired AKD DriveControl device for regulating the speed, torque and position of a motor ex. 1001 or AKD_1 2. ResetFaultHistory (BOOL) - When input is TRUE, clears all Faults saved to drives history Outputs: 1. FAULT (BOOL) - TRUE if selected drive currently has a Fault 2. NumberFaults (DINT) - Number of faults saved in the Drive's history 3. FirstFaultNumber (DINT) - Three digit AKD Fault identifier 4. FirstFaultMessage (STRING) - Description of the Fault 5. SecondFaultNumber (DINT) - Three digit AKD Fault identifier 6. SecondFaultMessage (STRING) - Description of the Fault 7. ThirdFaultNumber (DINT) - Three digit AKD Fault identifier 8. ThirdFaultMessage (STRING) - Description of the Fault *)
Status := ECATGetStatus( any_to_dint(EtherCat_ID )); IF Status.3 THEN //If Drive has a Fault, Set FAULT output to TRUE and check the total number of faults FAULT := TRUE; ELSE //If no fault reported in drive, set FAULT output to False and number of faults to zero FAULT := FALSE; END_IF;
IF Inst_r_trig1( ResetFaultHistory) THEN//Resets the fault history of the drive, sets the number of faults to zero
Inst_ECATWriteSdo( TRUE, 4099, 0, 1, EtherCATEtherCAT is an open, high-performance Ethernet-based fieldbus system. The development goal of EtherCAT was to apply Ethernet to automation applications which require short data update times (also called cycle times) with low communication jitter (for synchronization purposes) and low hardware costs_ID, 0 ); //Clear fault history
ELSE
Inst_ECATWriteSdo( FALSE, 4099, 0, 1, EtherCAT_ID, 0 );
END_IF;
ON Inst_ECATWriteSdo.Done DO
Inst_ECATReadSdo( TRUE, 4099, 0, 1, EtherCAT_ID );//Check the number of faults in the history of the drive
END_DO;
IF Status.3 THEN Inst_TON( TRUE, DelayTime ); ELSE Inst_TON( FALSE, DelayTime ); END_IF; IF Inst_r_trig(Inst_TON.Q) THEN Inst_ECATReadSdo( TRUE, 4099, 0, 1, EtherCAT_ID );//Check the number of faults in the history of the drive Inst_ECATReadSdo1( TRUE, 4099, 1, 4, EtherCAT_ID ); Inst_ECATReadSdo2( TRUE, 4099, 2, 4, EtherCAT_ID ); Inst_ECATReadSdo3( TRUE, 4099, 3, 4, EtherCAT_ID ); ELSE Inst_ECATReadSdo( FALSE, 4099, 0, 1, EtherCAT_ID ); Inst_ECATReadSdo1( FALSE, 4099, 0, 1, EtherCAT_ID ); Inst_ECATReadSdo2( FALSE, 4099, 0, 1, EtherCAT_ID ); Inst_ECATReadSdo3( FALSE, 4099, 0, 1, EtherCAT_ID ); END_IF;
NumberFaults := Inst_ECATReadSdo.Value;
IF NumberFaults > 0 THEN //If a fault exists, return the CANopen fault number, convert and output 3 digit AKD fault number, and fault description
IF Inst_ECATReadSdo1.Value <> 0 THEN
FirstFault := Inst_ECATReadSdo1.Value;
IF FirstFault = 78096 THEN
FirstFaultNumber := 523;
FirstFaultMessage := 'Bus over voltage FPGA"Field-Programmable Gate Array"
FPGA is a semiconductor device that can be configured by the customer or designer after manufacturing; hence the name "field-programmable"';
ELSIF FirstFault = 78128 THEN
FirstFaultNumber := 503;
FirstFaultMessage := 'Bus capacitor overload';
ELSIF FirstFault = 78352 THEN
FirstFaultNumber := 501;
FirstFaultMessage := 'Bus over voltage';
ELSIF FirstFault = 78368 THEN
FirstFaultNumber := 502;
FirstFaultMessage := 'Bus under voltage';
ELSIF FirstFault = 82448 THEN
FirstFaultNumber := 234;
FirstFaultMessage := 'Control temperature sensorA sensor is a type of transducer that converts one type of energy into another for various purposes including measurement or information transfer 1 high';
ELSIF FirstFault = 82704 THEN
FirstFaultNumber := 235;
FirstFaultMessage := 'Power temperature sensor 1, 2, or 3 high';
ELSIF FirstFault = 86291 THEN
FirstFaultNumber := 512;
FirstFaultMessage := '5V0 under voltage';
ELSIF FirstFault = 86292 THEN
FirstFaultNumber := 505;
FirstFaultMessage := '1V2 under voltage';
ELSIF FirstFault = 86293 THEN
FirstFaultNumber := 507;
FirstFaultMessage := '2V5 under voltage';
ELSIF FirstFault = 86294 THEN
FirstFaultNumber := 509;
FirstFaultMessage := '3V3 under voltage';
ELSIF FirstFault = 86295 THEN
FirstFaultNumber := 514;
FirstFaultMessage := '+12V0 under voltage';
ELSIF FirstFault = 86296 THEN
FirstFaultNumber := 516;
FirstFaultMessage := '-12V0 under voltage';
ELSIF FirstFault = 86297 THEN
FirstFaultNumber := 518;
FirstFaultMessage := 'Analog 3V3 under voltage';
ELSIF FirstFault = 86400 THEN
FirstFaultNumber := 504;
FirstFaultMessage := '1V2 over voltage';
ELSIF FirstFault = 86401 THEN
FirstFaultNumber := 506;
FirstFaultMessage := '2V5 over voltage';
ELSIF FirstFault = 86402 THEN
FirstFaultNumber := 508;
FirstFaultMessage := '3V3 over voltage';
ELSIF FirstFault = 86403 THEN
FirstFaultNumber := 510;
FirstFaultMessage := '5V0 over voltage';
ELSIF FirstFault = 86404 THEN
FirstFaultNumber := 513;
FirstFaultMessage := '+12V0 over voltage';
ELSIF FirstFault = 86405 THEN
FirstFaultNumber := 104;
FirstFaultMessage := 'Operational FPGA failed';
ELSIF FirstFault = 86406 THEN
FirstFaultNumber := 517;
FirstFaultMessage := 'Analog 3V3 over voltage';
ELSIF FirstFault = 87312 THEN
FirstFaultNumber := 201;
FirstFaultMessage := 'Internal RAM failed';
ELSIF FirstFault = 87344 THEN
FirstFaultNumber := 105;
FirstFaultMessage := 'NV memory stamp invalid';
ELSIF FirstFault = 87424 THEN
FirstFaultNumber := 106;
FirstFaultMessage := 'NV memory data invalid';
ELSIF FirstFault = 87425 THEN
FirstFaultNumber := 202;
FirstFaultMessage := 'External RAM failed';
ELSIF FirstFault = 87426 THEN
FirstFaultNumber := 203;
FirstFaultMessage := 'Code integrity failed';
ELSIF FirstFault = 87427 THEN
FirstFaultNumber := 102;
FirstFaultMessage := 'Resident firmware failed';
ELSIF FirstFault = 87428 THEN
FirstFaultNumber := 103;
FirstFaultMessage := 'Resident FPGA failed';
ELSIF FirstFault = 87429 THEN
FirstFaultNumber := 104;
FirstFaultMessage := 'Operational FPGA failed';
ELSIF FirstFault = 94592 THEN
FirstFaultNumber := 301;
FirstFaultMessage := 'Motor overheated';
ELSIF FirstFault = 94594 THEN
FirstFaultNumber := 305;
FirstFaultMessage := 'Brake open circuit';
ELSIF FirstFault = 94595 THEN
FirstFaultNumber := 306;
FirstFaultMessage := 'Brake short circuit';
ELSIF FirstFault = 94596 THEN
FirstFaultNumber := 307;
FirstFaultMessage := 'Brake closed during enable state';
ELSIF FirstFault = 94597 THEN
FirstFaultNumber := 436;
FirstFaultMessage := 'Motor EnDat overheat'; //Change Description ??
ELSIF FirstFault = 94979 THEN
FirstFaultNumber := 426;
FirstFaultMessage := 'Resolver error';
ELSIF FirstFault = 94981 THEN
FirstFaultNumber := 417;
FirstFaultMessage := 'Broken wire in primary feedback';
ELSIF FirstFault = 95104 THEN
FirstFaultNumber := 402;
FirstFaultMessage := 'Analog signal amplitude fault';
ELSIF FirstFault = 95105 THEN
FirstFaultNumber := 403;
FirstFaultMessage := 'EnDat communication fault';
ELSIF FirstFault = 95106 THEN
FirstFaultNumber := 404;
FirstFaultMessage := 'Hall error';
ELSIF FirstFault = 95107 THEN
FirstFaultNumber := 405;
FirstFaultMessage := 'BiSS"Bi-directional Serial Synchronous interface"
An open-source communication protocol for feedback devices. With BiSS, all of the computation for interpolation in regard to position occurs on the ASIC directly in the encoder watchdog';
ELSIF FirstFault = 95108 THEN
FirstFaultNumber := 406;
FirstFaultMessage := 'BiSS multi cycle';
ELSIF FirstFault = 95109 THEN
FirstFaultNumber := 407;
FirstFaultMessage := 'BiSS sensor';
ELSIF FirstFault = 95110 THEN
FirstFaultNumber := 408;
FirstFaultMessage := 'SFDSmart Feedback Device configuration';
ELSIF FirstFault = 95111 THEN
FirstFaultNumber := 409;
FirstFaultMessage := 'SFD UART overrun';
ELSIF FirstFault = 95112 THEN
FirstFaultNumber := 410;
FirstFaultMessage := 'SFD UART frame';
ELSIF FirstFault = 95113 THEN
FirstFaultNumber := 412;
FirstFaultMessage := 'SFD UART parity';
ELSIF FirstFault = 95114 THEN
FirstFaultNumber := 413;
FirstFaultMessage := 'SFD transfer timeout';
ELSIF FirstFault = 95116 THEN
FirstFaultNumber := 415;
FirstFaultMessage := 'SFD multiple corrupt position';
ELSIF FirstFault = 95117 THEN
FirstFaultNumber := 416;
FirstFaultMessage := 'SFD Transfer incomplete';
ELSIF FirstFault = 95118 THEN
FirstFaultNumber := 418;
FirstFaultMessage := 'Primary feedback power supply';
ELSIF FirstFault = 95119 THEN
FirstFaultNumber := 401;
FirstFaultMessage := 'Failed to set feedback type';
ELSIF FirstFault = 95136 THEN
FirstFaultNumber := 424;
FirstFaultMessage := 'Resolver amplitude low';
ELSIF FirstFault = 95137 THEN
FirstFaultNumber := 425;
FirstFaultMessage := 'Resolver amplitude high';
ELSIF FirstFault = 95138 THEN
FirstFaultNumber := 425;
FirstFaultMessage := 'Resolver amplitude high';
ELSIF FirstFault = 95139 THEN
FirstFaultNumber := 427;
FirstFaultMessage := 'Analog low';
ELSIF FirstFault = 95140 THEN
FirstFaultNumber := 428;
FirstFaultMessage := 'Analog high';
ELSIF FirstFault = 95141 THEN
FirstFaultNumber := 429;
FirstFaultMessage := 'Incremental low';
ELSIF FirstFault = 95142 THEN
FirstFaultNumber := 430;
FirstFaultMessage := 'Incremental high';
ELSIF FirstFault = 95143 THEN
FirstFaultNumber := 431;
FirstFaultMessage := 'Secondary feedback Hall error';
ELSIF FirstFault = 95144 THEN
FirstFaultNumber := 432;
FirstFaultMessage := 'Communication fault: Secondary Feedback';
ELSIF FirstFault = 95145 THEN
FirstFaultNumber := 999;
FirstFaultMessage := 'Reserved';
ELSIF FirstFault = 95146 THEN
FirstFaultNumber := 999;
FirstFaultMessage := 'Reserved';
ELSIF FirstFault = 98608 THEN
FirstFaultNumber := 129;
FirstFaultMessage := 'Heartbeat lost';
ELSIF FirstFault = 99089 THEN
FirstFaultNumber := 304;
FirstFaultMessage := 'Motor foldback';
ELSIF FirstFault = 99121 THEN
FirstFaultNumber := 524;
FirstFaultMessage := 'Drive foldback';
ELSIF FirstFault = 99456 THEN
FirstFaultNumber := 302;
FirstFaultMessage := 'Over speed';
ELSIF FirstFault = 99712 THEN
FirstFaultNumber := 107;
FirstFaultMessage := 'Clockwise limit switch exceeded';
ELSIF FirstFault = 99713 THEN
FirstFaultNumber := 108;
FirstFaultMessage := 'Counterclockwise limit switch exceeded';
ELSIF FirstFault = 99857 THEN
FirstFaultNumber := 439;
FirstFaultMessage := 'Following error (user)';
ELSIF FirstFault = 100224 THEN
FirstFaultNumber := 125;
FirstFaultMessage := 'FieldbusA Fieldbus is an industrial network system for real-time distributed control (e.g. CAN or Profibus). It is a way of connecting instruments in a plant design synchronization lost';
ELSIF FirstFault = 130816 THEN
FirstFaultNumber := 701;
FirstFaultMessage := 'Fieldbus runtimeIn computer science, runtime (or run-time) describes the operation of a computer program, the duration of its execution, from beginning to termination (compare compile time).
Within KAS, runtime also refers to the virtual machine that manage the program written in a computer language while it is running';
ELSIF FirstFault = 130817 THEN
FirstFaultNumber := 702;
FirstFaultMessage := 'Fieldbus communication lost';
ELSIF FirstFault = 130818 THEN
FirstFaultNumber := 529;
FirstFaultMessage := 'Iu current offset limit exceeded';
ELSIF FirstFault = 130819 THEN
FirstFaultNumber := 530;
FirstFaultMessage := 'Iv current offset limit exceeded';
ELSIF FirstFault = 130820 THEN
FirstFaultNumber := 521;
FirstFaultMessage := 'Regen over power';
ELSIF FirstFault = 130821 THEN
FirstFaultNumber := 527;
FirstFaultMessage := 'Iu current AD converter stuck';
ELSIF FirstFault = 130822 THEN
FirstFaultNumber := 528;
FirstFaultMessage := 'Iv current AD converter stuck';
ELSIF FirstFault = 130823 THEN
FirstFaultNumber := 525;
FirstFaultMessage := 'Control output over current';
ELSIF FirstFault = 130824 THEN
FirstFaultNumber := 526;
FirstFaultMessage := 'Current sensor short circuit';
ELSIF FirstFault = 130825 THEN
FirstFaultNumber := 128;
FirstFaultMessage := 'MPOLES/FPOLES not an integer';
ELSIF FirstFault = 130826 THEN
FirstFaultNumber := 531;
FirstFaultMessage := 'Power stage fault';
ELSIF FirstFault = 130827 THEN
FirstFaultNumber := 602;
FirstFaultMessage := 'Safe torqueTorque is the tendency of a force to rotate an object about an axis. Just as a force is a push or a pull, a torque can be thought of as a twist off';
ELSIF FirstFault = 130832 THEN
FirstFaultNumber := 414;
FirstFaultMessage := 'SFD single corrupted position';
ELSIF FirstFault = 130833 THEN
FirstFaultNumber := 524;
FirstFaultMessage := 'Warning: Drive foldback';
ELSIF FirstFault = 130834 THEN
FirstFaultNumber := 304;
FirstFaultMessage := 'Warning: Motor foldback';
ELSIF FirstFault = 130835 THEN
FirstFaultNumber := 438;
FirstFaultMessage := 'Warning: Control position deviation';
ELSIF FirstFault = 130836 THEN
FirstFaultNumber := 107;
FirstFaultMessage := 'Warning: Clockwise software position limit is exceeded';
ELSIF FirstFault = 130837 THEN
FirstFaultNumber := 108;
FirstFaultMessage := 'Warning: Counterclockwise software position limit is exceeded';
ELSIF FirstFault = 130838 THEN
FirstFaultNumber := 123;
FirstFaultMessage := 'Warning: Counterclockwise software position limit is exceeded';
ELSIF FirstFault = 130839 THEN
FirstFaultNumber := 301;
FirstFaultMessage := 'Warning: Motor overheated';
ELSIF FirstFault = 130840 THEN
FirstFaultNumber := 234;
FirstFaultMessage := 'Warning: Control temperature sensor 1 high';
ELSIF FirstFault = 130841 THEN
FirstFaultNumber := 235;
FirstFaultMessage := 'Warning: Power temperature sensor 1 high';
ELSIF FirstFault = 130842 THEN
FirstFaultNumber := 236;
FirstFaultMessage := 'Warning: Power temperature sensor 2 high';
ELSIF FirstFault = 130843 THEN
FirstFaultNumber := 237;
FirstFaultMessage := 'Warning: Power temperature sensor 3 high';
ELSIF FirstFault = 130844 THEN
FirstFaultNumber := 240;
FirstFaultMessage := 'Warning: Control temperature sensor 1 low';
ELSIF FirstFault = 130845 THEN
FirstFaultNumber := 241;
FirstFaultMessage := 'Warning: Control temperature sensor 1 low';
ELSIF FirstFault = 130846 THEN
FirstFaultNumber := 242;
FirstFaultMessage := 'Warning: Power temperature sensor 2 low';
ELSIF FirstFault = 130847 THEN
FirstFaultNumber := 243;
FirstFaultMessage := 'Warning: Power temperature sensor 3 low';
ELSIF FirstFault = 130848 THEN
FirstFaultNumber := 502;
FirstFaultMessage := 'Warning: Bus under voltage';
ELSIF FirstFault = 130849 THEN
FirstFaultNumber := 503;
FirstFaultMessage := 'Warning: Input phase loss.';
ELSIF FirstFault = 130850 THEN
FirstFaultNumber := 521;
FirstFaultMessage := 'Warning: Regen I2T';
ELSIF FirstFault = 130851 THEN
FirstFaultNumber := 125;
FirstFaultMessage := 'Warning: Fieldbus PLL unlocked';
ELSE
FirstFaultNumber := FirstFault;
FirstFaultMessage := 'Unknown Fault';
END_IF;
END_IF;
ELSE //If no faults in drive, reset outputs
FirstFault := 0;
FirstFaultNumber := 0;
FirstFaultMessage := 'No Fault';
END_IF;
IF NumberFaults > 1 THEN //If more than one faults exist, return the CANopen fault number, convert and output 3 digit AKD fault number, and fault description
IF Inst_ECATReadSdo2.Value <> 0 THEN
SecondFault := Inst_ECATReadSdo2.Value;
IF SecondFault = 78096 THEN
SecondFaultNumber := 523;
SecondFaultMessage := 'Bus over voltage FPGA';
ELSIF SecondFault = 78128 THEN
SecondFaultNumber := 503;
SecondFaultMessage := 'Bus capacitor overload';
ELSIF SecondFault = 78352 THEN
SecondFaultNumber := 501;
SecondFaultMessage := 'Bus over voltage';
ELSIF SecondFault = 78368 THEN
SecondFaultNumber := 502;
SecondFaultMessage := 'Bus under voltage';
ELSIF SecondFault = 82448 THEN
SecondFaultNumber := 234;
SecondFaultMessage := 'Control temperature sensor 1 high';
ELSIF SecondFault = 82704 THEN
SecondFaultNumber := 235;
SecondFaultMessage := 'Power temperature sensor 1, 2, or 3 high';
ELSIF SecondFault = 86291 THEN
SecondFaultNumber := 512;
SecondFaultMessage := '5V0 under voltage';
ELSIF SecondFault = 86292 THEN
SecondFaultNumber := 505;
SecondFaultMessage := '1V2 under voltage';
ELSIF SecondFault = 86293 THEN
SecondFaultNumber := 507;
SecondFaultMessage := '2V5 under voltage';
ELSIF SecondFault = 86294 THEN
SecondFaultNumber := 509;
SecondFaultMessage := '3V3 under voltage';
ELSIF SecondFault = 86295 THEN
SecondFaultNumber := 514;
SecondFaultMessage := '+12V0 under voltage';
ELSIF SecondFault = 86296 THEN
SecondFaultNumber := 516;
SecondFaultMessage := '-12V0 under voltage';
ELSIF SecondFault = 86297 THEN
SecondFaultNumber := 518;
SecondFaultMessage := 'Analog 3V3 under voltage';
ELSIF SecondFault = 86400 THEN
SecondFaultNumber := 504;
SecondFaultMessage := '1V2 over voltage';
ELSIF SecondFault = 86401 THEN
SecondFaultNumber := 506;
SecondFaultMessage := '2V5 over voltage';
ELSIF SecondFault = 86402 THEN
SecondFaultNumber := 508;
SecondFaultMessage := '3V3 over voltage';
ELSIF SecondFault = 86403 THEN
SecondFaultNumber := 510;
SecondFaultMessage := '5V0 over voltage';
ELSIF SecondFault = 86404 THEN
SecondFaultNumber := 513;
SecondFaultMessage := '+12V0 over voltage';
ELSIF SecondFault = 86405 THEN
SecondFaultNumber := 104;
SecondFaultMessage := 'Operational FPGA failed';
ELSIF SecondFault = 86406 THEN
SecondFaultNumber := 517;
SecondFaultMessage := 'Analog 3V3 over voltage';
ELSIF SecondFault = 87312 THEN
SecondFaultNumber := 201;
SecondFaultMessage := 'Internal RAM failed';
ELSIF SecondFault = 87344 THEN
SecondFaultNumber := 105;
SecondFaultMessage := 'NV memory stamp invalid';
ELSIF SecondFault = 87424 THEN
SecondFaultNumber := 106;
SecondFaultMessage := 'NV memory data invalid';
ELSIF SecondFault = 87425 THEN
SecondFaultNumber := 202;
SecondFaultMessage := 'External RAM failed';
ELSIF SecondFault = 87426 THEN
SecondFaultNumber := 203;
SecondFaultMessage := 'Code integrity failed';
ELSIF SecondFault = 87427 THEN
SecondFaultNumber := 102;
SecondFaultMessage := 'Resident firmware failed';
ELSIF SecondFault = 87428 THEN
SecondFaultNumber := 103;
SecondFaultMessage := 'Resident FPGA failed';
ELSIF SecondFault = 87429 THEN
SecondFaultNumber := 104;
SecondFaultMessage := 'Operational FPGA failed';
ELSIF SecondFault = 94592 THEN
SecondFaultNumber := 301;
SecondFaultMessage := 'Motor overheated';
ELSIF SecondFault = 94594 THEN
SecondFaultNumber := 305;
SecondFaultMessage := 'Brake open circuit';
ELSIF SecondFault = 94595 THEN
SecondFaultNumber := 306;
SecondFaultMessage := 'Brake short circuit';
ELSIF SecondFault = 94596 THEN
SecondFaultNumber := 307;
SecondFaultMessage := 'Brake closed during enable state';
ELSIF SecondFault = 94597 THEN
SecondFaultNumber := 436;
SecondFaultMessage := 'Motor EnDat overheat'; //Change Description ??
ELSIF SecondFault = 94979 THEN
SecondFaultNumber := 426;
SecondFaultMessage := 'Resolver error';
ELSIF SecondFault = 94981 THEN
SecondFaultNumber := 417;
SecondFaultMessage := 'Broken wire in primary feedback';
ELSIF SecondFault = 95104 THEN
SecondFaultNumber := 402;
SecondFaultMessage := 'Analog signal amplitude fault';
ELSIF SecondFault = 95105 THEN
SecondFaultNumber := 403;
SecondFaultMessage := 'EnDat communication fault';
ELSIF SecondFault = 95106 THEN
SecondFaultNumber := 404;
SecondFaultMessage := 'Hall error';
ELSIF SecondFault = 95107 THEN
SecondFaultNumber := 405;
SecondFaultMessage := 'BiSS watchdog';
ELSIF SecondFault = 95108 THEN
SecondFaultNumber := 406;
SecondFaultMessage := 'BiSS multi cycle';
ELSIF SecondFault = 95109 THEN
SecondFaultNumber := 407;
SecondFaultMessage := 'BiSS sensor';
ELSIF SecondFault = 95110 THEN
SecondFaultNumber := 408;
SecondFaultMessage := 'SFD configuration';
ELSIF SecondFault = 95111 THEN
SecondFaultNumber := 409;
SecondFaultMessage := 'SFD UART overrun';
ELSIF SecondFault = 95112 THEN
SecondFaultNumber := 410;
SecondFaultMessage := 'SFD UART frame';
ELSIF SecondFault = 95113 THEN
SecondFaultNumber := 412;
SecondFaultMessage := 'SFD UART parity';
ELSIF SecondFault = 95114 THEN
SecondFaultNumber := 413;
SecondFaultMessage := 'SFD transfer timeout';
ELSIF SecondFault = 95116 THEN
SecondFaultNumber := 415;
SecondFaultMessage := 'SFD multiple corrupt position';
ELSIF SecondFault = 95117 THEN
SecondFaultNumber := 416;
SecondFaultMessage := 'SFD Transfer incomplete';
ELSIF SecondFault = 95118 THEN
SecondFaultNumber := 418;
SecondFaultMessage := 'Primary feedback power supply';
ELSIF SecondFault = 95119 THEN
SecondFaultNumber := 401;
SecondFaultMessage := 'Failed to set feedback type';
ELSIF SecondFault = 95136 THEN
SecondFaultNumber := 424;
SecondFaultMessage := 'Resolver amplitude low';
ELSIF SecondFault = 95137 THEN
SecondFaultNumber := 425;
SecondFaultMessage := 'Resolver amplitude high';
ELSIF SecondFault = 95138 THEN
SecondFaultNumber := 425;
SecondFaultMessage := 'Resolver amplitude high';
ELSIF SecondFault = 95139 THEN
SecondFaultNumber := 427;
SecondFaultMessage := 'Analog low';
ELSIF SecondFault = 95140 THEN
SecondFaultNumber := 428;
SecondFaultMessage := 'Analog high';
ELSIF SecondFault = 95141 THEN
SecondFaultNumber := 429;
SecondFaultMessage := 'Incremental low';
ELSIF SecondFault = 95142 THEN
SecondFaultNumber := 430;
SecondFaultMessage := 'Incremental high';
ELSIF SecondFault = 95143 THEN
SecondFaultNumber := 431;
SecondFaultMessage := 'Secondary feedback Hall error';
ELSIF SecondFault = 95144 THEN
SecondFaultNumber := 432;
SecondFaultMessage := 'Communication fault: Secondary Feedback';
ELSIF SecondFault = 95145 THEN
SecondFaultNumber := 999;
SecondFaultMessage := 'Reserved';
ELSIF SecondFault = 95146 THEN
SecondFaultNumber := 999;
SecondFaultMessage := 'Reserved';
ELSIF SecondFault = 98608 THEN
SecondFaultNumber := 129;
SecondFaultMessage := 'Heartbeat lost';
ELSIF SecondFault = 99089 THEN
SecondFaultNumber := 304;
SecondFaultMessage := 'Motor foldback';
ELSIF SecondFault = 99121 THEN
SecondFaultNumber := 524;
SecondFaultMessage := 'Drive foldback';
ELSIF SecondFault = 99456 THEN
SecondFaultNumber := 302;
SecondFaultMessage := 'Over speed';
ELSIF SecondFault = 99712 THEN
SecondFaultNumber := 107;
SecondFaultMessage := 'Clockwise limit switch exceeded';
ELSIF SecondFault = 99713 THEN
SecondFaultNumber := 108;
SecondFaultMessage := 'Counterclockwise limit switch exceeded';
ELSIF SecondFault = 99857 THEN
SecondFaultNumber := 439;
SecondFaultMessage := 'Following error (user)';
ELSIF SecondFault = 100224 THEN
SecondFaultNumber := 125;
SecondFaultMessage := 'Fieldbus synchronization lost';
ELSIF SecondFault = 130816 THEN
SecondFaultNumber := 701;
SecondFaultMessage := 'Fieldbus runtime';
ELSIF SecondFault = 130817 THEN
SecondFaultNumber := 702;
SecondFaultMessage := 'Fieldbus communication lost';
ELSIF SecondFault = 130818 THEN
SecondFaultNumber := 529;
SecondFaultMessage := 'Iu current offset limit exceeded';
ELSIF SecondFault = 130819 THEN
SecondFaultNumber := 530;
SecondFaultMessage := 'Iv current offset limit exceeded';
ELSIF SecondFault = 130820 THEN
SecondFaultNumber := 521;
SecondFaultMessage := 'Regen over power';
ELSIF SecondFault = 130821 THEN
SecondFaultNumber := 527;
SecondFaultMessage := 'Iu current AD converter stuck';
ELSIF SecondFault = 130822 THEN
SecondFaultNumber := 528;
SecondFaultMessage := 'Iv current AD converter stuck';
ELSIF SecondFault = 130823 THEN
SecondFaultNumber := 525;
SecondFaultMessage := 'Control output over current';
ELSIF SecondFault = 130824 THEN
SecondFaultNumber := 526;
SecondFaultMessage := 'Current sensor short circuit';
ELSIF SecondFault = 130825 THEN
SecondFaultNumber := 128;
SecondFaultMessage := 'MPOLES/FPOLES not an integer';
ELSIF SecondFault = 130826 THEN
SecondFaultNumber := 531;
SecondFaultMessage := 'Power stage fault';
ELSIF SecondFault = 130827 THEN
SecondFaultNumber := 602;
SecondFaultMessage := 'Safe torque off';
ELSIF SecondFault = 130832 THEN
SecondFaultNumber := 414;
SecondFaultMessage := 'SFD single corrupted position';
ELSIF SecondFault = 130833 THEN
SecondFaultNumber := 524;
SecondFaultMessage := 'Warning: Drive foldback';
ELSIF SecondFault = 130834 THEN
SecondFaultNumber := 304;
SecondFaultMessage := 'Warning: Motor foldback';
ELSIF SecondFault = 130835 THEN
SecondFaultNumber := 438;
SecondFaultMessage := 'Warning: Control position deviation';
ELSIF SecondFault = 130836 THEN
SecondFaultNumber := 107;
SecondFaultMessage := 'Warning: Clockwise software position limit is exceeded';
ELSIF SecondFault = 130837 THEN
SecondFaultNumber := 108;
SecondFaultMessage := 'Warning: Counterclockwise software position limit is exceeded';
ELSIF SecondFault = 130838 THEN
SecondFaultNumber := 123;
SecondFaultMessage := 'Warning: Counterclockwise software position limit is exceeded';
ELSIF SecondFault = 130839 THEN
SecondFaultNumber := 301;
SecondFaultMessage := 'Warning: Motor overheated';
ELSIF SecondFault = 130840 THEN
SecondFaultNumber := 234;
SecondFaultMessage := 'Warning: Control temperature sensor 1 high';
ELSIF SecondFault = 130841 THEN
SecondFaultNumber := 235;
SecondFaultMessage := 'Warning: Power temperature sensor 1 high';
ELSIF SecondFault = 130842 THEN
SecondFaultNumber := 236;
SecondFaultMessage := 'Warning: Power temperature sensor 2 high';
ELSIF SecondFault = 130843 THEN
SecondFaultNumber := 237;
SecondFaultMessage := 'Warning: Power temperature sensor 3 high';
ELSIF SecondFault = 130844 THEN
SecondFaultNumber := 240;
SecondFaultMessage := 'Warning: Control temperature sensor 1 low';
ELSIF SecondFault = 130845 THEN
SecondFaultNumber := 241;
SecondFaultMessage := 'Warning: Control temperature sensor 1 low';
ELSIF SecondFault = 130846 THEN
SecondFaultNumber := 242;
SecondFaultMessage := 'Warning: Power temperature sensor 2 low';
ELSIF SecondFault = 130847 THEN
SecondFaultNumber := 243;
SecondFaultMessage := 'Warning: Power temperature sensor 3 low';
ELSIF SecondFault = 130848 THEN
SecondFaultNumber := 502;
SecondFaultMessage := 'Warning: Bus under voltage';
ELSIF SecondFault = 130849 THEN
SecondFaultNumber := 503;
SecondFaultMessage := 'Warning: Input phase loss.';
ELSIF SecondFault = 130850 THEN
SecondFaultNumber := 521;
SecondFaultMessage := 'Warning: Regen I2T';
ELSIF SecondFault = 130851 THEN
SecondFaultNumber := 125;
SecondFaultMessage := 'Warning: Fieldbus PLL unlocked';
ELSE
SecondFaultNumber := SecondFault;
SecondFaultMessage := 'Unknown Fault';
END_IF;
END_IF;
ELSE //If two faults do not exist, clear second fault outputs
SecondFault := 0;
SecondFaultNumber := 0;
SecondFaultMessage := 'No Fault';
END_IF;
IF NumberFaults > 2 THEN //If 3 faults exist, return the CANopen fault number, convert and output 3 digit AKD fault number, and fault description
IF Inst_ECATReadSdo3.Value <> 0 THEN
ThirdFault := Inst_ECATReadSdo3.Value;
IF ThirdFault = 78096 THEN
ThirdFaultNumber := 523;
ThirdFaultMessage := 'Bus over voltage FPGA';
ELSIF ThirdFault = 78128 THEN
ThirdFaultNumber := 503;
ThirdFaultMessage := 'Bus capacitor overload';
ELSIF ThirdFault = 78352 THEN
ThirdFaultNumber := 501;
ThirdFaultMessage := 'Bus over voltage';
ELSIF ThirdFault = 78368 THEN
ThirdFaultNumber := 502;
ThirdFaultMessage := 'Bus under voltage';
ELSIF ThirdFault = 82448 THEN
ThirdFaultNumber := 234;
ThirdFaultMessage := 'Control temperature sensor 1 high';
ELSIF ThirdFault = 82704 THEN
ThirdFaultNumber := 235;
ThirdFaultMessage := 'Power temperature sensor 1, 2, or 3 high';
ELSIF ThirdFault = 86291 THEN
ThirdFaultNumber := 512;
ThirdFaultMessage := '5V0 under voltage';
ELSIF ThirdFault = 86292 THEN
ThirdFaultNumber := 505;
ThirdFaultMessage := '1V2 under voltage';
ELSIF ThirdFault = 86293 THEN
ThirdFaultNumber := 507;
ThirdFaultMessage := '2V5 under voltage';
ELSIF ThirdFault = 86294 THEN
ThirdFaultNumber := 509;
ThirdFaultMessage := '3V3 under voltage';
ELSIF ThirdFault = 86295 THEN
ThirdFaultNumber := 514;
ThirdFaultMessage := '+12V0 under voltage';
ELSIF ThirdFault = 86296 THEN
ThirdFaultNumber := 516;
ThirdFaultMessage := '-12V0 under voltage';
ELSIF ThirdFault = 86297 THEN
ThirdFaultNumber := 518;
ThirdFaultMessage := 'Analog 3V3 under voltage';
ELSIF ThirdFault = 86400 THEN
ThirdFaultNumber := 504;
ThirdFaultMessage := '1V2 over voltage';
ELSIF ThirdFault = 86401 THEN
ThirdFaultNumber := 506;
ThirdFaultMessage := '2V5 over voltage';
ELSIF ThirdFault = 86402 THEN
ThirdFaultNumber := 508;
ThirdFaultMessage := '3V3 over voltage';
ELSIF ThirdFault = 86403 THEN
ThirdFaultNumber := 510;
ThirdFaultMessage := '5V0 over voltage';
ELSIF ThirdFault = 86404 THEN
ThirdFaultNumber := 513;
ThirdFaultMessage := '+12V0 over voltage';
ELSIF ThirdFault = 86405 THEN
ThirdFaultNumber := 104;
ThirdFaultMessage := 'Operational FPGA failed';
ELSIF ThirdFault = 86406 THEN
ThirdFaultNumber := 517;
ThirdFaultMessage := 'Analog 3V3 over voltage';
ELSIF ThirdFault = 87312 THEN
ThirdFaultNumber := 201;
ThirdFaultMessage := 'Internal RAM failed';
ELSIF ThirdFault = 87344 THEN
ThirdFaultNumber := 105;
ThirdFaultMessage := 'NV memory stamp invalid';
ELSIF ThirdFault = 87424 THEN
ThirdFaultNumber := 106;
ThirdFaultMessage := 'NV memory data invalid';
ELSIF ThirdFault = 87425 THEN
ThirdFaultNumber := 202;
ThirdFaultMessage := 'External RAM failed';
ELSIF ThirdFault = 87426 THEN
ThirdFaultNumber := 203;
ThirdFaultMessage := 'Code integrity failed';
ELSIF ThirdFault = 87427 THEN
ThirdFaultNumber := 102;
ThirdFaultMessage := 'Resident firmware failed';
ELSIF ThirdFault = 87428 THEN
ThirdFaultNumber := 103;
ThirdFaultMessage := 'Resident FPGA failed';
ELSIF ThirdFault = 87429 THEN
ThirdFaultNumber := 104;
ThirdFaultMessage := 'Operational FPGA failed';
ELSIF ThirdFault = 94592 THEN
ThirdFaultNumber := 301;
ThirdFaultMessage := 'Motor overheated';
ELSIF ThirdFault = 94594 THEN
ThirdFaultNumber := 305;
ThirdFaultMessage := 'Brake open circuit';
ELSIF ThirdFault = 94595 THEN
ThirdFaultNumber := 306;
ThirdFaultMessage := 'Brake short circuit';
ELSIF ThirdFault = 94596 THEN
ThirdFaultNumber := 307;
ThirdFaultMessage := 'Brake closed during enable state';
ELSIF ThirdFault = 94597 THEN
ThirdFaultNumber := 436;
ThirdFaultMessage := 'Motor EnDat overheat'; //Change Description ??
ELSIF ThirdFault = 94979 THEN
ThirdFaultNumber := 426;
ThirdFaultMessage := 'Resolver error';
ELSIF ThirdFault = 94981 THEN
ThirdFaultNumber := 417;
ThirdFaultMessage := 'Broken wire in primary feedback';
ELSIF ThirdFault = 95104 THEN
ThirdFaultNumber := 402;
ThirdFaultMessage := 'Analog signal amplitude fault';
ELSIF ThirdFault = 95105 THEN
ThirdFaultNumber := 403;
ThirdFaultMessage := 'EnDat communication fault';
ELSIF ThirdFault = 95106 THEN
ThirdFaultNumber := 404;
ThirdFaultMessage := 'Hall error';
ELSIF ThirdFault = 95107 THEN
ThirdFaultNumber := 405;
ThirdFaultMessage := 'BiSS watchdog';
ELSIF ThirdFault = 95108 THEN
ThirdFaultNumber := 406;
ThirdFaultMessage := 'BiSS multi cycle';
ELSIF ThirdFault = 95109 THEN
ThirdFaultNumber := 407;
ThirdFaultMessage := 'BiSS sensor';
ELSIF ThirdFault = 95110 THEN
ThirdFaultNumber := 408;
ThirdFaultMessage := 'SFD configuration';
ELSIF ThirdFault = 95111 THEN
ThirdFaultNumber := 409;
ThirdFaultMessage := 'SFD UART overrun';
ELSIF ThirdFault = 95112 THEN
ThirdFaultNumber := 410;
ThirdFaultMessage := 'SFD UART frame';
ELSIF ThirdFault = 95113 THEN
ThirdFaultNumber := 412;
ThirdFaultMessage := 'SFD UART parity';
ELSIF ThirdFault = 95114 THEN
ThirdFaultNumber := 413;
ThirdFaultMessage := 'SFD transfer timeout';
ELSIF ThirdFault = 95116 THEN
ThirdFaultNumber := 415;
ThirdFaultMessage := 'SFD multiple corrupt position';
ELSIF ThirdFault = 95117 THEN
ThirdFaultNumber := 416;
ThirdFaultMessage := 'SFD Transfer incomplete';
ELSIF ThirdFault = 95118 THEN
ThirdFaultNumber := 418;
ThirdFaultMessage := 'Primary feedback power supply';
ELSIF ThirdFault = 95119 THEN
ThirdFaultNumber := 401;
ThirdFaultMessage := 'Failed to set feedback type';
ELSIF ThirdFault = 95136 THEN
ThirdFaultNumber := 424;
ThirdFaultMessage := 'Resolver amplitude low';
ELSIF ThirdFault = 95137 THEN
ThirdFaultNumber := 425;
ThirdFaultMessage := 'Resolver amplitude high';
ELSIF ThirdFault = 95138 THEN
ThirdFaultNumber := 425;
ThirdFaultMessage := 'Resolver amplitude high';
ELSIF ThirdFault = 95139 THEN
ThirdFaultNumber := 427;
ThirdFaultMessage := 'Analog low';
ELSIF ThirdFault = 95140 THEN
ThirdFaultNumber := 428;
ThirdFaultMessage := 'Analog high';
ELSIF ThirdFault = 95141 THEN
ThirdFaultNumber := 429;
ThirdFaultMessage := 'Incremental low';
ELSIF ThirdFault = 95142 THEN
ThirdFaultNumber := 430;
ThirdFaultMessage := 'Incremental high';
ELSIF ThirdFault = 95143 THEN
ThirdFaultNumber := 431;
ThirdFaultMessage := 'Thirdary feedback Hall error';
ELSIF ThirdFault = 95144 THEN
ThirdFaultNumber := 432;
ThirdFaultMessage := 'Communication fault: Thirdary Feedback';
ELSIF ThirdFault = 95145 THEN
ThirdFaultNumber := 999;
ThirdFaultMessage := 'Reserved';
ELSIF ThirdFault = 95146 THEN
ThirdFaultNumber := 999;
ThirdFaultMessage := 'Reserved';
ELSIF ThirdFault = 98608 THEN
ThirdFaultNumber := 129;
ThirdFaultMessage := 'Heartbeat lost';
ELSIF ThirdFault = 99089 THEN
ThirdFaultNumber := 304;
ThirdFaultMessage := 'Motor foldback';
ELSIF ThirdFault = 99121 THEN
ThirdFaultNumber := 524;
ThirdFaultMessage := 'Drive foldback';
ELSIF ThirdFault = 99456 THEN
ThirdFaultNumber := 302;
ThirdFaultMessage := 'Over speed';
ELSIF ThirdFault = 99712 THEN
ThirdFaultNumber := 107;
ThirdFaultMessage := 'Clockwise limit switch exceeded';
ELSIF ThirdFault = 99713 THEN
ThirdFaultNumber := 108;
ThirdFaultMessage := 'Counterclockwise limit switch exceeded';
ELSIF ThirdFault = 99857 THEN
ThirdFaultNumber := 439;
ThirdFaultMessage := 'Following error (user)';
ELSIF ThirdFault = 100224 THEN
ThirdFaultNumber := 125;
ThirdFaultMessage := 'Fieldbus synchronization lost';
ELSIF ThirdFault = 130816 THEN
ThirdFaultNumber := 701;
ThirdFaultMessage := 'Fieldbus runtime';
ELSIF ThirdFault = 130817 THEN
ThirdFaultNumber := 702;
ThirdFaultMessage := 'Fieldbus communication lost';
ELSIF ThirdFault = 130818 THEN
ThirdFaultNumber := 529;
ThirdFaultMessage := 'Iu current offset limit exceeded';
ELSIF ThirdFault = 130819 THEN
ThirdFaultNumber := 530;
ThirdFaultMessage := 'Iv current offset limit exceeded';
ELSIF ThirdFault = 130820 THEN
ThirdFaultNumber := 521;
ThirdFaultMessage := 'Regen over power';
ELSIF ThirdFault = 130821 THEN
ThirdFaultNumber := 527;
ThirdFaultMessage := 'Iu current AD converter stuck';
ELSIF ThirdFault = 130822 THEN
ThirdFaultNumber := 528;
ThirdFaultMessage := 'Iv current AD converter stuck';
ELSIF ThirdFault = 130823 THEN
ThirdFaultNumber := 525;
ThirdFaultMessage := 'Control output over current';
ELSIF ThirdFault = 130824 THEN
ThirdFaultNumber := 526;
ThirdFaultMessage := 'Current sensor short circuit';
ELSIF ThirdFault = 130825 THEN
ThirdFaultNumber := 128;
ThirdFaultMessage := 'MPOLES/FPOLES not an integer';
ELSIF ThirdFault = 130826 THEN
ThirdFaultNumber := 531;
ThirdFaultMessage := 'Power stage fault';
ELSIF ThirdFault = 130827 THEN
ThirdFaultNumber := 602;
ThirdFaultMessage := 'Safe torque off';
ELSIF ThirdFault = 130832 THEN
ThirdFaultNumber := 414;
ThirdFaultMessage := 'SFD single corrupted position';
ELSIF ThirdFault = 130833 THEN
ThirdFaultNumber := 524;
ThirdFaultMessage := 'Warning: Drive foldback';
ELSIF ThirdFault = 130834 THEN
ThirdFaultNumber := 304;
ThirdFaultMessage := 'Warning: Motor foldback';
ELSIF ThirdFault = 130835 THEN
ThirdFaultNumber := 438;
ThirdFaultMessage := 'Warning: Control position deviation';
ELSIF ThirdFault = 130836 THEN
ThirdFaultNumber := 107;
ThirdFaultMessage := 'Warning: Clockwise software position limit is exceeded';
ELSIF ThirdFault = 130837 THEN
ThirdFaultNumber := 108;
ThirdFaultMessage := 'Warning: Counterclockwise software position limit is exceeded';
ELSIF ThirdFault = 130838 THEN
ThirdFaultNumber := 123;
ThirdFaultMessage := 'Warning: Counterclockwise software position limit is exceeded';
ELSIF ThirdFault = 130839 THEN
ThirdFaultNumber := 301;
ThirdFaultMessage := 'Warning: Motor overheated';
ELSIF ThirdFault = 130840 THEN
ThirdFaultNumber := 234;
ThirdFaultMessage := 'Warning: Control temperature sensor 1 high';
ELSIF ThirdFault = 130841 THEN
ThirdFaultNumber := 235;
ThirdFaultMessage := 'Warning: Power temperature sensor 1 high';
ELSIF ThirdFault = 130842 THEN
ThirdFaultNumber := 236;
ThirdFaultMessage := 'Warning: Power temperature sensor 2 high';
ELSIF ThirdFault = 130843 THEN
ThirdFaultNumber := 237;
ThirdFaultMessage := 'Warning: Power temperature sensor 3 high';
ELSIF ThirdFault = 130844 THEN
ThirdFaultNumber := 240;
ThirdFaultMessage := 'Warning: Control temperature sensor 1 low';
ELSIF ThirdFault = 130845 THEN
ThirdFaultNumber := 241;
ThirdFaultMessage := 'Warning: Control temperature sensor 1 low';
ELSIF ThirdFault = 130846 THEN
ThirdFaultNumber := 242;
ThirdFaultMessage := 'Warning: Power temperature sensor 2 low';
ELSIF ThirdFault = 130847 THEN
ThirdFaultNumber := 243;
ThirdFaultMessage := 'Warning: Power temperature sensor 3 low';
ELSIF ThirdFault = 130848 THEN
ThirdFaultNumber := 502;
ThirdFaultMessage := 'Warning: Bus under voltage';
ELSIF ThirdFault = 130849 THEN
ThirdFaultNumber := 503;
ThirdFaultMessage := 'Warning: Input phase loss.';
ELSIF ThirdFault = 130850 THEN
ThirdFaultNumber := 521;
ThirdFaultMessage := 'Warning: Regen I2T';
ELSIF ThirdFault = 130851 THEN
ThirdFaultNumber := 125;
ThirdFaultMessage := 'Warning: Fieldbus PLL unlocked';
ELSE
ThirdFaultNumber := ThirdFault;
ThirdFaultMessage := 'Unknown Fault';
END_IF;
END_IF;
ELSE //If three faults do not exist, clear third fault outputs ThirdFault := 0; ThirdFaultNumber := 0; ThirdFaultMessage := 'No Fault'; END_IF;
|
Copyright © 2015 Kollmorgen™ |
|