# Property of PMA Electrical Solutions, LLC. # # Schneider Altivar Process ATV930 over the EMBEDDED Modbus serial port # (RJ45 on the control block). No option card is assumed or required — the # drive firmware embeds the Modbus serial firmware (NHA80939 p. 45). # # Sources, all Schneider-hosted primary documentation: # NHA80939 Altivar Process ATV900 Modbus SL Manual (Embedded), 07/2015, 118 pp # NHA80944 Altivar Process ATV900 Communication Parameters, V4.6 (xlsx) # NHA80757 Altivar Process ATV930/950/960/980 Programming Manual, rev .14, 702 pp # # NHA80939 pp. 26-27 control word bit map + the command value table # NHA80939 p. 28 control word bit assignment (bit 11 = rrS by default) # NHA80939 p. 29 status word bit map + the CiA402 state table # NHA80939 pp. 36-38 Modbus protocol, supported functions, worked address example # NHA80939 pp. 55-57 tbr / tFO / ttO factory settings # NHA80939 pp. 104-107 configuring the control channel # NHA80939 p. 113 per-channel command/reference parameters (LFr is 0.1 Hz) # NHA80939 p. 114 SLF1 on [Modbus Timeout] ttO expiry # NHA80944 "Parameters" sheet every logic address below # NHA80944 "Enumerations" sheet LFT fault code list # NHA80757 p. 90 LCR rating-dependent current step, THR # NHA80757 p. 92 LFR range +/-599.0 Hz # NHA80757 pp. 206-208 command/reference channels, [Not separ.] SIM behaviour # NHA80757 p. 687 [Mdb Com Interrupt] SLF1 # # ADDRESSING. Schneider publishes a "logic address" per parameter, as hex and # decimal (e.g. LFR = 16#2136 = 8502). That number IS the 0-based Modbus # starting address on the wire — no 4xxxx offset, no conversion: # 0-based register = decimal logic address # NHA80939 p. 37 works the example explicitly: reading W3102..W3105 puts # 0C1E hex (= 3102 decimal) in the FC03 starting-address field. Every address # in this file is that number as-is. # # MODEL COVERAGE. Claimed for the ATV930 only. NHA80757 is titled for # ATV930/ATV950/ATV960/ATV980 and NHA80939/NHA80944 are ATV900-wide, so the # siblings are documented by the same books — but ATV950/960/980 are cabinet # and drive-system versions with AFE, cabinet-circuit and cooling parameters # this profile neither exercises nor validates, so they are not claimed. # # DRIVE-SIDE SETUP — without this the drive ACKs the writes and ignores them. # [Ref Freq 1 Config] Fr1 (8413) = [Modbus] Mdb # [Control Mode] CHCF (8401) = [Not separ.] SIM (factory setting) # In SIM the command channel FOLLOWS the reference channel, so Fr1 alone # routes both (NHA80757 p. 208). For [Separate] SEp also set # [Cmd channel 1] Cd1 (8423) = [Modbus] Mdb — its factory value is # [Terminal block] TER (NHA80939 pp. 106-107). # Serial: [Device Modbus address] Add (6001) SHIPS AT 0, which is the # broadcast address and answers nothing — it must be set to 1...247. # [Modbus baud rate] tbr (6003) = 19200 and [Modbus format] tFO (6004) = 8E1 # are the factory settings and are what [serial] below assumes. name = "Schneider Altivar Process ATV930" vendor = "Schneider Electric" device_type = "vfd" verified = false probe_register = 3201 # ETA, readable whenever the drive is powered # NHA80939 pp. 55-56: factory settings are 19200 bps, 8E1. [serial] baudrate = 19200 parity = "E" stopbits = 1 [monitor] # ETA, the CiA402 status word (NHA80939 p. 29). Bits 0-7 and 9-11 are the # standard CiA402 set; bit 15 is Schneider's direction-of-rotation bit. status_word = { address = 3201, bits = { 0 = "ReadyToSwitchOn", 1 = "SwitchedOn", 2 = "OperationEnabled", 3 = "Fault", 4 = "VoltageEnabled", 5 = "QuickStop", 6 = "SwitchOnDisabled", 7 = "Warning", 9 = "Remote", 10 = "TargetReached", 11 = "InternalLimit", 14 = "StopKey", 15 = "Direction" } } output_frequency = { address = 3202, signed = true, scale = 0.1, unit = "Hz" } # RFR # LCR scaling depends on drive rating (NHA80757 p. 90, footnote 2): 0.01 A at # <=15 kW, 0.1 A at 18...160 kW, and 1 A above 160 kW. Expose the register raw # until profiles can select a scale from the exact frame rating. motor_current_raw = { address = 3204 } # OTR. NHA80944 gives the fieldbus unit as 0.1 % and NHA80757 p. 90 defines # 100 % = [Nom Motor torque] TQN. The same page's HMI value range is quoted in # Nm, so the two presentations disagree — treat the % reading as unconfirmed. motor_torque = { address = 3205, signed = true, scale = 0.1, unit = "%" } ext_status = { address = 3206 } # ETI internal state, NOT power mains_voltage = { address = 3207, scale = 0.1, unit = "V" } # ULN output_voltage = { address = 3208, unit = "V" } # UOP, 1 V per count drive_thermal_state = { address = 3209, unit = "%" } # THD (drive, not motor) motor_power = { address = 3211, signed = true, unit = "%" } # OPR, 1 % per count dc_voltage = { address = 3243, scale = 0.1, unit = "V" } # VBUS motor_thermal_state = { address = 9630, unit = "%" } # THR, 100 % = normal command_word = { address = 8501 } # CMD read-back speed_setpoint = { address = 8502, signed = true, scale = 0.1, unit = "Hz" } # LFR # CiA402 state machine on CMD (NHA80939 p. 26): # shutdown (0006) -> switch on (0007) -> enable operation (000F). [control] command_register = 8501 # CMD speed_register = 8502 # LFR, reference frequency in 0.1 Hz (NHA80939 p. 113) speed_scale = 0.1 speed_unit = "Hz" # LFR itself accepts +/-599.0 Hz (NHA80757 p. 92). Actual motion is clamped by # [Max frequency] tFr (3103) and [High speed] HSP (3104), whose factory values # are rating- and region-dependent — this is the register limit, not a speed # the drive will necessarily run. max_ref = 599.0 step_delay = 0.05 stop = [0x0006] run_fwd = [0x0006, 0x0007, 0x000F] # Bit 11 is the direction bit and is assigned to [Reverse Assign] rrS by # default (NHA80939 pp. 26, 28). Direction is NOT the sign of the reference # here, so run_rev is a genuinely different word, not a copy of run_fwd. run_rev = [0x0006, 0x0007, 0x080F] # Fault reset is the 0->1 edge of bit 7; NHA80939 p. 26 gives the whole word as # 0080 hex. That word holds Enable operation LOW, so it is not itself a run # command; 0006 then returns the drive to Ready to switch on. reset = [0x0080, 0x0006] [[control.preconditions]] register = 8504 # CMI mask = 0x0200 expected = 0 message = "CMI bit 9 must be clear so LFR/RFR use the documented 0.1 Hz scale" # NHA80939 p. 114: if the drive receives NO Modbus request addressed to it for # [Modbus Timeout] ttO (6005, factory 10.0 s, range 0.1...30.0 s), it triggers # SLF1. [Modbus Interrupt Resp] SLL (7010) decides what SLF1 does — factory # setting is [Freewheel stop] YES, i.e. the motor coasts. Keepalive is 50 ms, # below the minimum 0.1 s ttO. [control.watchdog] interval_ms = 50 fault = "SLF1 Mdb Com Interrupt" [running_check] register = 3201 bit = 2 # Operation enabled [direction_check] register = 3201 bit = 15 reverse_when_set = true # LFT last error; history is DP0-DP9 and DPA-DPF (NHA80944). [faults] register = 7121 history = [7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7600, 7601, 7602, 7603, 7604, 7605] # Subset of the LFT enumeration in NHA80944, carrying the codes an operator # actually meets. The full list is 150 entries; the rest are internal-error and # cabinet/AFE codes that mean nothing without the manual open. [faults.codes] 0 = "[No Error] (NOF) No error detected" 2 = "[Ctrl Memory Error] (EEF1) Control memory error" 3 = "[Incorrect Config] (CFF) Incorrect configuration" 4 = "[Invalid Config] (CFI) Invalid configuration" 5 = "[Mdb Com Interrupt] (SLF1) Modbus communication interruption" 6 = "[Internal Link Error] (ILF) Internal communication interruption with option module" 7 = "[Fdbus Com Interrupt] (CNF) Fieldbus communication interruption" 8 = "[External Error] (EPF1) External detected error" 9 = "[Overcurrent] (OCF) Overcurrent" 10 = "[Precharge Capa] (CRF1) Precharge capacitor" 11 = "[Enc Fdbk Loss] (SPF) Encoder feedback loss" 12 = "[Load slipping] (ANF) Load slipping" 15 = "[Input Overheating] (IHF) Input Overheating" 16 = "[Device Overheat] (OHF) Device overheating" 17 = "[Motor Overload] (OLF) Motor overload" 18 = "[DC Bus OverV] (OBF) DC bus overvoltage" 19 = "[Supply Mains OverV] (OSF) Supply mains overvoltage" 20 = "[Single out ph loss] (OPF1) Single output phase loss" 21 = "[Input Phase Loss] (PHF) Input phase loss" 22 = "[Supply Mains UnderV] (USF) Supply mains undervoltage" 23 = "[Motor short circuit] (SCF1) Motor short circuit" 24 = "[Motor Overspeed] (SOF) Motor overspeed" 25 = "[Autotuning Error] (TNF) Autotuning detected error" 26 = "[Internal Error 1] (INF1) Internal error 1 (Rating)" 27 = "[Internal Error 2] (INF2) Internal error 2 (Soft)" 28 = "[Internal Error 3] (INF3) Internal error 3 (Intern Comm)" 29 = "[Internal Error 4] (INF4) Internal error 4 (Manufacturing)" 30 = "[Pwr Memory Error] (EEF2) Power memory error" 32 = "[Ground Short Circuit] (SCF3) Ground short circuit" 33 = "[Output Ph Loss] (OPF2) Output phase loss" 34 = "[CANopen Com Interrupt] (COF) CANopen communication interruption" 35 = "[Brake Control] (BLF) Brake control" 37 = "[Internal Error 7] (INF7) Internal error 7 (Init)" 38 = "[Fieldbus Error] (EPF2) External error detected by Fieldbus" 40 = "[Internal Error 8] (INF8) Internal error 8 (Switching Supply)" 41 = "[Brake Feedback] (BRF) Brake feedback" 42 = "[PC Com Interrupt] (SLF2) PC communication interruption" 43 = "[Encoder Coupling] (ECF) Encoder coupling" 44 = "[Torque Limit Error] (SSF) Torque limitation error" 45 = "[HMI Com Interruption] (SLF3) HMI communication interruption" 51 = "[Internal Error 9] (INF9) Internal error 9 (Measure)" 52 = "[Internal Error 10] (INFA) Internal error 10 (Mains)" 53 = "[Internal Error 11] (INFB) Internal error 11 (Temperature)" 54 = "[Device Overheat] (TJF) Device overheating" 55 = "[IGBT Short Circuit] (SCF4) IGBT short circuit" 56 = "[Mot Short Circuit] (SCF5) Motor short circuit" 57 = "[Torque timeout] (SRF) Torque timeout" 58 = "[Out Contact Closed Error] (FCF1) Output contactor closed error" 59 = "[Out Contact Opened Error] (FCF2) Output contactor opened error" 60 = "[Internal Error 12] (INFC) Internal error 12 (Internal current supply)" 62 = "[Encoder] (ENF) Encoder" 64 = "[Input Contactor] (LCF) input contactor" 65 = "[DB unit sh. circuit] (BUF) DB unit sh. circuit" 68 = "[Internal Error 6] (INF6) Internal error 6 (Option)" 69 = "[Internal Error 14] (INFE) Internal error 14 (CPU)" 70 = "[Braking Resistor ovld] (BOF) Braking resistor overload" 71 = "[AI3 4-20mA loss] (LFF3) AI3 4-20mA loss" 72 = "[AI4 4-20mA loss] (LFF4) AI4 4-20mA loss" 73 = "[Boards Compat] (HCF) Boards compatibility" 76 = "[Dyn Load Error] (DLF) Dynamic load detected error" 77 = "[Conf Transfer Error] (CFI2) Configuration transfer error" 79 = "[AI5 4-20 mA loss] (LFF5) AI5 4-20 mA loss" 80 = "[Fan Feedback Error] (FFDF) Fan feedback error" 81 = "[Module Overheat] (MOF) Module overheat error" 82 = "[ON Lock Error] (LKON) ON lock error" 99 = "[Channel Switch Error] (CSF) Channel switching detected error" 100 = "[Proc Underload] (ULF) Process underload" 101 = "[Process Overload] (OLC) Process overload" 105 = "[Angle error] (ASF) Angle error" 106 = "[AI1 4-20 mA loss] (LFF1) AI1 4-20 mA loss" 107 = "[Safety Func Error] (SAFF) Safety function detected error" 112 = "[AI3 Th Level Error] (TH3F) AI3 thermal level error" 113 = "[AI3 Th Sensor Err] (T3CF) Thermal sensor error on AI3" 114 = "[PumpCycle start Error] (PCPF) Pump cycle start error" 120 = "[AI4 Th Level Error] (TH4F) AI4 thermal level error" 121 = "[AI4 Th Sensor Err] (T4CF) Thermal sensor error on AI4" 122 = "[AI5 Th Level Error] (TH5F) AI5 thermal level error" 123 = "[AI5 Th Sensor Err] (T5CF) Thermal sensor error on AI5" 127 = "[PID Fdbk Error] (PFMF) PID feedback detected error" 128 = "[Prog Load Error] (PGLF) Program loading detected error" 129 = "[Prog Run Error] (PGRF) Program running detected error" 133 = "[Safety Violation] (SAVF) Safety violation" 134 = "[Safety Config Error] (SCFF) Safety configuration error" 135 = "[Safety IO Error] (SIOF) Safety IO error" 142 = "[Internal Error 16] (INFG) Internal error 16 (IO module - relay)" 143 = "[Internal Error 17] (INFH) Internal error 17 (IO module - Standard)" 144 = "[Internal Error 0] (INF0) Internal error 0 (IPC)" 146 = "[Internal Error 13] (INFD) Internal error 13 (Diff current)" 147 = "[Internal Error 18] (INFI) Internal error 18 (Safety function module)" 148 = "[Motor Stall Error] (STF) Motor stall detected error" 149 = "[Internal Error 21] (INFL) Internal error 21 (RTC)" 150 = "[Embd Eth Com Interrupt] (ETHF) Embedded Ethernet communication interruption" 151 = "[Internal Error 15] (INFF) Internal error 15 (Flash)" 152 = "[FW Update Error] (FWER) Firmware Update error" 153 = "[Internal Error 22] (INFM) Internal error 22 (Embedded Ethernet)" 154 = "[Internal Error 25] (INFP) Internal error 25 (Incompatibility CB & SW)" 155 = "[Internal Error 20] (INFK) Internal error 20 (option interface PCBA)" 156 = "[Internal Error 19] (INFJ) Internal error 19 (Encoder module)" 157 = "[Internal Error 27] (INFR) Internal error 27 (Diagnostics CPLD)" 158 = "[Internal Error 23] (INFN) Internal error 23 (Module link)" 159 = "[AFE ShortCircuit error] (SCF6) AFE ShortCircuit error" 160 = "[AFE Bus unbalancing] (OBF2) AFE Bus unbalancing" 161 = "[Internal Error 28] (INFS) Internal error 28 (AFE)" 162 = "[MonitorCirc A Error] (IFA) Monitoring circuit A error" 163 = "[MonitorCirc B Error] (IFB) Monitoring circuit B error" 164 = "[MonitorCirc C Error] (IFC) Monitoring circuit C error" 165 = "[MonitorCirc D Error] (IFD) Monitoring circuit D error" 166 = "[CabinetCirc A Error] (CFA) Cabinet circuit A error" 167 = "[CabinetCirc B Error] (CFB) Cabinet circuit B error" 168 = "[CabinetCirc C Error] (CFC) Cabinet circuit C error" 169 = "[MotorWinding A Error] (TFA) Motor winding A error" 170 = "[MotorWinding B Error] (TFB) Motor winding B error" 171 = "[MotorBearing A Error] (TFC) Motor bearing A error" 172 = "[MotorBearing B Error] (TFD) Motor bearing B error" 173 = "[Cabinet Overheat Error] (CHF) Cabinet overheat error" 174 = "[AFE Mains Undervoltage] (URF) AFE Mains undervoltage" 175 = "[Internal Error 31] (INFV) Internal error 31 (Missing brick)" 176 = "[Internal Error 29] (INFT) Internal error 29 (Inverter)" 177 = "[Internal Error 30] (INFU) Internal error 30 (Rectifier)" 179 = "[AFE IGBT over-heat error] (TJF2) AFE IGBT over-heat error" 180 = "[AFE contactor feedback error] (CRF3) AFE contactor feedback error" 181 = "[Pre-settings Transfer Error] (CFI3) Pre-settings transfer error" 182 = "[Circuit Breaker Error] (CBF) Circuit breaker error" 184 = "[DB unit op. circuit] (BUFO) DB unit open circuit" 185 = "[Drive Overload] (TLOF) Drive overload" 186 = "[MultiDrive Link Error] (MDLF) MultiDrive Link error" 187 = "[AI1 Th Level Error] (TH1F) AI1 thermal level error" 188 = "[AI1 Th Sensor Error] (T1CF) Thermal sensor error on AI1" 189 = "[Backlash Error] (BSQF) Backlash error" 190 = "[M/S Device Error] (MSDF) M/S device error" 191 = "[AFE DC-Caps Error] (ACF1) AFE DC-capacitors error" 192 = "[AFE Current Control Error] (ACF2) AFE current control error" 193 = "[Mains Freq Out Of Range] (MFF) Mains frequency out of range" 194 = "[Encoder Th Level Error] (THEF) Encoder module thermal level error" 195 = "[Encoder Th Sensor Error] (TECF) Thermal sensor error on encoder module" 196 = "[Empty Config] (CFI4) Empty configuration" 197 = "[Internal Error 32] (INFW) Internal error 32 (Firmware Update)" 198 = "[BUO Overheat error] (BUHF) BUO overheat error" 199 = "[BUO Overcurrent error] (BUOC) BUO overcurrent error" 200 = "[FDR 1 Error] (FDR1) FDR Eth embedded error" 201 = "[FDR 2 Error] (FDR2) FDR Eth module error" 202 = "[AFE Bus Ref Error] (MDF) AFE bus reference error" 203 = "[Cab I/O 24V Error] (P24C) Cabinet I/O 24V missing error" 206 = "[DC Bus Ripple Error] (DCRE) DC Bus ripple error" 208 = "[Egy Saving Exit Error] (IDLF) Idle mode exit error" 209 = "[Load Mvt Error] (MDCF) Load movement error" 211 = "[Security Files Corrupt] (SPFC) Security files corrupt" 212 = "[AFE Line Filter Error] (ACF3) AFE Line filter error" 213 = "[Cooling Pump Error] (COPF) Cooling pump error" 221 = "[SD Error] (SDFT) Synchro to drive error" [connection] summary = "Connect to the ATV930 embedded Modbus interface; no fieldbus option card is required for the documented serial path." warnings = ["Lock out the drive/starter before opening covers or moving switches.", "Keep communications cable at least 30 cm from line and motor wiring.", "Prove read-only communication with the motor inhibited before enabling network control."] [[connection.methods]] id = "built_in_rs485" title = "Built-in Modbus RJ45" transport = "serial" hardware = "built_in" port = "Built-in Modbus RJ45" connector = "RJ45; pin 4 D1, pin 5 D0, pin 8 Common; pin 7 is vendor peripheral power" adapter = "Isolated USB-to-RS-485 adapter" cable = "VW3A8306D30 RJ45-to-stripped Modbus lead or equivalently pinned shielded twisted-pair cable" parts = ["Isolated USB-to-RS-485 adapter", "Shielded twisted pair plus common conductor", "End termination for a multidrop bus"] steps = ["Lock out the equipment and verify it is de-energized.", "Locate Built-in Modbus RJ45.", "Wire D1, D0 and Common exactly as shown below; leave the peripheral-power pin unused.", "Route the communications cable at least 30 cm from power conductors and terminate only the two physical ends.", "Restore control power with the motor inhibited and verify a read before enabling control."] setup = ["Set Add @6001 to 1..247 (factory broadcast address 0 does not answer).", "Set Fr1 = Modbus and CHCF = SIM, or Cd1 = Modbus in separate mode.", "Match 19200, 8-E-1 and configure ttO."] warnings = ["Do not connect adapter power to the vendor peripheral-power pin.", "Connect only the documented data and Common conductors."] source = "Schneider NHA80939 (07/2015), pp. 47-49, 55-57 and 104-114." [[connection.methods.wiring]] adapter = "D1 / B / +" device = "RJ45 pin 4 — D1" signal = "RS-485 D1" [[connection.methods.wiring]] adapter = "D0 / A / -" device = "RJ45 pin 5 — D0" signal = "RS-485 D0" [[connection.methods.wiring]] adapter = "COM / signal common" device = "RJ45 pin 8 — Common" signal = "Signal reference"