# Property of PMA Electrical Solutions, LLC. # # Danfoss VLT Midi Drive FC 280 (0.37-22 kW). Claims the FC 280 only — the # manuals below cover no sibling model. # # Sources (printed page numbers, not PDF page index): # MG07C402 VLT Midi Drive FC 280 Programming Guide, 02/2019 # pp. 78-83 parameters 8-0*/8-3*/8-5* and their defaults # pp. 113 data types and the conversion-index table # pp. 129-132 parameter list — the per-parameter WIDTH and # conversion index used by every point below # pp. 139-140 Table 6.3, alarm/warning/ext-status word bit layout # MG07B302 VLT Midi Drive FC 280 Design Guide, 05/2017 # pp. 54-55 RS485 setup, FC and Modbus parameter settings # pp. 61-63 coil/register addressing, address table, the # "10 x parameter number" rule and worked examples # pp. 67-70 FC control profile: control word, status word, # bus reference scaling # # FIELDBUS: Modbus RTU and the Danfoss FC protocol are BOTH embedded on the # RS485 port (terminals 68 +P / 69 -N, terminal 61 is the RC-filtered screen # point). No option card is needed for either. Par 8-30 Protocol default is # [0] FC, NOT Modbus — this profile assumes 8-30 = [2] Modbus RTU, which must # be set from the LCP before the drive answers a Modbus master. # (MG07C402 p. 80; MG07B302 p. 59 Table 5.11.) # # ADDRESSING: register = parameter_number * 10 - 1, where par 16-03 is the # integer 1603, so 1603 * 10 - 1 = 16029. MG07B302 p. 62 states the PNU rule # ("translated to Modbus as (10 x parameter number) decimal") and p. 65-66 # gives the two worked examples that pin the -1: par 3-03 -> Modbus register # 3030 -> wire address 3029 (0x0BD5), and par 1-00 -> register 1000 -> wire # address 999 (0x03E7). Same formula as the classic FC 102/202/301/302, and # confirmed here from the FC 280's own book rather than carried over. # # WIDTH IS PER PARAMETER — see `words` on each point. The FC 280 widths are # NOT the FC 202's: 16-12 Motor Voltage and 16-13 Frequency are Uint32 here # (16-bit on the FC 202), while 16-14 Motor current and 16-22 Torque [%] are # 16-bit here (32-bit on the FC 202). Reading either at the wrong width # splices in the neighbouring parameter. All widths below are from the # MG07C402 parameter list, pp. 129-132. # # CONTROL IS DELIBERATELY ABSENT. Neither MG07C402 nor MG07B302 documents a # holding-register address for the control word or the bus reference. What # they DO document (MG07B302 pp. 61-62, Tables 5.15-5.17) is a COIL map: # coils 1-16 control word (write with function 0F) # coils 17-32 speed setpoint, 0x4000 = 100% of par 3-03 Maximum Reference # coils 33-48 status word (read with function 01) # This schema writes holding registers, not coils, and the classic FC family's # register 50000/50010 CTW/REF block comes from MG92B102, an operating # instruction for software 6.4x that does not name the FC 280. Guessing that # mapping onto this drive is exactly the class of error this pipeline exists # to prevent, so the profile ships monitor-only. To enable control, confirm on # hardware which holding register accepts the FC-profile control word, then # add [control] with the classic FC values (stop 0x043C, run 0x047C, reset # 0x04BC rising edge then back to 0x043C) — those bit meanings ARE confirmed # for this drive by MG07B302 p. 67 Table 5.34. # # REVERSE, when control is eventually added: control word bit 15 reverses only # when par 8-54 Reversing Select routes reversing to the bus. The two primary # books DISAGREE on its default — MG07C402 p. 125 lists the default as # [3] Logic OR (bus reverse works), while MG07B302 p. 68 says "in the default # setting, reversing is set to digital". Until that is settled on the bench, # treat a reverse command as capable of silently running the motor FORWARD. # # WATCHDOG: par 8-04 Control Timeout Function defaults to [0] Off # (MG07C402 p. 125), so a running drive that loses its master keeps running. # Set 8-04 = [2] Stop or [5] Stop and trip with 8-03 Control Timeout Time if # you need a comm-loss stop. No [control.watchdog] here because there is no # [control] to keep alive. name = "Danfoss VLT Midi Drive FC 280" vendor = "Danfoss" device_type = "vfd" verified = false probe_register = 16029 # 16-03 status word [connection] summary = "Use the FC 280's embedded RS-485 port on terminals 68/69; no fieldbus option is needed." warnings = ["Isolate mains and DC-link power before touching the terminal block.", "Use shielded twisted pair and keep it separate from power wiring."] [[connection.methods]] id = "built_in_rs485" title = "Built-in RS-485 (68/69)" transport = "serial" hardware = "built_in" port = "Terminals 68 (+P), 69 (-N), optional 61 screen/reference" connector = "Control-terminal RS-485 plug" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded twisted-pair RS-485 cable" parts = ["Small insulated screwdriver", "End-of-line termination when applicable"] wiring = [{ adapter = "D+ / B+", device = "68 (+P)", signal = "RS-485 positive" }, { adapter = "D- / A-", device = "69 (-N)", signal = "RS-485 negative" }, { adapter = "COM/GND", device = "61", signal = "Optional reference/screen", required = false }] steps = ["De-energize the drive and identify terminals 68, 69, and 61.", "Connect the pair with positive on 68 and negative on 69.", "Terminate only if the drive is at an end of the trunk, then close the enclosure.", "Restore power and select the computer's serial adapter."] setup = ["Set 8-30 = 2 Modbus RTU, then commission 8-31 address, 8-32 baud, and 8-33 framing.", "Select the FC port as the command/reference source if control is required."] warnings = ["Factory protocol is FC, so the drive will not answer Modbus until 8-30 is changed.", "This profile is monitor-only because the manual does not publish a holding-register control-word location."] source = "Danfoss MG07B302, pp. 54-55; MG07C402, pp. 78-83" # MG07C402 p. 80: 8-32 Baud Rate default [2] 9600 Baud. # MG07B302 p. 55/59: 8-33 default "Even parity, 1 stop bit". [serial] baudrate = 9600 parity = "E" stopbits = 1 [monitor] # --- 16-bit parameters (words = 1) --- control_word = { address = 15999 } # 16-00 Uint16 reference_pct = { address = 16019, signed = true, scale = 0.1, unit = "%" } # 16-02 Int16, conv -1 # 16-03 status word, Uint16. Polarity is from MG07B302 pp. 68-69, read off the # Bit=0/Bit=1 columns rather than inferred from the names: bit 2 = 1 means the # drive will START on a start command (0 = coasting), and bit 10 = 1 means the # output frequency is WITHIN 4-12/4-14 (0 = outside). Bit 5 is reserved. # Bit 14 is named "Torque OK/limit exceeded" but its own explanation is the # par 4-18 Current Limit; bit 15 is one of the thermal timers past 100%. status_word = { address = 16029, bits = { 0 = "CtrlReady", 1 = "DriveReady", 2 = "NotCoasting", 3 = "Trip", 4 = "ErrorNoTrip", 6 = "TripLock", 7 = "Warning", 8 = "SpeedEqRef", 9 = "BusControl", 10 = "WithinFreqLimits", 11 = "Running", 12 = "StoppedAutoStart", 13 = "VoltageWarn", 14 = "CurrentLimit", 15 = "ThermalWarn" } } motor_current = { address = 16139, scale = 0.01, unit = "A" } # 16-14 Uint16, conv -2 motor_thermal = { address = 16179, unit = "%" } # 16-18 Uint8 torque_pct = { address = 16219, signed = true, unit = "%" } # 16-22 Int16 heatsink_temp = { address = 16339, signed = true, unit = "C" } # 16-34 Int8, conv 100 = factor 1 inverter_thermal = { address = 16349, unit = "%" } # 16-35 Uint8 # --- 32-bit parameters (words = 2) --- power_kw = { address = 16099, words = 2, scale = 0.001, unit = "kW" } # 16-10 Uint32, conv -3 motor_voltage = { address = 16119, words = 2, scale = 0.1, unit = "V" } # 16-12 Uint32, conv -1 output_frequency = { address = 16129, words = 2, scale = 0.1, unit = "Hz" } # 16-13 Uint32, conv -1 # 16-16 is torque in Nm (0.1 Nm/count), NOT percent. Percent is 16-22 above. torque_nm = { address = 16159, words = 2, signed = true, scale = 0.1, unit = "Nm" } # Int32 motor_speed = { address = 16169, words = 2, signed = true, unit = "rpm" } # 16-17 Int32 dc_link_voltage = { address = 16299, words = 2, unit = "V" } # 16-30 Uint32 [running_check] register = 16029 # 16-03 status word, 16-bit bit = 11 # "No operation / In operation" # 16-90 Alarm Word is a 32-bit BITFIELD, not an enum: several bits can be set # at once, so there is no code table to look up. Bit names are the FC 280's # own, from MG07C402 Table 6.3 (pp. 139-140) — they are NOT the FC 202's: # bit 1 is the POWER CARD temperature here (heatsink on the FC 202) and bit 25 # is reserved (1.8 V supply low on the FC 202). # # 16-91 Alarm Word 2 (register 16909) and 16-97 Alarm Word 3 (register 16969) # are not decoded here because they carry a different bit layout again. # (An earlier revision claimed the FC 202 has no 16-91 equivalent. It does — # MG11CE02 lists 16-91 Alarm Word 2 as Uint32 on that platform too.) # # 16-92 Warning Word is NOT included: despite the similar name its layout # diverges from the alarm word at bits 0, 2, 12, 15, 17-21, 25-29 and 31 # (bit 25 is "current limit" as a warning but reserved in the alarm word, # bit 28 is "encoder loss" vs "option change"), so decoding it with these # names would mislabel every one of those. [faults] register = 16899 # 16-90 alarm word words = 2 bitfield = true bits = { 0 = "BrakeCheck", 1 = "PowerCardTemp", 2 = "EarthFault", 3 = "CtrlCardTemp", 4 = "CtrlWordTimeout", 5 = "OverCurrent", 6 = "TorqueLimit", 7 = "MotorThermistor", 8 = "MotorETR_OverTemp", 9 = "InverterOverloaded", 10 = "DCUnderVoltage", 11 = "DCOverVoltage", 12 = "ShortCircuit", 14 = "MainsPhaseLoss", 15 = "AMA_NotOK", 16 = "LiveZeroError", 17 = "InternalFault", 18 = "BrakeOverload", 19 = "U_PhaseLoss", 20 = "V_PhaseLoss", 21 = "W_PhaseLoss", 22 = "FieldbusFault", 23 = "Supply24V_Low", 24 = "MainsFailure", 26 = "BrakeResistor", 27 = "BrakeIGBT", 28 = "OptionChange", 29 = "DriveInitialized", 30 = "SafeTorqueOff", 31 = "MechBrakeLow" } # 16-36 Inv. Nom. Current, Uint16, conversion index -2 (MG07C402 p. 131). # Frame identity in amps; 22 kW is the largest FC 280 so 0.01 A/count cannot # overflow a single register here. [rating] register = 16359 words = 1 scale = 0.01 unit = "A" label = "Inverter nominal current"