http://www.w3.org/1999/xhtml"}]">三、FB块封装
#读取返回值 := DPRD_DAT (LADDR := #硬件标识符,RECORD => #S_InData);
IF #读取返回值 <>0 THEN
FOR #T_Index_i:=1 TO 12 DO #S_InData[#T_Index_i]:=0; END_FOR;
END_IF;
#S_Status_word := ROL(IN:=#S_InData_word[1] ,N:=8);
#准备就绪 := #S_Status_word_bits.Bit_00;//Drive_ready
#操作已使能 := #S_Status_word_bits.Bit_02 ;//Motor follows setpoint
#显示故障 := #S_Status_word_bits.Bit_03 ;//SINAMICS shows a fault/error
#QX_Closing_lockout_active := #S_Status_word_bits.Bit_06 ;//Switch on is inhibit, ON_OFF1 must be set to 0
#显示报警 := #S_Status_word_bits.Bit_07 ;//SINAMICS shows a alarm/warning
#QX_Rotating_forward := #S_Status_word_bits.Bit_14 ;//Internal inverter actual value > 0
#实际转速 := #速度参考值 * ( INT_TO_REAL( WORD_TO_INT(#S_InData_word[2])) / 16384.0 );
#实际电流 := #电流参考值 * ( INT_TO_REAL( WORD_TO_INT(#S_InData_word[3])) / 16384.0 );
#实际扭矩 := #扭矩参考值 * ( INT_TO_REAL( WORD_TO_INT(#S_InData_word[4])) / 16384.0 );
#实际报警 := #S_InData_word[5] ;
#实际故障 := #S_InData_word[6] ;
IF #激活手动模式 = FALSE THEN // normal mode
//COPY INPUT BITS
#S_Control_word_bits.Bit_00 := #ON_OFF1; //Bit 1: 0 to 1=RUN
#S_Control_word_bits.Bit_01 := #OFF2; //Bit 2: 0=immediately STOP
#S_Control_word_bits.Bit_02 := #OFF3; //Bit 3: 0=quick STOP
#S_Control_word_bits.Bit_03 := TRUE; //Bit 3: 0=cancel pulses
#S_Control_word_bits.Bit_04 := TRUE; //Bit 4: 0=RFG is set to 0; 1=RFG follows setpoint
#S_Control_word_bits.Bit_05 := TRUE; //Bit 5: 0=freeze RFG, 1= 1=RFG follows setpoint
#S_Control_word_bits.Bit_06 := TRUE; //Bit 6: 0=setpoint is 0; 1=setpoint enabled
#S_Control_word_bits.Bit_07 := #故障确认; //Bit 7: 0 to 1 = fault acknowledge
#S_Control_word_bits.Bit_08 := FALSE; //Bit 8: not used
#S_Control_word_bits.Bit_09 := FALSE; //Bit 9: not used
#S_Control_word_bits.Bit_10 := TRUE; //Bit10: 1= PLC controls the drive
#S_Control_word_bits.Bit_11 := #方向反转; //Bit11: 1= reverse turning direction
#S_Control_word_bits.Bit_12 := FALSE; //Bit12: not used
#S_Control_word_bits.Bit_13 := FALSE; //Bit13: increase setpoint in motorized Potentiometer
#S_Control_word_bits.Bit_14 := FALSE; //Bit14: decrease setpoint in motorized Potentiometer
#S_Control_word_bits.Bit_15 := FALSE; //Bit15: not used
#S_OutData_word[1] := ROL(IN:=#S_Control_word ,N:=8);
IF #给定值模式选择 THEN
#S_OutData_word[2] := INT_TO_WORD(REAL_TO_INT(#转速设定值 / #速度参考值 * 16384.0));
ELSE
#S_OutData_word[2] := INT_TO_WORD(DINT_TO_INT(#速度设定值));
END_IF;
ELSE //manual mode
#S_OutData_word[1] := ROL(IN:=#手动模式控制字 ,N:=8);
IF #给定值模式选择 THEN
#S_OutData_word[2] := INT_TO_WORD(REAL_TO_INT(#转速设定值 / #速度参考值 * 16384.0));
ELSE
#S_OutData_word[2] := INT_TO_WORD(DINT_TO_INT(#速度设定值));
END_IF;
END_IF;
#S_OutData_word[3]:= INT_TO_WORD (0);
#S_OutData_word[4]:= INT_TO_WORD (0);
#S_OutData_word[5]:= INT_TO_WORD (0);
#S_OutData_word[6]:= INT_TO_WORD (0);
#写入返回值 := DPWR_DAT(LADDR := #硬件标识符,RECORD := #S_OutData );
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!