# Property of PMA Electrical Solutions, LLC. # # Danfoss VLT 6000 HVAC (VLT 6002-6550). Claims the VLT 6000 HVAC only. # MG10S202 also covers the VLT 2800 and VLT 8000 AQUA; the 2800 has different # readout parameter numbers and a different status word, and the 8000 has a # different alarm word, so each gets its own file. # # Sources (printed page numbers, not PDF page index): # MG10S202 VLT 2800 / VLT 6000 HVAC / VLT 8000 AQUA Modbus RTU Operating # Instructions (software 3.0x for the 6000) # p. 12 par 500/501/570/571 Modbus setup and defaults # p. 16 "Parameter Handling" — the PNU -> register rule and # the conversion-index table # p. 18 Register Maps VLT 6000, and the "shown value - 1" # note that pins the 0-based wire address # p. 20 Process Data / Status Coil Maps # pp. 23-24 Control Word bit descriptions, VLT 6000 / VLT 8000 # pp. 25-26 Status Word bit descriptions, VLT 6000 / VLT 8000 # pp. 26-27 serial communication reference and output frequency # scaling (16384 = 100%) # pp. 28-30 supported function codes (01/03/05/06/0F/10) # pp. 32-34 Appendix A worked examples, incl. "the starting # address of a register is the parameter number x 10 - 1" # MG61B602 VLT 6000 HVAC Design Guide (software 3.2x) # p. 165 parameters 509-538 Data read-out, what each returns # p. 168 extended status word bits # p. 169 warning word / warning word 2 bits # p. 170 alarm word bits with fault numbers and LCP text # p. 206 conversion-index and data-type legend (3=Int16 # 4=Int32 5=Uint8 6=Uint16 7=Uint32) # p. 208 factory settings 500-571 — the per parameter WIDTH # and conversion index used by every point below # # FIELDBUS: Modbus RTU is a firmware protocol on the built-in RS485 port. # Drive-side setup (MG10S202 p. 12, MG61B602 p. 208): # par 500 Protocol = [3] Modbus RTU (default is [0] FC protocol) # par 501 Address = 1-247 for Modbus (default 1; LCP only, not settable # over the bus) # par 502 Baudrate = default 9600 Baud # par 570 Parity/framing, par 571 Modbus timeout (default 100 ms) # # ADDRESSING: register = parameter_number * 10 - 1. MG10S202 p. 16 states # "The parameter number is translated to Modbus as (10 x parameter number) # DECIMAL", p. 18 adds "the Holding Register number shown must be transmitted # as (shown value - 1)", and Appendix A Example 4 pins it: par 104 -> holding # register 1040 -> wire address 0x040F = 1039. So par 527 Status word -> # 527 * 10 - 1 = 5269. These are THREE-DIGIT parameter numbers (527, not # 16-03); the FC 100/300 group notation does not apply to this drive. # # WIDTH IS PER PARAMETER — see `words` on each point, taken from the Data type # column of MG61B602 p. 208. Reading a 16-bit parameter as 2 registers splices # in the neighbouring parameter. # # CONTROL IS DELIBERATELY ABSENT. On this generation the process data is NOT # in the holding-register space. MG10S202 p. 20 maps it to COILS: # coils 1-16 PCD1 control word (master -> slave, function 05 / 0F) # coils 17-32 PCD2 reference (0x4000 = 100% of par 204-205) # coils 33-48 PCD1 status word (slave -> master, function 01) # coils 49-64 PCD2 output frequency # coil 65 write parameters to EEPROM # and Appendix A Example 1 "Start Motor, Run Speed 40%" is a function 0F Force # Multiple Coils write of 0x047C + 0x1999 to coils 0-31. The holding-register # map on p. 18 is parameters only; everything outside the documented parameter # blocks is "Reserved", and no CTW/REF register block (the FC family's # 50000/50010) exists on this drive. This schema writes holding registers, not # coils, so the profile ships monitor-only rather than guess a register. # The bit meanings ARE confirmed for this drive (MG10S202 pp. 23-24) if coil # support is ever added: stop 0x043C, start 0x047C, reset = rising edge of # bit 07 then back to 0x043C. # # REVERSE, if control is ever added: control word bit 15 reverses only when # par 506 Direction of rotation routes reversing to serial communication. # MG10S202 p. 24 says "in the factory setting, reversing has been selected as # digital"; MG61B602 p. 208 lists the default as Logic or (bus reverse would # work). The two primary books DISAGREE, so treat a bus reverse as capable of # silently running the motor FORWARD until settled on the bench. Direction can # also be commanded by a NEGATIVE reference (2's complement, MG10S202 p. 26) — # that path is unaffected by par 506. # # WATCHDOG: par 555 Bus time interval defaults to 1 s but par 556 Bus time # interval function defaults to OFF (MG61B602 p. 208), so a running drive that # loses its master keeps running. No [control.watchdog] here because there is # no [control] to keep alive. name = "Danfoss VLT 6000 HVAC" vendor = "Danfoss" device_type = "vfd" verified = false probe_register = 5269 # par 527 Status word [connection] summary = "Use the VLT 6000 HVAC's built-in RS-485 terminals 68/69." warnings = ["Lock out the drive and verify the DC link is discharged before opening it.", "Separate RS-485 wiring from mains and motor cables."] [[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 reference/screen" connector = "Control terminal strip" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded twisted-pair RS-485 cable" parts = ["Small insulated screwdriver", "120 ohm termination at bus endpoints"] 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 = ["Isolate the drive and find terminals 68 and 69 on the control strip.", "Land positive on 68 and negative on 69; add the optional reference only where required.", "Apply end termination only at the two physical ends, close the drive, and restore power.", "Connect the isolated adapter and select its serial port."] setup = ["Set parameter 500 Protocol = 3 Modbus RTU, 501 Address, 502 Baudrate, 570 framing, and 571 timeout."] warnings = ["This profile is monitor-only because the manual maps process control to coils rather than holding registers.", "Do not carry the VLT 2800 or VLT 8000 parameter numbers into this drive."] source = "Danfoss MG10S202, pp. 9 and 12; MG61B602, pp. 87-89 and 208" # MG61B602 p. 208: par 502 Baudrate default 9600 Baud, par 570 default # "No parity 1 stopbit" — NOT the 8E1 the FC 100/300 platform ships. [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] # --- 16-bit parameters (words = 1) --- reference_pct = { address = 5089, signed = true, scale = 0.1, unit = "%" } # 509 Int16, conv -1 output_frequency = { address = 5119, scale = 0.1, unit = "Hz" } # 512 Uint16, conv -1 motor_voltage = { address = 5169, scale = 0.1, unit = "V" } # 517 Uint16, conv -1 dc_link_voltage = { address = 5179, unit = "V" } # 518 Uint16, conv 0 motor_thermal = { address = 5189, unit = "%" } # 519 Uint8 inverter_thermal = { address = 5199, unit = "%" } # 520 Uint8 external_reference_pct = { address = 5259, signed = true, scale = 0.1, unit = "%" } # 526 Int16, conv -1 # par 527 Status word, Uint16. Polarity is read off the Bit=0/Bit=1 columns of # MG10S202 pp. 25-26, not inferred from the names: bit 2 = 1 means the drive # CAN start the motor ("Stand by"), and bit 10 = 1 means the output frequency # is WITHIN par 201/202 (0 = outside). Bits 4, 5 and 12 are unused. Bit 6 is # listed "Not in use" in the manual's own table but its prose on the same page # says bit 6 = 1 is a trip lock; the prose is used here. status_word = { address = 5269, bits = { 0 = "CtrlReady", 1 = "DriveReady", 2 = "StandBy", 3 = "Trip", 6 = "TripLock", 7 = "Warning", 8 = "SpeedEqRef", 9 = "BusControl", 10 = "WithinFreqLimits", 11 = "Running", 13 = "VoltageWarn", 14 = "CurrentLimit", 15 = "ThermalWarn" } } heatsink_temp = { address = 5279, unit = "C" } # 528 Uint8 control_word = { address = 5299 } # 530 Uint16 # --- 32-bit parameters (words = 2) --- motor_current = { address = 5139, words = 2, scale = 0.01, unit = "A" } # 514 Uint32, conv -2 power_hp = { address = 5159, words = 2, scale = 0.01, unit = "HP" } # 516 Uint32, conv -2 # par 515 Power [kW] is deliberately absent. MG61B602 p. 208 gives it # conversion index 1 (factor 10), which against a "kW" unit would make a # small drive read as a fraction of a count. The HP readout above has an # unambiguous index (-2) and covers the same measurement, so rather than pick # a scale the manual does not support, this point is left out. [running_check] register = 5269 # par 527 status word, 16-bit bit = 11 # "Not running / running" # par 529 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. Bits are from MG61B602 p. 170, # converted from the "Bit (Hex)" column (hex 0000 0040 -> bit 6). These names # are the VLT 6000's own and are NOT the FC 202's or the VLT 2800's — bit 6 is # the switch-mode fault here and the 2800 puts it at bit 9. Bits 26-31 are # reserved for future use. # # par 531 Warning word is NOT included: despite the similar name its layout # (MG61B602 p. 169) diverges from the alarm word almost everywhere — bit 0 is # "reference high" as a warning but "unknown alarm" as an alarm, bit 5 is # "overcurrent" vs "short circuit" — so decoding it with these names would # mislabel most of it. par 538 Warning word 2 has a third layout again. [faults] register = 5289 # par 529 alarm word words = 2 bitfield = true bits = { 0 = "UnknownAlarm", 1 = "TripLocked", 2 = "AMA_Fault", 3 = "HPFB_Timeout", 4 = "StdBusTimeout", 5 = "ShortCircuit", 6 = "SwitchModeFault", 7 = "EarthFault", 8 = "OverCurrent", 9 = "CurrentLimit", 10 = "MotorThermistor", 11 = "MotorOverload", 12 = "InverterOverload", 13 = "UnderVoltage", 14 = "OverVoltage", 15 = "MainsImbalance", 16 = "LiveZeroFault", 17 = "HeatsinkOverTemp", 18 = "MotorPhaseW", 19 = "MotorPhaseV", 20 = "MotorPhaseU", 21 = "HPFB_CommFault", 22 = "GateDriveFault", 23 = "OutputCurrentLow", 24 = "SafetyInterlock", 25 = "FireModeWasActive" }