# Property of PMA Electrical Solutions, LLC. # # Danfoss VLT 8000 AQUA. Claims the VLT 8000 AQUA only. MG10S202 also covers # the VLT 2800 and VLT 6000 HVAC; the 2800 has different readout parameter # numbers and a different status word, and the 6000 has a different alarm word # tail (bits 25-26), 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 1.5x for the 8000) # p. 13 par 500/501/570/571 Modbus setup and defaults # p. 16 "Parameter Handling" — the PNU -> register rule and # the conversion-index table # p. 19 Register Maps VLT 8000, 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" # MG83A202 VLT 8000 AQUA manual (self-titled Operating Instructions, # Danfoss document MG.83.A2.02) # p. 15 Modbus RTU is an option, ordering no. 175Z3362 # pp. 163-164 parameters 509-538 Data read-out, what each returns # p. 167 extended status word, warning word 1+2 and ALARM WORD # bit tables — the 8000's alarm word, not the 6000's # p. 199 conversion-index and data-type legend (3=Int16 # 4=Int32 5=Uint8 6=Uint16 7=Uint32) # p. 201 factory settings 500-571 — the per parameter WIDTH # and conversion index used by every point below # # FIELDBUS: on the VLT 8000 AQUA, Modbus RTU is a factory/field OPTION # (MG83A202 p. 15, ordering no. 175Z3362 without conformal coating), not # fitted to every unit. Once the option is present, par 500 selects it. # Drive-side setup (MG10S202 p. 13, MG83A202 p. 201): # par 500 Protocol = [1] Modbus RTU (default is [0] FC protocol; note the # 8000 offers only two protocols, so the Modbus value is # [1] here and [3] on the VLT 6000) # 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. 19 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 MG83A202 p. 201. 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. 19 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 Reversing routes reversing to serial communication. Both books agree # the VLT 8000 default is DIGITAL INPUT (MG10S202 p. 24, MG83A202 p. 201), so # a bus reverse command would silently run the motor FORWARD. Direction can # instead 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 60 s and par 556 Bus Time # Interval Function defaults to NO FUNCTION (MG83A202 p. 201), 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 8000 AQUA" vendor = "Danfoss" device_type = "vfd" verified = false probe_register = 5269 # par 527 Status word [connection] summary = "A VLT 8000 must have the Modbus RTU option 175Z3362; once fitted, connect at RS-485 terminals 68/69." warnings = ["Do not assume every VLT 8000 has Modbus hardware; verify option 175Z3362 before wiring.", "Lock out power and verify discharge before opening the drive."] [[connection.methods]] id = "modbus_option_175z3362" title = "Modbus RTU option 175Z3362" transport = "serial" hardware = "option" port = "Option-provided terminals 68 (P+) and 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 = ["Danfoss Modbus RTU option 175Z3362", "Small insulated screwdriver", "120 ohm endpoint termination"] 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 = ["Confirm option 175Z3362 is fitted, then isolate the drive and locate terminals 68/69.", "Land the shielded pair positive-to-68 and negative-to-69; add the optional reference only if required.", "Terminate only at physical bus ends and close the drive before restoring power.", "Connect and select the isolated computer adapter."] setup = ["Set parameter 500 Protocol = 1 Modbus RTU, 501 Address, 502 Baudrate, 570 framing, and 571 timeout."] warnings = ["Modbus is value 1 on VLT 8000, not value 3 used by VLT 6000.", "This profile is monitor-only because process control is documented in the coil space."] source = "Danfoss MG83A202, pp. 15, 78-81, and 201; MG10S202, pp. 9 and 13" # MG83A202 p. 201: 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. MG83A202 p. 201 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 MG83A202 p. 167, # converted from the "Bit (Hex)" column (hex 0000 0040 -> bit 6). This is the # VLT 8000's OWN table: it matches the VLT 6000 through bit 24, then diverges — # bit 25 is reserved here (Fire mode was active on the 6000) and bit 26 is # "Dry run", which the 6000 does not have at all. # # par 531 Warning word is NOT included: despite the similar name its layout # (MG83A202 p. 167) 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", 26 = "DryRun" }