CoDeSys+ A9QVAR_GLOBAL END_VAR ',eGlobale_Variablen9Q 9Q_VAR_GLOBAL aT_Parameter : ARRAY[1..195] OF ParameterStruktur; str_Name : STRING; END_VAR  SCM_DC_AUTO_L1_in9Q 9QTYPE CM_DC_AUTO_L1_in : STRUCT x_Anticlockwise : BOOL; x_Faststopp: BOOL; r_Setpoint : REAL; x_Stopp : BOOL; END_STRUCT END_TYPE TCM_DC_AUTO_L2_in9Q 9Q}TYPE CM_DC_AUTO_L2_in : STRUCT x_Auto_On : BOOL; x_Auto_Start : BOOL; x_Auto_Stopp : BOOL; END_STRUCT END_TYPE V,dl/CM_DC_Hand_L2_in9Q 9QTYPE CM_DC_Hand_L2_in : STRUCT (*x_Hand_On : BOOL; x_Hand_Start : BOOL;*) x_Hand_Stopp_FreeCoasting : BOOL; (*x_Anticlockwise : BOOL;*) x_Hand_SetpointZero : BOOL; (*r_Hand_Setpoint : REAL; x_Error_Quitt_QT : BOOL;*) x_FixedFrequency : BOOL; x_Faststopp : BOOL; (**) usi_Stopbits : USINT := 1; usi_Parity: USINT := 0; ui_Baudrate : UINT := 9600; usi_NodeId: USINT := 2; t_Timeout : TIME := t#3000ms; usi_ComPort : USINT := 2; r_ParaValue1 : REAL; r_ParaValue2 : REAL; ui_ParaIndex1 : UINT; ui_ParaIndex2 : UINT; x_ReadOneParameter : BOOL; x_ReadTwoParameter : BOOL; x_WriteOneParameter : BOOL; x_WriteTwoParameter : BOOL; x_ModbusFaultQuitt : BOOL; END_STRUCT END_TYPE X,S9[CM_DC_HANDAUTO_L2_out9Q 9Q=TYPE CM_DC_HANDAUTO_L2_out : STRUCT (*x_Drive_Ready : BOOL; x_Start_Active : BOOL;*) x_Hand_StoppActive : BOOL; (*r_actual : REAL;*) x_Hand_SetpointZero : BOOL; (*x_Anticlockwise_Active : BOOL; r_Current_actual : REAL; str_Fault_Err : STRING;*) x_ErrorMessage : BOOL; x_FixedFrequency : BOOL; str_Fault_Modbus : STRING; x_ErrorMessage_Modbus : BOOL; x_Communication_Active : BOOL; (*Communication active*) x_Trans_Active : BOOL; (*Read Write Register in progress*) x_Trans_Done : BOOL; (*Read Write Register done*) i_ParameterValue1 : INT; (*ParameterValue2*) i_ParameterValue2 : INT; (*ParameterValue1*) x_TransPara_Active: BOOL; (*Read or Write Parameter in progress*) x_TransPara_Done : BOOL; (*Read or Write Parameter done*) END_STRUCT END_TYPE Y,SDf CM_DC_L0_in9Q 9QTYPE CM_DC_L0_in : STRUCT usi_NodeId : USINT; ui_Baudrate : UINT; usi_Parity : USINT; usi_Stopbits : USINT; t_Timeout : TIME; usi_ComPort : USINT; w_ParaValue1 : WORD; w_ParaValue2 : WORD; ui_ParaIndex1 : UINT; ui_ParaIndex2 : UINT; w_Controlword : WORD; x_HoldReadOneParameter : BOOL; x_HoldReadTwoParameter : BOOL; x_HoldWriteOneParameter : BOOL; x_HoldWriteTwoParameter : BOOL; x_Ready : BOOL; w_Setpoint : WORD; END_STRUCT END_TYPE Z, CM_DC_L0_out9Q 9Q!TYPE CM_DC_L0_out : STRUCT usi_FailCode : USINT; x_ComPortActive : BOOL; x_TransActive : BOOL; x_TransOk : BOOL; str_Fault : STRING; str_Fault_Modbus : STRING; b_Fault : BYTE; b_Status : BYTE; w_Statusword : WORD; x_TransPara_Active : BOOL; x_TransPara_Done : BOOL := TRUE; r_ParaValue1 : REAL; r_ParaValue2 : REAL; x_Fault: BOOL; x_Ready: BOOL; x_Running: BOOL; x_Anticlockwise: BOOL; x_SetpointZero: BOOL; w_FrequencyValue : WORD; w_CurrentValue: WORD; x_Stopped : BOOL; END_STRUCT END_TYPE B,n9ParameterStruktur9Q 9QZTYPE ParameterStruktur : STRUCT Name : STRING; Wert : REAL; END_STRUCT END_TYPEH,cModbus_cyclic_acyclic9Q 9QFUNCTION_BLOCK Modbus_cyclic_acyclic VAR_INPUT Hand_L2_in : CM_DC_Hand_L2_in; Auto_L2_in : CM_DC_Auto_L2_in; Auto_L1_in : CM_DC_Auto_L1_in; x_Hand_On : BOOL; x_Hand_Start : BOOL; x_Anticlockwise : BOOL; r_Hand_Setpoint : REAL; x_Error_Quitt_QT : BOOL; w_Statusword : WORD; w_FrequencyValue : WORD; w_CurrentValue : WORD; END_VAR VAR_OUTPUT L2_out : CM_DC_HANDAUTO_L2_out; x_Drive_Ready : BOOL; x_Start_Active : BOOL; r_actual : REAL; x_Anticlockwise_Active : BOOL; r_Current_actual : REAL; str_Fault_Err : STRING; w_Controlword : WORD; w_Frequencyword : WORD; END_VAR VAR L0_in : CM_DC_L0_in; L0_out : CM_DC_L0_out; aT_Tabelle: ARRAY [1..2] OF ParameterStruktur; ModbusCommunication : ModbusCommunication; WORD_ZU_BYTE : WORD_ZU_BYTE; R_TRIG_Fault_QT : R_TRIG; i_Case : INT; i_Counter : INT; usi_Functioncode : USINT; ui_DatNr : UINT; war_Input : ARRAY [1..120] OF WORD; w_OldSetpoint: WORD :=0; war_Register: ARRAY [1..120] OF WORD ; w_OldControlword: WORD; R_TRIG_ReadOne: R_TRIG; R_TRIG_ReadTwo: R_TRIG; R_TRIG_WriteOne: R_TRIG; R_TRIG_WriteTwo: R_TRIG; ui_Datoff: UINT; x_Start: BOOL; b_Error: BYTE; b_Status: BYTE; R_TRIG_ModbusFaultQuitt: R_TRIG; x_NotWritable: BOOL; END_VAR(*Weitergabe des FehlerStrings von L0_FaultMessage_EN an Level2 (VISU)*) str_Fault_Err:= L0_out.str_Fault; L2_out.str_Fault_Modbus := L0_out.str_Fault_Modbus; (*Weitergabe der Modbus spezifischen Parameter*) L0_in.usi_ComPort := Hand_L2_in.usi_ComPort; L0_in.ui_Baudrate := Hand_L2_in.ui_Baudrate; L0_in.usi_NodeId:= Hand_L2_in.usi_NodeId; L0_in.usi_Parity := Hand_L2_in.usi_Parity; L0_in.usi_Stopbits := Hand_L2_in.usi_Stopbits; L0_in.t_Timeout := Hand_L2_in.t_Timeout; IF L0_out.usi_FailCode>0 OR x_NotWritable THEN L2_out.x_ErrorMessage_Modbus := TRUE; ELSE L2_out.x_ErrorMessage_Modbus := FALSE; END_IF (*Freigabe und Quittierung des ModbusMasterBausteins*) R_TRIG_ModbusFaultQuitt.CLK := Hand_L2_in.x_ModbusFaultQuitt; IF R_TRIG_ModbusFaultQuitt.Q THEN L0_in.x_Ready := FALSE; i_Case := 1; ELSE L0_in.x_Ready := TRUE; END_IF (*Control*) (*Zurcksetzen des Controlword bei einem Fehler*) IF L0_out.w_Statusword.3 THEN x_Hand_Start := FALSE; Auto_L2_in.x_Auto_Start := FALSE; x_Hand_On := FALSE; Auto_L2_in.x_Auto_On := FALSE; L2_out.x_ErrorMessage := TRUE; L0_in.w_Controlword.0 := FALSE; END_IF (*Fehler quittieren*) R_TRIG_Fault_QT.CLK := x_Error_Quitt_QT; IF R_TRIG_Fault_QT.Q THEN L0_in.w_Controlword.2 := TRUE; L2_out.x_ErrorMessage := FALSE; END_IF IF NOT x_Error_Quitt_QT THEN L0_in.w_Controlword.2 :=FALSE; END_IF IF x_Hand_On THEN (*Betriebsart HAND einschalten*) Auto_L2_in.x_Auto_On:=FALSE; (*Betriebsart AUTO auf jeden Fall ausschalten*) Auto_L2_in.x_Auto_Start := FALSE; IF x_Hand_Start THEN (*Start in BA HAND*) L0_in.w_Controlword.0 := TRUE; (*Betrieb-Freigabe Controlword.0*) L0_in.w_Setpoint := REAL_TO_WORD((r_Hand_Setpoint)*10); (*Sollwerteingabe Frequenzwort*) L0_in.w_Controlword.3 := FALSE; (*Controlword.3 wird gesetzt*) L0_in.w_Controlword.1 := x_Anticlockwise; (*Linksdrehfeld Controlword.1 wird gesetzt*) L0_in.w_Controlword.7 := Hand_L2_in.x_Hand_SetpointZero; (*Sollwert = 0 Controlword.7*) L0_in.w_Controlword.6 := Hand_L2_in.x_FixedFrequency; (*Controlword.6 wird gesetzt*) L2_out.x_FixedFrequency := Hand_L2_in.x_FixedFrequency; (**) L0_in.w_Controlword.5 := FALSE; IF Hand_L2_in.x_Hand_Stopp_FreeCoasting THEN L0_in.w_Controlword.3 := TRUE; x_Hand_Start := FALSE; END_IF IF Hand_L2_in.x_Faststopp THEN L0_in.w_Controlword.5 := TRUE; x_Hand_Start := FALSE; END_IF END_IF IF NOT x_Hand_Start THEN (*Ausschalten*) L0_in.w_Controlword.0 := FALSE; END_IF END_IF IF NOT x_Hand_On THEN x_Hand_Start := FALSE; END_IF IF Auto_L2_in.x_Auto_On THEN (*Automatikbetrieb*) IF Auto_L2_in.x_Auto_Start THEN L0_in.w_Controlword.0 := TRUE; L0_in.w_Controlword.1 := Auto_L1_in.x_Anticlockwise; L0_in.w_Controlword.5 := Auto_L1_in.x_Faststopp; L0_in.w_Setpoint := REAL_TO_WORD(Auto_L1_in.r_Setpoint); END_IF IF NOT Auto_L2_in.x_Auto_Start THEN L0_in.w_Controlword.0 := FALSE; END_IF IF Auto_L2_in.x_Auto_Stopp THEN L0_in.w_Controlword.0 := FALSE; Auto_L2_in.x_Auto_Start := FALSE; END_IF END_IF (*Parameter auslesen und schreiben*) R_TRIG_ReadOne.CLK := Hand_L2_in.x_ReadOneParameter AND NOT L0_out.x_TransPara_Active; R_TRIG_ReadTwo.CLK := Hand_L2_in.x_ReadTwoParameter AND NOT L0_out.x_TransPara_Active; R_TRIG_WriteOne.CLK := Hand_L2_in.x_WriteOneParameter AND NOT L0_out.x_TransPara_Active; R_TRIG_WriteTwo.CLK := Hand_L2_in.x_WriteTwoParameter AND NOT L0_out.x_TransPara_Active; IF Hand_L2_in.ui_ParaIndex1 <=100 THEN Hand_L2_in.ui_ParaIndex1 := 101; END_IF IF Hand_L2_in.ui_ParaIndex2 <=100 THEN Hand_L2_in.ui_ParaIndex2 := 101; END_IF IF Hand_L2_in.ui_ParaIndex1 <=200 AND Hand_L2_in.ui_ParaIndex1 >114 THEN Hand_L2_in.ui_ParaIndex1 := 201; END_IF IF Hand_L2_in.ui_ParaIndex2 <=200 AND Hand_L2_in.ui_ParaIndex2 >114 THEN Hand_L2_in.ui_ParaIndex2 := 201; END_IF IF Hand_L2_in.ui_ParaIndex1 <=300 AND Hand_L2_in.ui_ParaIndex1 >240 THEN Hand_L2_in.ui_ParaIndex1 := 301; END_IF IF Hand_L2_in.ui_ParaIndex2 <=300 AND Hand_L2_in.ui_ParaIndex2 >240 THEN Hand_L2_in.ui_ParaIndex2 := 301; END_IF IF Hand_L2_in.ui_ParaIndex1 <=400 AND Hand_L2_in.ui_ParaIndex1 >318 THEN Hand_L2_in.ui_ParaIndex1 := 401; END_IF IF Hand_L2_in.ui_ParaIndex2 <=400 AND Hand_L2_in.ui_ParaIndex2 >318 THEN Hand_L2_in.ui_ParaIndex2 := 401; END_IF IF Hand_L2_in.ui_ParaIndex1 <=500 AND Hand_L2_in.ui_ParaIndex1 >412 THEN Hand_L2_in.ui_ParaIndex1 := 501; END_IF IF Hand_L2_in.ui_ParaIndex2 <=500 AND Hand_L2_in.ui_ParaIndex2 >412 THEN Hand_L2_in.ui_ParaIndex2 := 501; END_IF IF Hand_L2_in.ui_ParaIndex1 <=600 AND Hand_L2_in.ui_ParaIndex1 >514 THEN Hand_L2_in.ui_ParaIndex1 := 601; END_IF IF Hand_L2_in.ui_ParaIndex2 <=600 AND Hand_L2_in.ui_ParaIndex2 >514 THEN Hand_L2_in.ui_ParaIndex2 := 601; END_IF IF Hand_L2_in.ui_ParaIndex1 <=700 AND Hand_L2_in.ui_ParaIndex1 >630 THEN Hand_L2_in.ui_ParaIndex1 := 701; END_IF IF Hand_L2_in.ui_ParaIndex2 <=700 AND Hand_L2_in.ui_ParaIndex2 >630 THEN Hand_L2_in.ui_ParaIndex2 := 701; END_IF IF Hand_L2_in.ui_ParaIndex1 <=800 AND Hand_L2_in.ui_ParaIndex1 >717 THEN Hand_L2_in.ui_ParaIndex1 := 801; END_IF IF Hand_L2_in.ui_ParaIndex2 <=800 AND Hand_L2_in.ui_ParaIndex2 >717 THEN Hand_L2_in.ui_ParaIndex2 := 801; END_IF IF (Hand_L2_in.ui_ParaIndex1 <=900 AND Hand_L2_in.ui_ParaIndex1 >813) OR Hand_L2_in.ui_ParaIndex1 > 941 THEN Hand_L2_in.ui_ParaIndex1 := 901; END_IF IF Hand_L2_in.ui_ParaIndex2 <=900 AND Hand_L2_in.ui_ParaIndex2 >813 OR Hand_L2_in.ui_ParaIndex2 > 941 THEN Hand_L2_in.ui_ParaIndex2 := 901; END_IF (*Schreiben*) IF R_TRIG_WriteOne.Q THEN (*Taster: Write One Parameter ist bettigt worden*) L0_in.x_HoldWriteOneParameter := TRUE; L0_in.ui_ParaIndex1 := Hand_L2_in.ui_ParaIndex1; L0_in.w_ParaValue1:=REAL_TO_WORD(aT_Tabelle[1].Wert); aT_Parameter[Hand_L2_in.ui_ParaIndex1].Wert := aT_Tabelle[1].Wert; END_IF IF R_TRIG_WriteTwo.Q THEN L0_in.x_HoldWriteTwoParameter := TRUE; L0_in.ui_ParaIndex1 := Hand_L2_in.ui_ParaIndex1; L0_in.w_ParaValue1:=REAL_TO_WORD(aT_Tabelle[1].Wert); aT_Parameter[Hand_L2_in.ui_ParaIndex1].Wert := aT_Tabelle[1].Wert; L0_in.ui_ParaIndex2 := Hand_L2_in.ui_ParaIndex2; L0_in.w_ParaValue2:=REAL_TO_WORD(aT_Tabelle[2].Wert); aT_Parameter[Hand_L2_in.ui_ParaIndex2].Wert := aT_Tabelle[2].Wert; END_IF (*Lesen*) IF R_TRIG_ReadOne.Q THEN (*Taster: Read One Parameter ist bettigt worden*) L0_in.x_HoldReadOneParameter := TRUE; L0_in.ui_ParaIndex1 := Hand_L2_in.ui_ParaIndex1; aT_Parameter[Hand_L2_in.ui_ParaIndex1].Wert := L0_out.r_ParaValue1; END_IF IF R_TRIG_ReadTwo.Q THEN L0_in.x_HoldReadTwoParameter := TRUE; L0_in.ui_ParaIndex1 := Hand_L2_in.ui_ParaIndex1; L0_in.ui_ParaIndex2 := Hand_L2_in.ui_ParaIndex2; END_IF (*Status: bergabe von Level0 an Level2*) x_Drive_Ready := L0_out.w_Statusword.0; x_Start_Active := L0_out.w_Statusword.1; x_Anticlockwise_Active := L0_out.w_Statusword.2; L2_out.x_Hand_StoppActive := NOT L0_out.w_Statusword.1; L2_out.x_ErrorMessage := L0_out.w_Statusword.3; L2_out.x_Hand_SetpointZero := L0_out.w_Statusword.5; r_Current_actual := WORD_TO_REAL(L0_out.w_CurrentValue ); IF x_Anticlockwise_Active THEN r_actual := -65536+WORD_TO_REAL( L0_out.w_FrequencyValue); ELSE r_actual := WORD_TO_REAL(L0_out.w_FrequencyValue); END_IF (*Statusanzeige: Lesen-Schreiben der Parameter*) L2_out.x_TransPara_Active := L0_out.x_TransPara_Active AND NOT L0_out.x_TransPara_Done; L2_out.x_TransPara_Done := L0_out.x_TransPara_Done AND NOT L0_out.x_TransPara_Active; (*Statusanzeige: Gewhlter ComPort Aktiv?*) L2_out.x_Communication_Active :=L0_out.x_ComPortActive; (*Bausteinaufruf*) R_TRIG_Fault_QT(CLK:= , Q=> ); R_TRIG_ReadOne(CLK:= , Q=>); R_TRIG_ReadTwo(CLK:= , Q=>); R_TRIG_WriteOne(CLK:= , Q=>); R_TRIG_WriteTwo(CLK:= , Q=>); R_TRIG_ModbusFaultQuitt(CLK:= , Q=> ); L0_Modbus; L0_FaultMessage_EN; L2_ParameterOutput_EN; D,J3L0_FaultMessage_EN9Q!IF L0_out.usi_FailCode = 0 THEN L0_out.str_Fault_Modbus:= 'No Fault'; END_IF IF L0_out.usi_FailCode = 1 THEN L0_out.str_Fault_Modbus:= 'Invalid function code'; END_IF IF L0_out.usi_FailCode = 2 THEN L0_out.str_Fault_Modbus:= 'Invalid slave data address'; END_IF IF L0_out.usi_FailCode = 3 THEN (*L0_out.str_Fault_Modbus:= 'Invalid Value';*) L0_out.str_Fault_Modbus := 'Value Range'; END_IF IF L0_out.usi_FailCode = 4 THEN L0_out.str_Fault_Modbus:= 'MODBUS device fault, telegram lenth fault'; END_IF IF L0_out.usi_FailCode = 10 THEN L0_out.str_Fault_Modbus:= 'Parameter fault'; END_IF IF L0_out.usi_FailCode = 11 THEN L0_out.str_Fault_Modbus:= 'Fault during opening or initialisation of the COM port'; END_IF IF L0_out.usi_FailCode = 12 THEN L0_out.str_Fault_Modbus:= 'CRC FAULT'; END_IF IF L0_out.usi_FailCode = 13 THEN L0_out.str_Fault_Modbus:= 'MODBUS timeout'; END_IF IF L0_out.usi_FailCode = 14 THEN L0_out.str_Fault_Modbus:= 'Slave address fault'; END_IF IF L0_out.usi_FailCode = 15 THEN L0_out.str_Fault_Modbus:= 'Slave responds with incorrect FC'; END_IF IF L0_out.usi_FailCode = 16 THEN L0_out.str_Fault_Modbus:= 'Slave responds with false number or offset of the data'; END_IF (*Im RUN-Mode nicht schreibbare Parameter*) IF L0_out.w_Statusword.1 AND (Hand_L2_in.ui_ParaIndex1 =107 OR Hand_L2_in.ui_ParaIndex1 =108 OR Hand_L2_in.ui_ParaIndex1 =109 OR Hand_L2_in.ui_ParaIndex1 =111 OR Hand_L2_in.ui_ParaIndex1 =112 OR Hand_L2_in.ui_ParaIndex1 =113 OR Hand_L2_in.ui_ParaIndex1 =314 OR Hand_L2_in.ui_ParaIndex1 =315 OR Hand_L2_in.ui_ParaIndex1 =316 OR Hand_L2_in.ui_ParaIndex1 =317 OR Hand_L2_in.ui_ParaIndex1 =401 OR Hand_L2_in.ui_ParaIndex1 =402 OR Hand_L2_in.ui_ParaIndex1 =410 OR Hand_L2_in.ui_ParaIndex1 =412 OR Hand_L2_in.ui_ParaIndex1 =509 OR Hand_L2_in.ui_ParaIndex1 =510 OR Hand_L2_in.ui_ParaIndex1 =511 OR Hand_L2_in.ui_ParaIndex1 =601 OR Hand_L2_in.ui_ParaIndex1 =605 OR Hand_L2_in.ui_ParaIndex1 =606 OR Hand_L2_in.ui_ParaIndex1 =618 OR Hand_L2_in.ui_ParaIndex1 =629 OR Hand_L2_in.ui_ParaIndex1 > 900) THEN L0_out.str_Fault_Modbus := 'Caution: First Parameter in RUN mode not writable'; x_NotWritable := TRUE; ELSIF L0_out.w_Statusword.1 AND (Hand_L2_in.ui_ParaIndex2 =107 OR Hand_L2_in.ui_ParaIndex2 =108 OR Hand_L2_in.ui_ParaIndex2 =109 OR Hand_L2_in.ui_ParaIndex2 =111 OR Hand_L2_in.ui_ParaIndex2 =112 OR Hand_L2_in.ui_ParaIndex2=113 OR Hand_L2_in.ui_ParaIndex2 =314 OR Hand_L2_in.ui_ParaIndex2 =315 OR Hand_L2_in.ui_ParaIndex2=316 OR Hand_L2_in.ui_ParaIndex2 =317 OR Hand_L2_in.ui_ParaIndex2 =401 OR Hand_L2_in.ui_ParaIndex2 =402 OR Hand_L2_in.ui_ParaIndex2 =410 OR Hand_L2_in.ui_ParaIndex2 =412 OR Hand_L2_in.ui_ParaIndex2 =509 OR Hand_L2_in.ui_ParaIndex2 =510 OR Hand_L2_in.ui_ParaIndex2 =511 OR Hand_L2_in.ui_ParaIndex2 =601 OR Hand_L2_in.ui_ParaIndex2 =605 OR Hand_L2_in.ui_ParaIndex2 =606 OR Hand_L2_in.ui_ParaIndex2 =618 OR Hand_L2_in.ui_ParaIndex2 =629 OR Hand_L2_in.ui_ParaIndex2 > 900) THEN L0_out.str_Fault_Modbus := 'Caution: Second Parameter in RUN mode not writable'; x_NotWritable := TRUE; ELSE x_NotWritable := FALSE; END_IF IF NOT L0_out.w_Statusword.3 AND L0_out.usi_FailCode >0 THEN L0_out.str_Fault := 'Modbus Fault, see parameter page'; L2_out.x_ErrorMessage := TRUE; END_IF IF NOT L0_out.w_Statusword.3 AND L0_out.usi_FailCode =0 THEN L0_out.str_Fault:='No Fault'; END_IF IF L0_out.w_Statusword.3 THEN IF L0_out.b_Fault = 16#01 THEN L0_out.str_Fault:='Brake Chopper overcurrent'; END_IF IF L0_out.b_Fault = 16#02 THEN L0_out.str_Fault:='Braking resistance overload'; END_IF IF L0_out.b_Fault = 16#03 THEN L0_out.str_Fault:='Overcurrent at frequency inverter output'; END_IF IF L0_out.b_Fault = 16#04 THEN L0_out.str_Fault:='Motor, thermal overload'; END_IF IF L0_out.b_Fault = 16#05 THEN L0_out.str_Fault:='Short-circuit at safety circuit input'; END_IF IF L0_out.b_Fault = 16#06 THEN L0_out.str_Fault:='Overvoltage'; END_IF IF L0_out.b_Fault = 16#07 THEN L0_out.str_Fault:='Undervoltage'; END_IF IF L0_out.b_Fault = 16#08 THEN L0_out.str_Fault:='Overtemperature'; END_IF IF L0_out.b_Fault = 16#09 THEN L0_out.str_Fault:='Undertemperature'; END_IF IF L0_out.b_Fault = 16#0A THEN L0_out.str_Fault:='Default settings (parameters have been loaded)'; END_IF IF L0_out.b_Fault = 16#C0 THEN L0_out.str_Fault:='External error message'; END_IF IF L0_out.b_Fault = 16#0C THEN L0_out.str_Fault:='Error, Optibus'; END_IF IF L0_out.b_Fault = 16#0D THEN L0_out.str_Fault:='Excessively large voltage waves in DC link'; END_IF IF L0_out.b_Fault = 16#0E THEN L0_out.str_Fault:='Phase failure'; END_IF IF L0_out.b_Fault = 16#0F THEN L0_out.str_Fault:='Overcurrent at variable frequency drive output'; END_IF IF L0_out.b_Fault = 16#10 THEN L0_out.str_Fault:='Internal thermistor fault'; END_IF IF L0_out.b_Fault = 16#11 THEN L0_out.str_Fault:='EEPROM checksum fault'; END_IF IF L0_out.b_Fault = 16#12 THEN L0_out.str_Fault:='Analog input, Out-of-range value, Wire breakage'; END_IF IF L0_out.b_Fault = 16#13 THEN L0_out.str_Fault:='Error in internal memory'; END_IF IF L0_out.b_Fault = 16#14 THEN L0_out.str_Fault:='User-definable factory parameters have been loaded'; END_IF IF L0_out.b_Fault = 16#15 THEN L0_out.str_Fault:='Excessively high temperature, motor PTC'; END_IF IF L0_out.b_Fault = 16#16 THEN L0_out.str_Fault:='Fault, internal fan'; END_IF IF L0_out.b_Fault = 16#17 THEN L0_out.str_Fault:='Exccessively high ambient temperatur'; END_IF IF L0_out.b_Fault = 16#18 THEN L0_out.str_Fault:='Maximum torque limit exceeded'; END_IF IF L0_out.b_Fault = 16#19 THEN L0_out.str_Fault:='Output torque too lowe'; END_IF IF L0_out.b_Fault = 16#1A THEN L0_out.str_Fault:='Fault at variable frequency drive output'; END_IF IF L0_out.b_Fault = 16#1D THEN L0_out.str_Fault:='Short-circuit at safety circuit input'; END_IF IF L0_out.b_Fault = 16#1E THEN L0_out.str_Fault:='Encoder, communication lost'; END_IF IF L0_out.b_Fault = 16#1F THEN L0_out.str_Fault:='Encoder, speed error'; END_IF IF L0_out.b_Fault = 16#20 THEN L0_out.str_Fault:='Encoder,wrong PPRs set'; END_IF IF L0_out.b_Fault = 16#21 THEN L0_out.str_Fault:='Encoder, channel A fault'; END_IF IF L0_out.b_Fault = 16#22 THEN L0_out.str_Fault:='Encoder, channel B fault'; END_IF IF L0_out.b_Fault = 16#23 THEN L0_out.str_Fault:='Encoder, channel A and B fault'; END_IF IF L0_out.b_Fault = 16#24 THEN L0_out.str_Fault:='Encoder, RS485 data channel error'; END_IF IF L0_out.b_Fault = 16#25 THEN L0_out.str_Fault:='Encoder, IO communication lost'; END_IF IF L0_out.b_Fault = 16#26 THEN L0_out.str_Fault:='Encoder, oncorrect type'; END_IF IF L0_out.b_Fault = 16#27 THEN L0_out.str_Fault:='Encoder'; END_IF IF L0_out.b_Fault = 16#28 THEN L0_out.str_Fault:='Motor stator resistance fluctuating between phases'; END_IF IF L0_out.b_Fault = 16#29 THEN L0_out.str_Fault:='The motors stator resistance is too high'; END_IF IF L0_out.b_Fault = 16#2B THEN L0_out.str_Fault:='Motor inductance too low'; END_IF IF L0_out.b_Fault = 16#C2 THEN L0_out.str_Fault:='Motor inductance too high'; END_IF IF L0_out.b_Fault = 16#2C THEN L0_out.str_Fault:='The motor parameters do not match the motor'; END_IF IF L0_out.b_Fault = 16#32 THEN L0_out.str_Fault:='Fault: Modbus communication loss error'; END_IF IF L0_out.b_Fault = 16#33 THEN L0_out.str_Fault:='Fault: CANopen communication loss error'; END_IF IF L0_out.b_Fault = 16#34 THEN L0_out.str_Fault:='Communications with field bus module disconnected'; END_IF IF L0_out.b_Fault = 16#35 THEN L0_out.str_Fault:='Loss of I/O card communications'; END_IF IF L0_out.b_Fault = 16#3C THEN L0_out.str_Fault:='Connection to add-on card lost'; END_IF IF L0_out.b_Fault = 16#3D THEN L0_out.str_Fault:='Add-on card in unknown state'; END_IF IF L0_out.b_Fault = 16#46 THEN L0_out.str_Fault:='Unsupported PLC function'; END_IF IF L0_out.b_Fault = 16#47 THEN L0_out.str_Fault:='PLC program too big'; END_IF IF L0_out.b_Fault = 16#48 THEN L0_out.str_Fault:='Division by 0'; END_IF IF L0_out.b_Fault = 16#49 THEN L0_out.str_Fault:='Lower limit is higher than upper limit'; END_IF END_IF E,Ea L0_Modbus9QSModbusCommunication( x_Ready := L0_in.x_Ready, usi_NodeId:= L0_in.usi_NodeId, usi_MODfc:= usi_Functioncode, ui_DatOff:= ui_Datoff, ui_DatNr:= ui_DatNr, x_Start:= x_Start, usi_ComPort := L0_in.usi_ComPort, ui_Baudrate:= L0_in.ui_Baudrate, usi_Parity:= L0_in.usi_Parity, usi_Stopbits:= L0_in.usi_Stopbits, t_Timeout:= L0_in.t_Timeout, war_Register:=war_Register , usi_FailCode=>L0_out.usi_FailCode , x_ComPortActive=> L0_out.x_ComPortActive, x_TransActive=>L0_out.x_TransActive , x_TransOk=>L0_out.x_TransOK ); L0_out.w_Statusword:=war_Input[1]; L0_out.b_Fault := b_Error; L0_out.b_Status := b_Status; L0_out.w_FrequencyValue := war_Input[2]; L0_out.w_CurrentValue := war_Input[3]; Word_zu_byte(Eingangs_Word:=war_Input[1] , Ausgangs_Byte_1=>b_Error , Ausgangs_Byte_0=>b_Status ); CASE i_Case OF 1: (*Starten*) IF L0_in.w_Controlword =w_OldControlword THEN i_Case:=3; ELSE ui_Datoff:=1; ui_DatNr:=1; usi_Functioncode:=6; war_Register[1]:=L0_in.w_Controlword; x_Start:=TRUE; i_Case:=2; END_IF; 2: IF L0_out.x_TransOK =TRUE THEN x_Start:=FALSE; w_OldControlword:=L0_in.w_Controlword; i_Case:=3; ELSE i_Case:=1; END_IF; 3: (*Sollwertvorgabe*) ui_Datoff:=2; ui_DatNr:=1; usi_Functioncode:=6; war_Register[1]:=L0_in.w_Setpoint; x_Start:=TRUE; i_Case:=4; 4: IF L0_out.x_TransOK =TRUE THEN x_Start:=FALSE; i_Case:=5; w_OldSetpoint:= L0_in.w_Setpoint; ELSE i_Case:=3; END_IF; 5: (*Auslesen Status-Prozessdaten*) ui_Datoff:=6; (*Prozessdaten ID 6*) ui_DatNr:=3; (*bis ID8 werden ausgelesen*) usi_Functioncode:=3; x_Start:=TRUE; i_Case:=6; 6: IF L0_out.x_TransOK =TRUE THEN FOR i_Counter:=1 TO 3 DO war_Input[i_Counter] := war_Register[i_Counter]; END_FOR i_Case:=7; x_Start:=FALSE; END_IF; 7: (*Einen Parameter ndern*) IF L0_in.x_HoldWriteOneParameter OR L0_in.x_HoldWriteTwoParameter THEN IF L0_out.w_Statusword.1 AND x_NotWritable THEN i_Case := 9; L0_in.x_HoldWriteOneParameter := FALSE; ELSE ui_Datoff:=L0_in.ui_ParaIndex1; ui_DatNr:=1; usi_Functioncode:=6; war_Register[1]:=L0_in.w_ParaValue1; x_Start:=TRUE; L0_out.x_TransPara_Active := TRUE; L0_out.x_TransPara_Done := FALSE; i_Case:=8; END_IF ELSE i_Case:=9; END_IF; 8: IF L0_out.x_TransOK =TRUE THEN x_Start:=FALSE; L0_out.x_TransPara_Active := FALSE; L0_out.x_TransPara_Done := TRUE; i_Case:=9; L0_in.x_HoldWriteOneParameter := FALSE; ELSE i_Case:=7; END_IF; 9: IF L0_in.x_HoldWriteTwoParameter THEN IF L0_out.w_Statusword.1 AND x_NotWritable THEN i_Case := 11; L0_in.x_HoldWriteTwoParameter := FALSE; ELSE ui_DatOff := L0_in.ui_ParaIndex2; ui_DatNr:=1; usi_Functioncode := 6; war_Register[1] := L0_in.w_ParaValue2; x_Start := TRUE; L0_out.x_TransPara_Active := TRUE; L0_out.x_TransPara_Done := FALSE; i_Case := 10; END_IF ELSE i_Case := 11; END_IF 10: IF L0_out.x_TransOk = TRUE THEN x_Start := FALSE; L0_out.x_TransPara_Active := FALSE; L0_out.x_TransPara_Done := TRUE; L0_in.x_HoldWriteTwoParameter := FALSE; i_Case := 11; ELSE i_Case := 9; END_IF; 11: (*Parameter Lesen*) IF L0_in.x_HoldReadOneParameter OR L0_in.x_HoldReadTwoParameter THEN ui_Datoff:= L0_in.ui_ParaIndex1; ui_DatNr:=1; usi_Functioncode:=3; x_Start:=TRUE; L0_out.x_TransPara_Active := TRUE; L0_out.x_TransPara_Done := FALSE; i_Case:=12; ELSE i_Case:=13; END_IF; 12: IF L0_out.x_TransOK =TRUE THEN x_Start:=FALSE; L0_out.x_TransPara_Active := FALSE; L0_out.x_TransPara_Done := TRUE; i_Case:=13; L0_out.r_ParaValue1 := war_Register[1]; aT_Parameter[Hand_L2_in.ui_ParaIndex1].Wert := L0_out.r_ParaValue1; L0_in.x_HoldReadOneParameter := FALSE; ELSE i_Case:=11; END_IF; 13: IF L0_in.x_HoldReadTwoParameter THEN ui_DatOff := L0_in.ui_ParaIndex2; ui_DatNr:=1; usi_Functioncode := 3; x_Start := TRUE; L0_out.x_TransPara_Active := TRUE; L0_out.x_TransPara_Done := FALSE; i_Case := 14; ELSE i_Case := 15; END_IF 14: IF L0_out.x_TransOk = TRUE THEN x_Start := FALSE; L0_out.x_TransPara_Active := FALSE; L0_out.x_TransPara_Done := TRUE; L0_out.r_ParaValue2 := war_Register[1]; aT_Parameter[Hand_L2_in.ui_ParaIndex2].Wert := L0_out.r_ParaValue2; L0_in.x_HoldReadTwoParameter := FALSE; i_Case := 1; ELSE i_Case := 13; END_IF; ELSE i_Case:=1; END_CASE; >,ZL2_ParameterOutput_EN9QJaT_Parameter[1].Wert; aT_Parameter[1].Name:= 'Maximum frequency'; aT_Parameter[2].Wert; aT_Parameter[2].Name:= 'Minimum frequency'; aT_Parameter[3].Wert; aT_Parameter[3].Name:= 'Acceleration time_acc1'; aT_Parameter[4].Wert; aT_Parameter[4].Name:= 'Deceleration time_dec1'; aT_Parameter[5].Wert; aT_Parameter[5].Name:= 'Stop Function'; aT_Parameter[6].Wert; aT_Parameter[6].Name:= 'Energy optimization'; aT_Parameter[7].Wert; aT_Parameter[7].Name:= 'Nominal voltage of the motor'; aT_Parameter[8].Wert; aT_Parameter[8].Name:= 'Rated motor Current'; aT_Parameter[9].Wert; aT_Parameter[9].Name:= 'Nominal frequency of the motor'; aT_Parameter[10].Wert; aT_Parameter[10].Name:= 'Nominal speed of the motor'; aT_Parameter[11].Wert; aT_Parameter[11].Name:= 'Output voltage at zero frequency'; aT_Parameter[12].Wert; aT_Parameter[12].Name:= 'Control level'; aT_Parameter[13].Wert; aT_Parameter[13].Name:= 'Digital Input'; aT_Parameter[14].Wert; aT_Parameter[14].Name:= 'Parameter range access code'; aT_Parameter[15].Wert; aT_Parameter[15].Name:= 'Fixed frequency FF1'; aT_Parameter[16].Wert; aT_Parameter[16].Name:= 'Fixed frequency FF2'; aT_Parameter[17].Wert; aT_Parameter[17].Name:= 'Fixed frequency FF3'; aT_Parameter[18].Wert; aT_Parameter[18].Name:= 'Fixed frequency FF4'; aT_Parameter[19].Wert; aT_Parameter[19].Name:= 'Fixed frequency FF5'; aT_Parameter[20].Wert; aT_Parameter[20].Name:= 'Fixed frequency FF6'; aT_Parameter[21].Wert; aT_Parameter[21].Name:= 'Fixed frequency FF7'; aT_Parameter[22].Wert; aT_Parameter[22].Name:= 'Fixed frequency FF8'; aT_Parameter[23].Wert; aT_Parameter[23].Name:= 'Frequency skip 1, bandwidth'; aT_Parameter[24].Wert; aT_Parameter[24].Name:= 'Frequency skip 1, center'; aT_Parameter[25].Wert; aT_Parameter[25].Name:= 'AO1 signal'; aT_Parameter[26].Wert; aT_Parameter[26].Name:= 'AO1 signal range'; aT_Parameter[27].Wert; aT_Parameter[27].Name:= 'AO2 signal'; aT_Parameter[28].Wert; aT_Parameter[28].Name:= 'AO2 signal range'; aT_Parameter[29].Wert; aT_Parameter[29].Name:= 'K1 signal'; aT_Parameter[30].Wert; aT_Parameter[30].Name:= 'AO1 / K1 upper limit'; aT_Parameter[31].Wert; aT_Parameter[31].Name:= 'AO1 / K1 lower limit'; aT_Parameter[32].Wert; aT_Parameter[32].Name:= 'K2 signal'; aT_Parameter[33].Wert; aT_Parameter[33].Name:= 'AO2 / K2 upper limit'; aT_Parameter[34].Wert; aT_Parameter[34].Name:= 'AO1 / K1 lower limit'; aT_Parameter[35].Wert; aT_Parameter[35].Name:= 'Scaling factor for value'; aT_Parameter[36].Wert; aT_Parameter[36].Name:= 'scaled display value'; aT_Parameter[37].Wert; aT_Parameter[37].Name:= 'Holding time for speed of 0'; aT_Parameter[38].Wert; aT_Parameter[38].Name:= 'Clock frequency'; aT_Parameter[39].Wert; aT_Parameter[39].Name:= 'Quicks stop deceleration ramp time (dec2)'; aT_Parameter[40].Wert; aT_Parameter[40].Name:= 'Flying restart circuit'; aT_Parameter[41].Wert; aT_Parameter[41].Name:= 'Delay time in Standby mode'; aT_Parameter[42].Wert; aT_Parameter[42].Name:= 'Slave speed scaling'; aT_Parameter[43].Wert; aT_Parameter[43].Name:= 'Slave speed scaling factor'; aT_Parameter[44].Wert; aT_Parameter[44].Name:= 'AI1 signal range'; aT_Parameter[45].Wert; aT_Parameter[45].Name:= 'AI1 scaling factor'; aT_Parameter[46].Wert; aT_Parameter[46].Name:= 'Analog input 1 Offset'; aT_Parameter[47].Wert; aT_Parameter[47].Name:= 'AI2 signal range'; aT_Parameter[48].Wert; aT_Parameter[48].Name:= 'AI2 scaling factor'; aT_Parameter[49].Wert; aT_Parameter[49].Name:= 'Analog input 2 Offset'; aT_Parameter[50].Wert; aT_Parameter[50].Name:= 'READ, Start function with automatic restart'; aT_Parameter[51].Wert; aT_Parameter[51].Name:= 'REAF, Start function with automatic restart, operating unit'; aT_Parameter[52].Wert; aT_Parameter[52].Name:= 'Response in the event of a power failure'; aT_Parameter[53].Wert; aT_Parameter[53].Name:= 'Parameter access lock'; aT_Parameter[54].Wert; aT_Parameter[54].Name:= 'Access codes - menu level 2'; aT_Parameter[55].Wert; aT_Parameter[55].Name:= 'PID controller proportional gain'; aT_Parameter[56].Wert; aT_Parameter[56].Name:= 'PID controller, integral time constant'; aT_Parameter[57].Wert; aT_Parameter[57].Name:= 'PID controller, D rate time'; aT_Parameter[58].Wert; aT_Parameter[58].Name:= 'PID controller, control deviation'; aT_Parameter[59].Wert; aT_Parameter[59].Name:= 'PID controller, setpoint source'; aT_Parameter[60].Wert; aT_Parameter[60].Name:= 'PID controller, digital reference value'; aT_Parameter[61].Wert; aT_Parameter[61].Name:= 'PID controller, actual value limiting, maximum'; aT_Parameter[62].Wert; aT_Parameter[62].Name:= 'PID controller, actual value limiting, minimum'; aT_Parameter[63].Wert; aT_Parameter[63].Name:= 'PID controller, actual value limiting, selections'; aT_Parameter[64].Wert; aT_Parameter[64].Name:= 'PID controller, actual value feedback signal'; aT_Parameter[65].Wert; aT_Parameter[65].Name:= 'Maximum PID error for enabling the ramps'; aT_Parameter[66].Wert; aT_Parameter[66].Name:= 'PID feedback display scaling factor'; aT_Parameter[67].Wert; aT_Parameter[67].Name:= 'PID feedback wake up level'; aT_Parameter[68].Wert; aT_Parameter[68].Name:= 'PID reset control'; aT_Parameter[69].Wert; aT_Parameter[69].Name:= 'Motor control mode selection'; aT_Parameter[70].Wert; aT_Parameter[70].Name:= 'Auto-tune motor parameter'; aT_Parameter[71].Wert; aT_Parameter[71].Name:= 'Rotational speed controller P gain'; aT_Parameter[72].Wert; aT_Parameter[72].Name:= 'Rotational speed controller integral time'; aT_Parameter[73].Wert; aT_Parameter[73].Name:= 'Motor power factor'; aT_Parameter[74].Wert; aT_Parameter[74].Name:= 'Torque setpoint / limit'; aT_Parameter[75].Wert; aT_Parameter[75].Name:= 'Maximum torque (motor)'; aT_Parameter[76].Wert; aT_Parameter[76].Name:= 'Minimum torque (motor)'; aT_Parameter[77].Wert; aT_Parameter[77].Name:= 'Maximum torque (generator)'; aT_Parameter[78].Wert; aT_Parameter[78].Name:= 'V/Hz characteristic curve modification voltage'; aT_Parameter[79].Wert; aT_Parameter[79].Name:= 'V/Hz characteristic curve modification frequency'; aT_Parameter[80].Wert; aT_Parameter[80].Name:= 'reserved'; aT_Parameter[81].Wert; aT_Parameter[81].Name:= 'Variable frequency drive slave address'; aT_Parameter[82].Wert; aT_Parameter[82].Name:= 'Canopen baudrate'; aT_Parameter[83].Wert; aT_Parameter[83].Name:= 'Modbus RTU Baud rate'; aT_Parameter[84].Wert; aT_Parameter[84].Name:= 'Modbus RTU data format - Parity type'; aT_Parameter[85].Wert; aT_Parameter[85].Name:= 'Timeout - Communications dropout'; aT_Parameter[86].Wert; aT_Parameter[86].Name:= 'Response in the event of a communications dropout'; aT_Parameter[87].Wert; aT_Parameter[87].Name:= 'Ramp via field bus'; aT_Parameter[88].Wert; aT_Parameter[88].Name:= 'Field bus module PDO-4 output'; aT_Parameter[89].Wert; aT_Parameter[89].Name:= 'reserved'; aT_Parameter[90].Wert; aT_Parameter[90].Name:= 'reserved'; aT_Parameter[91].Wert; aT_Parameter[91].Name:= 'reserved'; aT_Parameter[92].Wert; aT_Parameter[92].Name:= 'Field bus module PDO-3 output'; aT_Parameter[93].Wert; aT_Parameter[93].Name:= 'Field bus module PDI-4 input'; aT_Parameter[94].Wert; aT_Parameter[94].Name:= 'Field bus module PDI-3 input'; aT_Parameter[95].Wert; aT_Parameter[95].Name:= 'Firmware update enable'; aT_Parameter[96].Wert; aT_Parameter[96].Name:= 'Auto temperature management'; aT_Parameter[97].Wert; aT_Parameter[97].Name:= 'Auto reset delay'; aT_Parameter[98].Wert; aT_Parameter[98].Name:= 'Relay hysteresis band'; aT_Parameter[99].Wert; aT_Parameter[99].Name:= 'Enable incremental encoder feedback'; aT_Parameter[100].Wert; aT_Parameter[100].Name:= 'Incremental encoder scale'; aT_Parameter[101].Wert; aT_Parameter[101].Name:= 'Maximum speed error'; aT_Parameter[102].Wert; aT_Parameter[102].Name:= 'Input frequency at maximum speed'; aT_Parameter[103].Wert; aT_Parameter[103].Name:= 'Droop speed'; aT_Parameter[104].Wert; aT_Parameter[104].Name:= 'PLC function enable'; aT_Parameter[105].Wert; aT_Parameter[105].Name:= 'Speed holding time in the event of an enable signal'; aT_Parameter[106].Wert; aT_Parameter[106].Name:= 'Speed holding time in the event of a disable signal'; aT_Parameter[107].Wert; aT_Parameter[107].Name:= 'Motor brake opening time'; aT_Parameter[108].Wert; aT_Parameter[108].Name:= 'Motor brake engagement delay'; aT_Parameter[109].Wert; aT_Parameter[109].Name:= 'Minimum torque for brake opening'; aT_Parameter[110].Wert; aT_Parameter[110].Name:= 'Minimum torque for time limit'; aT_Parameter[111].Wert; aT_Parameter[111].Name:= 'Maximum torque for time limit'; aT_Parameter[112].Wert; aT_Parameter[112].Name:= 'Voltage for DC current braking'; aT_Parameter[113].Wert; aT_Parameter[113].Name:= 'Brake resistor value'; aT_Parameter[114].Wert; aT_Parameter[114].Name:= 'Brake resistor power'; aT_Parameter[115].Wert; aT_Parameter[115].Name:= 'Braking chopper cycle (low temperature)'; aT_Parameter[116].Wert; aT_Parameter[116].Name:= 'Reset fan run-time'; aT_Parameter[117].Wert; aT_Parameter[117].Name:= 'Reset KWh meter'; aT_Parameter[118].Wert; aT_Parameter[118].Name:= 'Service interval'; aT_Parameter[119].Wert; aT_Parameter[119].Name:= 'Reset service interval'; aT_Parameter[120].Wert; aT_Parameter[120].Name:= 'AO1 scaling'; aT_Parameter[121].Wert; aT_Parameter[121].Name:= 'AO1 offset'; aT_Parameter[122].Wert; aT_Parameter[122].Name:= 'Display index P0-P80'; aT_Parameter[123].Wert; aT_Parameter[123].Name:= 'Save parameters as default'; aT_Parameter[124].Wert; aT_Parameter[124].Name:= 'Access code for menu level 3'; aT_Parameter[125].Wert; aT_Parameter[125].Name:= 'Motor stator resistance'; aT_Parameter[126].Wert; aT_Parameter[126].Name:= 'Rotor resistance'; aT_Parameter[127].Wert; aT_Parameter[127].Name:= 'Motor leakage inductance'; aT_Parameter[128].Wert; aT_Parameter[128].Name:= 'Motor magnetizing current'; aT_Parameter[129].Wert; aT_Parameter[129].Name:= 'Motor leakage factor'; aT_Parameter[130].Wert; aT_Parameter[130].Name:= 'Motor leakage inductance'; aT_Parameter[131].Wert; aT_Parameter[131].Name:= 'Advanced generator control'; aT_Parameter[132].Wert; aT_Parameter[132].Name:= 'Enable, motor parameter adaption'; aT_Parameter[133].Wert; aT_Parameter[133].Name:= 'Overvoltage current limit'; aT_Parameter[134].Wert; aT_Parameter[134].Name:= 'Load inertia factor'; aT_Parameter[135].Wert; aT_Parameter[135].Name:= 'Minimum PWM pulse width'; aT_Parameter[136].Wert; aT_Parameter[136].Name:= 'Magnetizing time at the V/f method'; aT_Parameter[137].Wert; aT_Parameter[137].Name:= 'Speed controller differential gain'; aT_Parameter[138].Wert; aT_Parameter[138].Name:= 'Torque boost'; aT_Parameter[139].Wert; aT_Parameter[139].Name:= 'Maximum frequency limit for torque boost'; aT_Parameter[140].Wert; aT_Parameter[140].Name:= 'Enable, signal injection'; aT_Parameter[141].Wert; aT_Parameter[141].Name:= 'Signal injection level'; aT_Parameter[142].Wert; aT_Parameter[142].Name:= 'Second acceleration time (acc2)'; aT_Parameter[143].Wert; aT_Parameter[143].Name:= 'Transition frequency (acc1-acc2)'; aT_Parameter[144].Wert; aT_Parameter[144].Name:= 'Third acceleration time (acc3)'; aT_Parameter[145].Wert; aT_Parameter[145].Name:= 'Transition frequency (acc2-acc3)'; aT_Parameter[146].Wert; aT_Parameter[146].Name:= 'Fourth acceleration time (acc4)'; aT_Parameter[147].Wert; aT_Parameter[147].Name:= 'Transition frequency (acc3-acc4)'; aT_Parameter[148].Wert; aT_Parameter[148].Name:= 'Fourth deceleration time (dec4)'; aT_Parameter[149].Wert; aT_Parameter[149].Name:= 'Transition frequency (acc4-acc2)'; aT_Parameter[150].Wert; aT_Parameter[150].Name:= 'Third deceleration time (dec3)'; aT_Parameter[151].Wert; aT_Parameter[151].Name:= 'Transition frequency (acc3-acc2)'; aT_Parameter[152].Wert; aT_Parameter[152].Name:= 'Second deceleration time (dec2)'; aT_Parameter[153].Wert; aT_Parameter[153].Name:= 'Transition frequency (acc2-acc1)'; aT_Parameter[154].Wert; aT_Parameter[154].Name:= 'Ramp selection when there is a present speed'; aT_Parameter[155].Wert; aT_Parameter[155].Name:= 'Control source- enable'; aT_Parameter[156].Wert; aT_Parameter[156].Name:= 'Control source - quick stop'; aT_Parameter[157].Wert; aT_Parameter[157].Name:= 'Control source - start signal 1 (FWD)'; aT_Parameter[158].Wert; aT_Parameter[158].Name:= 'Control source - start signal 2 (REV)'; aT_Parameter[159].Wert; aT_Parameter[159].Name:= 'Control source - stay-put function'; aT_Parameter[160].Wert; aT_Parameter[160].Name:= 'Control source - enable (REV)'; aT_Parameter[161].Wert; aT_Parameter[161].Name:= 'Control source - reset'; aT_Parameter[162].Wert; aT_Parameter[162].Name:= 'Control source external fault'; aT_Parameter[163].Wert; aT_Parameter[163].Name:= 'Control source terminal mode'; aT_Parameter[164].Wert; aT_Parameter[164].Name:= 'Source - speed 1'; aT_Parameter[165].Wert; aT_Parameter[165].Name:= 'Source - speed 2'; aT_Parameter[166].Wert; aT_Parameter[166].Name:= 'Source - speed 3'; aT_Parameter[167].Wert; aT_Parameter[167].Name:= 'Source - speed 4'; aT_Parameter[168].Wert; aT_Parameter[168].Name:= 'Source - speed 5'; aT_Parameter[169].Wert; aT_Parameter[169].Name:= 'Source - speed 6'; aT_Parameter[170].Wert; aT_Parameter[170].Name:= 'Source - speed 7'; aT_Parameter[171].Wert; aT_Parameter[171].Name:= 'Source - speed 8'; aT_Parameter[172].Wert; aT_Parameter[172].Name:= 'Speed - input 0'; aT_Parameter[173].Wert; aT_Parameter[173].Name:= 'Speed - input 1'; aT_Parameter[174].Wert; aT_Parameter[174].Name:= 'Speed - input 2'; aT_Parameter[175].Wert; aT_Parameter[175].Name:= 'Fixed frequency 0'; aT_Parameter[176].Wert; aT_Parameter[176].Name:= 'Fixed frequency 1'; aT_Parameter[177].Wert; aT_Parameter[177].Name:= 'Fixed frequency 2'; aT_Parameter[178].Wert; aT_Parameter[178].Name:= 'Acceleration ramp input 0'; aT_Parameter[179].Wert; aT_Parameter[179].Name:= 'Acceleration ramp input 1'; aT_Parameter[180].Wert; aT_Parameter[180].Name:= 'Deceleration ramp input 0'; aT_Parameter[181].Wert; aT_Parameter[181].Name:= 'Deceleration ramp input 1'; aT_Parameter[182].Wert; aT_Parameter[182].Name:= 'Control source - Up-pushbutton'; aT_Parameter[183].Wert; aT_Parameter[183].Name:= 'Control source - Down-pushbutton'; aT_Parameter[184].Wert; aT_Parameter[184].Name:= 'FWD limit switch'; aT_Parameter[185].Wert; aT_Parameter[185].Name:= 'REV limit switch'; aT_Parameter[186].Wert; aT_Parameter[186].Name:= 'reserved'; aT_Parameter[187].Wert; aT_Parameter[187].Name:= 'Control source - analog output 1'; aT_Parameter[188].Wert; aT_Parameter[188].Name:= 'Control source - analog output 1'; aT_Parameter[189].Wert; aT_Parameter[189].Name:= 'Control source - Relay 1'; aT_Parameter[190].Wert; aT_Parameter[190].Name:= 'Control source - Relay 2'; aT_Parameter[191].Wert; aT_Parameter[191].Name:= 'Control source - scaling'; aT_Parameter[192].Wert; aT_Parameter[192].Name:= 'Source - PID setpoint value'; aT_Parameter[193].Wert; aT_Parameter[193].Name:= 'Source - PID feedback'; aT_Parameter[194].Wert; aT_Parameter[194].Name:= 'Source torque control reference'; aT_Parameter[195].Wert; aT_Parameter[195].Name:= 'Function choices - Relay output 3,4,5'; IF Hand_L2_in.ui_ParaIndex1 <= 100 THEN ; END_IF (*Tabellenausgabe*) IF Hand_L2_in.ui_ParaIndex1 > 100 AND Hand_L2_in.ui_ParaIndex1 <200 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 100)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 100 AND Hand_L2_in.ui_ParaIndex2 <200 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 100)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 200 AND Hand_L2_in.ui_ParaIndex1 <300 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 186)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 200 AND Hand_L2_in.ui_ParaIndex1 <300 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 186)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 300 AND Hand_L2_in.ui_ParaIndex1 <400 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 246)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 300 AND Hand_L2_in.ui_ParaIndex1 <400 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 246)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 400 AND Hand_L2_in.ui_ParaIndex1 <500 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 332)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 400 AND Hand_L2_in.ui_ParaIndex1 <500 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 332)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 500 AND Hand_L2_in.ui_ParaIndex1 <600 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 420)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 500 AND Hand_L2_in.ui_ParaIndex1 <600 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 420)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 600 AND Hand_L2_in.ui_ParaIndex1 <700 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 506)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 600 AND Hand_L2_in.ui_ParaIndex1 <700 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 506)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 700 AND Hand_L2_in.ui_ParaIndex1 <800 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 576)].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 700 AND Hand_L2_in.ui_ParaIndex1 <800 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 576)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 800 AND Hand_L2_in.ui_ParaIndex1 <900 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 659 )].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 800 AND Hand_L2_in.ui_ParaIndex1 <900 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 659)].Name; END_IF IF Hand_L2_in.ui_ParaIndex1 > 900 AND Hand_L2_in.ui_ParaIndex1 <942 THEN aT_Tabelle[1].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex1 - 746 )].Name; END_IF IF Hand_L2_in.ui_ParaIndex2 > 900 AND Hand_L2_in.ui_ParaIndex1 <942 THEN aT_Tabelle[2].Name := aT_Parameter[(Hand_L2_in.ui_ParaIndex2 - 746)].Name; END_IF IF L0_in.x_HoldReadOneParameter OR L0_in.x_HoldReadTwoParameter THEN aT_Tabelle[1].Wert := aT_Parameter[Hand_L2_in.ui_ParaIndex1].Wert; aT_Tabelle[2].Wert := aT_Parameter[Hand_L2_in.ui_ParaIndex2].Wert; END_IF L0_in.w_ParaValue1:=REAL_TO_WORD(aT_Tabelle[1].Wert); L0_in.w_ParaValue2:=REAL_TO_WORD(aT_Tabelle[2].Wert); G,27ModbusCommunication9Q 9QFUNCTION_BLOCK ModbusCommunication VAR_INPUT usi_NodeId: USINT; (*NodeID of the slaves*) usi_MODfc: USINT; (*FunctionCode 3 or 6*) ui_DatOff: UINT; (*Data Offset, ParameterIndex*) ui_DatNr: UINT; (*Length of the telegramm*) x_Start: BOOL; (*Start Reading or Writing Holding Register*) ui_Baudrate: UINT; usi_ComPort: USINT; usi_Parity: USINT; usi_Stopbits: USINT; t_Timeout: TIME; x_Ready : BOOL; END_VAR VAR_OUTPUT usi_FailCode: USINT; (*FailCode*) x_ComPortActive: BOOL; (*Communication Active*) x_TransActive: BOOL; (*Transmission Active*) x_TransOk: BOOL; (*Transmission Donne without Failure*) END_VAR VAR usi_MODslaveAdrDone: USINT; usi_MODfcDone: USINT; ui_MODdatOffDone: UINT; ui_MODdatNrDone: UINT; xar_MODCoil: ARRAY [1..1200] OF BOOL; ModbusMaster : ModbusMaster; END_VAR VAR_IN_OUT war_Register: ARRAY [1..120] OF WORD; (*VAR_IN_OUT Register*) END_VARModbusMaster( xEnable:= x_Ready, usiComPort:= usi_ComPort, uiBaudrate:= ui_Baudrate, usiParity:= usi_Parity, usiStopbits:= usi_Stopbits, usiMODSlaveAdr:= usi_NodeId, usiMODfc:= usi_MODfc, uiMODdatOff:= ui_DatOff, uiMODdatNr:= ui_DatNr, tMODtimeOut:= t_Timeout, xMODfcStrobe:= x_Start, warMODRegister:= war_Register, xarMODCoil:= xar_MODCoil, xComPortActiv=> x_ComPortActive , xMODtransActive=> x_TransActive, xMODtransOk=> x_TransOk, usiMODslaveAdrDone=> usi_MODslaveAdrDone, usiMODfcDone=> usi_MODfcDone, uiMODdatOffDone=> ui_MODdatOffDone, uiMODdatNrDone=> ui_MODdatNrDone, usiMODfailCode=> usi_FailCode );),/:"APLC_PRG9Q 9QpPROGRAM PLC_PRG VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR Modbus : Modbus_cyclic_acyclic; END_VAREModbus(Hand_L2_in:= , Auto_L2_in:= , Auto_L1_in:= , L2_out=> ); R,X# WORD_ZU_BYTE9Q 9QFUNCTION_BLOCK WORD_ZU_BYTE VAR_INPUT Eingangs_Word:WORD; END_VAR VAR_OUTPUT Ausgangs_Byte_0:BYTE; Ausgangs_Byte_1:BYTE; END_VAR VAR M_Byte_0:WORD; M_Byte_1:WORD; END_VARM_Byte_0:=SHR(Eingangs_word,0); M_Byte_1:=SHR(Eingangs_word,8); Ausgangs_Byte_0:=WORD_TO_BYTE(M_Byte_0); Ausgangs_Byte_1:=WORD_TO_BYTE(M_Byte_1);  @, Drive_Operating9Q @9Q>K# @!F"@@ @EYPO`@@ @E!YO`@@ @E`@@ @Y={@@ @ #$CM_VISU_Operating$.r_Hand_Setpointset point: %3.1f Hz@@ @0.1.$$CM_VISU_Operating$.r_Current_actualCurrent: %3.1f A@ @ @xK3)$CM_VISU_Operating$.L2_out.x_ErrorMessage!$CM_VISU_Operating$.str_Fault_Err Fault: %s@ @ @=)W!$CM_VISU_Operating$.x_Drive_Ready Ready@ @ @0.1.$CM_VISU_Operating$.r_actualSpeed: %3.1f Hz@ @ @ F/ .str_name CM_FU: %s@@ @ /%t%c@@ @ PNg@HAND@@Arial$CM_VISU_Operating$.x_Hand_On@ @ N@START@@Arial $CM_VISU_Operating$.x_Hand_Start@ @ N@STOPP@@Arial8$CM_VISU_Operating$.Hand_L2_in.x_Hand_Stopp_FreeCoasting@ @ -N@#Anticlockwise@@ Arial#$CM_VISU_Operating$.x_Anticlockwise@ @ 7fNN@Fast stop@@!Arial*$CM_VISU_Operating$.Hand_L2_in.x_Faststopp@ @ qN@"Setpoint = 0@@"Arial2$CM_VISU_Operating$.Hand_L2_in.x_Hand_SetpointZero@ @Pg@AUTO@@#Arial($CM_VISU_Operating$.Auto_L2_in.x_Auto_On@ @@START@@$Arial+$CM_VISU_Operating$.Auto_L2_in.x_Auto_Start@ @@STOPP@@%Arial+$CM_VISU_Operating$.Auto_L2_in.x_Auto_Stopp@ @H)W"$CM_VISU_Operating$.x_Start_ActiveRun@(@ @x).W-$CM_VISU_Operating$.L2_out.x_Hand_StoppActiveDrive stopped@)@ @3=cJW*$CM_VISU_Operating$.x_Anticlockwise_ActiveAnticlockwise@*@ @H3cJW.$CM_VISU_Operating$.L2_out.x_Hand_SetpointZeroset point = 0@+@ @3xc.JW+$CM_VISU_Operating$.L2_out.x_FixedFrequencyFF1@,@ @@ Parameters@@-Arial@$TO_Parameters$ @E0@Main menu@@.Arial@ $TO_MainMenu$ @ O@&Festfrequenz FF1@@0Arial/$CM_VISU_Operating$.Hand_L2_in.x_FixedFrequency@ @KQ3@!Fault Reset@@1Arial$$CM_VISU_Operating$.x_Error_Quitt_QT@163 @N@r`$$CM_VISU_Para$.Hand_L2_in.usi_NodeIDNodeId: %s@2@ @PNr`%$CM_VISU_Para$.Hand_L2_in.usi_ComPortCOM-Port: %s@9@ @Nlr(`%$CM_VISU_Para$.Hand_L2_in.ui_BaudrateBaudrate: %s@:@163 @@$$CM_VISU_Para$.Hand_L2_in.usi_ParityParity: %s@;@163 @P&$CM_VISU_Para$.Hand_L2_in.usi_StopbitsStoppbits: %s@<@CM_VISU_Operating  TO_Parameters TO_MainMenu CM_VISU_Para !"}} A,"MainMenu9Q @9QK @!F"@@ @E!`@@ @!Y@@ @ /%t%c@@ @k@%Drive Operating@@Arial@$TO_DriveOperating$ @)@ Parameters@@Arial@$TO_Parameters$ @ F/ .str_name CM_FU: %s@@ @Vwo@TO_DriveOperating TO_Parameters}} F,#-Menu9Q @Ƞ3b9Qd @!Y,MainMenu@TO_DriveOperating TO_Parameters Operating Parameter}} I,H Operating9Q @9u,+9Qd @!Y,Drive_Operating@CM_VISU_Operating TO_Parameters TO_MainMenu CM_VISU_ParaPLC_PRG.Modbus ParameterMenuPLC_PRG.Modbus}} J,. Parameter9Q @Cm9Qd @!W+ReadWriteParameter@ CM_VISU_ParaTO_DriveOperating TO_MainMenuPLC_PRG.Modbus OperatingMenu}} C,SmlReadWriteParameter9Q @9QK! @!F"@@ @EYNN`@@ @E!YO`@@ @Ey`@@ @Y={@@ @wM5+$CM_VISU_Para$.L2_out.x_ErrorMessage_Modbus&$CM_VISU_Para$.L2_out.str_Fault_Modbus %s@@ @ F/ .str_name CM_FU: %s@@163 @P:tb$$CM_VISU_Para$.Hand_L2_in.usi_NodeIDNodeId: %s@@ @N@(Read one Parameter@@Arial,$CM_VISU_Para$.Hand_L2_in.x_ReadOneParameter@ @O@)Read two Parameters@@ Arial,$CM_VISU_Para$.Hand_L2_in.x_ReadTwoParameter@ @@)Write one Parameter@@#Arial-$CM_VISU_Para$.Hand_L2_in.x_WriteOneParameter@ @@*Write two Parameters@@$Arial-$CM_VISU_Para$.Hand_L2_in.x_WriteTwoParameter@ @ /%t%c@&@ @TPm ($CM_VISU_Para$.L2_out.x_TransPara_ActiveBUSY@,Arial@ @T mTX&$CM_VISU_Para$.L2_out.x_TransPara_Done READY@-Arial@ Parameter @@%Drive Operating@@.Arial@$TO_DriveOperating$ @E0@Main menu@@/Arial@ $TO_MainMenu$ @Q,$CM_VISU_Para$.L2_out.x_Communication_ActiveConnection@0Arial@ @hw!$CM_VISU_Para$.aT_Tabelle[2].Name%s@Y@ @hwIw!$CM_VISU_Para$.aT_Tabelle[2].Wert%s@i@1941 @hw'$CM_VISU_Para$.Hand_L2_in.ui_ParaIndex2%s@m@1941 @JiY'$CM_VISU_Para$.Hand_L2_in.ui_ParaIndex1%s@{@ @JiY!$CM_VISU_Para$.aT_Tabelle[1].Name%s@|@ @JwiIY!$CM_VISU_Para$.aT_Tabelle[1].Wert%s@}@ @,K; Index@~ Arial Black@ @,K; Parameter@ Arial Black@ @,wKI; Value@ Arial Black@ @JPtb%$CM_VISU_Para$.Hand_L2_in.usi_ComPortCOM-Port: %s@@ @Pft"b%$CM_VISU_Para$.Hand_L2_in.ui_BaudrateBaudrate: %s@@163 @:$$CM_VISU_Para$.Hand_L2_in.usi_ParityParity: %s@@163 @J&$CM_VISU_Para$.Hand_L2_in.usi_StopbitsStoppbits: %s@@ @GN2@!Fault quitt@@Arial,$CM_VISU_Para$.Hand_L2_in.x_ModbusFaultQuitt@ @f"#$CM_VISU_Para$.Hand_L2_in.t_TimeoutTimeout: %s@@ CM_VISU_Para  TO_DriveOperating TO_MainMenu}},BW ylC:\Programme\Gemeinsame Dateien\CAA-Targets\Moeller V2.3.9\Lib_CPU201\xSysCom200.lib 11.12.03 14:40:40@s?RE:\Praxissemester\New Folder\An27k24\XC200\ModbusMaster.lib 17.5.05 15:55:50@B"Standard.lib 7.6.02 09:26:00@n=nC:\Programme\Gemeinsame Dateien\CAA-Targets\Moeller V2.3.9\Lib_CPU201\SysLibCallback.lib 9.7.02 16:14:54@*=xSysComClose@ COMBAUDRATE COMCONTROL COMDATALEN COMPARITYCOMPORTS COMSETTINGS COMSTOPBITSxSysComGetVersion1000@xSysComOpen@xSysComRead@xSysComReadControl@xSysComSetSettings@xSysComWrite@xSysComWriteControl@ModbusMaster@ModbusMaster_CoilMax@ModbusMaster_CRC16@ModbusMaster_EventStop@Global_Variables@CONCAT@ CTD@ CTU@ CTUD@ DELETE@ F_TRIG@ FIND@ INSERT@ LEFT@ LEN@ MID@ R_TRIG@ REPLACE@ RIGHT@RS@ RTC@ SEMA@SR@ TOF@ TON@TP@Global Variables 0@bSysCallbackRegister@ RTS_EVENTRTS_EVENT_FILTERRTS_EVENT_SOURCESysCallbackUnregister@Globale_Variablen@ Version@ BausteineCyclic_AcyclicInternalModbusCommunicationG WORD_ZU_BYTERModbus_cyclic_acyclicL0_FaultMessage_END L0_ModbusEL2_ParameterOutput_EN>HPLC_PRG) DatentypenCM_cyclic_acyclicinCM_DC_AUTO_L1_inSCM_DC_AUTO_L2_inTCM_DC_Hand_L2_inV CM_DC_L0_inYoutCM_DC_HANDAUTO_L2_outX CM_DC_L0_outZParameterStrukturBGlobale VariablenGlobale_VariablenVisualisierungen 01TemplateDrive_Operating@MainMenuAReadWriteParameterCMenuF OperatingI ParameterJC9Q2