# Property of PMA Electrical Solutions, LLC. # # Danfoss VLT DriveMotor FCP 106 and FCM 106. Both models are claimed because # MG03N202 is written for the pair ("VLT DriveMotor FCP 106/FCM 106") and # gives one parameter set for both; the FCP 106 is the panel/wall-mount # electronics and the FCM 106 is the same electronics on the motor. # # Sources (printed page numbers, not PDF page index): # MG03N202 VLT DriveMotor FCP 106/FCM 106 Programming Guide, 11/2015, # software 5.00 # p. 17 par 8-30..8-37 Modbus communication parameters # p. 24 Table 3.11 Network Configuration — protocol, address, # baud and parity to enable Modbus RTU # p. 26 Illustration 3.15 PCD write/read lists — the CTW/REF # and STW/MAV holding registers used by [control] # pp. 28-29 "10 x parameter number" rule and the worked examples # that pin the -1 # pp. 30-31 Table 3.26 control word, FC profile, bit by bit # p. 32 Table 3.29 status word, FC profile, with the # Bit=0 / Bit=1 polarity columns # p. 33 bus reference scaling, 16384 (4000 hex) = 100% # pp. 71-74 par 8-0*/8-3*/8-5* and their defaults # p. 120 Table 5.3 alarm word / alarm word 2 / alarm word 3 # pp. 137-138 parameter list 16-** — the per-parameter WIDTH and # conversion index used by every point below # MG03M202 VLT DriveMotor FCP 106/FCM 106 Design Guide (cached for the # wiring and option context; no register data is taken from it) # # FIELDBUS: Modbus RTU and the Danfoss FC protocol are BOTH embedded on the # RS485 port. No option card is needed. 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 (MG03N202 p. 72). # For bus control also check par 8-01 Control Site (default [0] Digital and # ctrl.word) and par 8-02 Control Source. Par 8-53 Start Select defaults to # [3] Logic OR and 8-50 Coasting Select to [3] Logic OR, so a bus start works # at factory defaults. # # ADDRESSING: register = parameter_number * 10 - 1, where par 16-03 is the # integer 1603, so 1603 * 10 - 1 = 16029. MG03N202 p. 28 states the PNU rule # ("The parameter number is translated to Modbus as (10 x parameter number) # decimal") and pp. 28-29 give the two worked examples that pin the -1: # par 3-03 -> 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, confirmed here from the FCP 106's own book rather than # carried over. # # WIDTH IS PER PARAMETER — see `words` on each point, from the Type column of # the MG03N202 parameter list, pp. 137-138. The FCP 106 widths are NOT the # FC 202's: 16-12 Motor Voltage, 16-13 Frequency and 16-30 DC Link Voltage 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). 16-10 Power [kW] is # conversion index -3 here and -2 on the FC 202. Reading either at the wrong # width splices in the neighbouring parameter. # # CONTROL REGISTERS: MG03N202 p. 26, Illustration 3.15, gives the PCD write # and read lists as holding registers 2810-2873 (master -> drive) and # 2910-2973 (drive -> master), with index 0 and 1 of each fixed — the manual # marks them not changeable and states "The control word and reference is # always sent in the list from the controller to the frequency converter": # register 2810 CTW control word register 2910 STW status word # register 2811 REF bus reference register 2911 MAV main actual value # Those are register NUMBERS in the same space as the parameter numbers above, # so the wire addresses are 2809 / 2810 / 2909 / 2910. MG03N202 does not # document the classic FC family's 50000/50010 CTW/REF block, so the PCD # registers — which this drive's own manual does document — are used. # # REFERENCE is % of max, NOT Hz: MG03N202 p. 33, "value 16384 (4000 hex) # corresponds to 100%", scaled between par 3-02 Minimum Reference and 3-03 # Maximum Reference. raw = value / speed_scale, so 100% -> 16384. # # REVERSE: run_rev is deliberately absent. Control word bit 15 reverses only # when par 8-54 Reversing Select is routed to the bus, and MG03N202 p. 74 # lists the default as [0] Digital input (p. 31 says the same in prose), so a # "reverse" command at factory settings silently runs the motor FORWARD. Set # 8-54 = [1] Bus and add run_rev = [1084, 33916] if you need it. # # WATCHDOG: par 8-04 Control Timeout Function defaults to [0] Off with 8-03 # Control Timeout Time at 1 s (MG03N202 pp. 71, 133), so a running drive that # loses its master keeps running. The keepalive below is declared anyway so # the app holds the link up; set 8-04 = [2] Stop or [5] Stop and trip for a # real comm-loss stop. name = "Danfoss VLT DriveMotor FCP 106 / FCM 106" vendor = "Danfoss" device_type = "vfd" verified = false probe_register = 16029 # 16-03 status word [connection] summary = "Use the embedded RS-485 terminals 68/69 on the FCP 106 or FCM 106 control board." warnings = ["Isolate and prove dead before opening the unit or motor-mounted electronics.", "Keep the RS-485 pair away from motor conductors and restore all enclosure seals."] [[connection.methods]] id = "built_in_rs485" title = "Built-in RS-485 (68/69)" transport = "serial" hardware = "built_in" port = "Control terminals 68 (P/TX+/RX+), 69 (N/TX-/RX-), 61 common" connector = "Internal control-terminal block" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded twisted-pair RS-485 cable" parts = ["Suitable cable gland", "Small insulated screwdriver", "End termination when required"] wiring = [{ adapter = "D+ / B+", device = "68 (P, TX+/RX+)", signal = "RS-485 positive" }, { adapter = "D- / A-", device = "69 (N, TX-/RX-)", signal = "RS-485 negative" }, { adapter = "COM/GND", device = "61", signal = "Optional RS-485 common", required = false }] steps = ["De-energize the assembly and open the control compartment.", "Identify terminals 68, 69, and 61 and land the pair with the documented polarity.", "Bond/route the shield as specified and restore the enclosure before applying power.", "Connect the USB adapter to the computer and select its serial port."] setup = ["Set 8-30 = 2 Modbus RTU, 8-31 address, 8-32 baud, and 8-33 parity/stop bits.", "For control, verify 8-01/8-02 select the FC port."] warnings = ["Factory protocol is FC, not Modbus RTU.", "Do not leave a motor-mounted FCM enclosure open or improperly sealed."] source = "Danfoss MG03N202, pp. 17-18 and 24; MG03M202, pp. 69-71" # MG03N202 p. 72: par 8-32 Baud Rate value [3] 19200 Baud is the "Default # setting for Modbus RTU" — the FC-protocol default of 9600 does NOT apply # once 8-30 is switched to Modbus. p. 24 Table 3.11: par 8-33 Parity / Stop # Bits default "Even parity, 1 stop bit". [serial] baudrate = 19200 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 MG03N202 p. 32 Table 3.29, 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 "Torque OK / torque exceeded" and bit 15 is # "Timer OK / timer exceeded" on this platform — NOT the FC 202's current # limit and thermal warning. 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 = "VoltageExceeded", 14 = "TorqueExceeded", 15 = "TimerExceeded" } } main_actual_value_pct = { address = 16049, signed = true, scale = 0.01, unit = "%" } # 16-05 Int16, conv -2 motor_current = { address = 16139, scale = 0.01, unit = "A" } # 16-14 Uint16, conv -2 frequency_pct = { address = 16149, scale = 0.1, unit = "%" } # 16-15 Uint16, conv -1 motor_thermal = { address = 16179, unit = "%" } # 16-18 Uint8 torque_pct = { address = 16219, signed = true, unit = "%" } # 16-22 Int16, conv 0 heatsink_temp = { address = 16339, signed = true, unit = "C" } # 16-34 Int8, conv 100 = factor 1 inverter_thermal = { address = 16349, unit = "%" } # 16-35 Uint8 external_reference_pct = { address = 16499, signed = true, scale = 0.1, unit = "%" } # 16-50 Int16, conv -1 # --- 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, conv -1 dc_link_voltage = { address = 16299, words = 2, unit = "V" } # 16-30 Uint32, conv 0 [control] command_register = 2809 # PCD write index 0, register 2810 -> wire 2809 speed_register = 2810 # PCD write index 1, register 2811 -> wire 2810 # Reference is % of max, NOT Hz. raw = value / scale, so 100% -> 16384. speed_scale = 0.006103515625 speed_unit = "%" max_ref = 100.0 step_delay = 0.05 # FC-profile control word values, from MG03N202 pp. 30-31: bit 2 ramp, bit 3 # no coasting, bit 4 no quick stop, bit 5 use ramp, bit 10 data valid = 0x043C # idle. Adding bit 6 gives start (0x047C); adding bit 7 instead gives the # reset edge (0x04BC) WITHOUT a start bit. Par 16-85 FC Port CTW 1 has a # factory value of 1084 = 0x043C (MG03N202 p. 138), which independently # confirms 0x043C as the resting control word for this drive. stop = [1084] # 0x043C run_fwd = [1084, 1148] # 0x043C then 0x047C reset = [1212, 1084] # 0x04BC rising edge, then back to stop [control.watchdog] interval_ms = 500 fault = "control timeout (8-04, defaults to Off)" [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 from MG03N202 # p. 120 Table 5.3, and are the FCP 106's own — the table marks bits 0, 3, 6, # 13, 18, 22, 24-28 and 30 "not used in FCP 106", and bit 1 is the POWER CARD # temperature here where the FC 202 has the heatsink. # # 16-91 Alarm Word 2 (register 16909) and 16-97 Alarm Word 3 (register 16969) # exist on this platform and carry a completely different bit layout each; # they are not decoded here. # # 16-92 Warning Word is NOT included: its layout (MG03N202 p. 121) matches the # alarm word for bits 1-11 and 14 but diverges after that — bit 15 is # "no motor" as a warning and "AMA not OK" as an alarm — so decoding it with # these names would mislabel the tail. [faults] register = 16899 # 16-90 alarm word words = 2 bitfield = true bits = { 1 = "PowerCardTemp", 2 = "EarthFault", 4 = "CtrlWordTimeout", 5 = "OverCurrent", 7 = "MotorThermistor", 8 = "MotorETR_OverTemp", 9 = "InverterOverloaded", 10 = "DCUnderVoltage", 11 = "DCOverVoltage", 12 = "ShortCircuit", 14 = "MainsPhaseLoss", 15 = "AMA_NotOK", 16 = "LiveZeroError", 17 = "InternalFault", 19 = "U_PhaseLoss", 20 = "V_PhaseLoss", 21 = "W_PhaseLoss", 23 = "Supply24V_Low", 29 = "DriveInitialized", 31 = "MechBrakeLow" } # 16-36 Inv. Nom. Current, Uint16, conversion index -2 (MG03N202 p. 137). # Frame identity in amps; the FCP/FCM 106 range tops out at 22 kW, 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"