# Property of PMA Electrical Solutions, LLC. # # WEG CFW900 standard RS-485 interface, Modbus RTU. # Sources: # - WEG CFW900 Modbus RTU User's Guide 10009145407/02, V1.02 (10/2024), # pp. 13-23, 27-33 and quick-reference pp. 49-54: Net IDs, serial defaults, # S5.1/S5.2 status/control and timeout configuration. # - WEG CFW900 Programming Manual 10008985492/11, V1.10.XX (08/2025), # pp. 0-1..0-44: exact-family alarms/faults. # Drive setup: select RS-485 as the Remote 1 (R1) command and reference sources # in C4. The words below keep S5.2 bit 4 clear, explicitly selecting R1; they # must not be used with an installation commissioned for Remote 2. C9.3.5 # timeout defaults disabled and its action must be commissioned in C9.1.1. name = "WEG CFW900" vendor = "WEG" device_type = "vfd" verified = false probe_register = 680 [connection] summary = "Use the RS-485 interface built into the standard CFW900-IOS accessory in slot X." warnings = ["Isolate and discharge the drive before accessing slot X or its terminals.", "The CFW900 manual calls the IOS accessory standard, but the network still terminates on that removable hardware."] [[connection.methods]] id = "ios_rs485" title = "CFW900-IOS RS-485" transport = "serial" hardware = "built_in" port = "IOS connector B(+), A(-), C (isolated 0 V reference)" connector = "Standard IOS accessory terminal connector in slot X" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded industrial RS-485 twisted pair, 24 AWG minimum, optional reference conductor" parts = ["120 ohm 0.25 W end termination", "Small insulated screwdriver"] wiring = [{ adapter = "D+ / B+", device = "B (+)", signal = "RS-485 positive" }, { adapter = "D- / A-", device = "A (-)", signal = "RS-485 negative" }, { adapter = "COM/GND", device = "C", signal = "Isolated 0 V reference", required = false }] steps = ["Isolate the drive and locate the standard IOS accessory in slot X.", "Land positive on B(+), negative on A(-), and optional reference on C.", "Install 120 ohm termination only when this is a physical bus end and route the shielded cable away from power wiring.", "Close the drive, restore power, and select the serial adapter."] setup = ["Configure C9 RS-485 address, baud, framing, and timeout settings.", "Select RS-485 as the Remote 1 command/reference source in C4 and commission C9.3.5/C9.1.1 timeout action."] warnings = ["This profile's control word selects Remote 1, not Remote 2."] source = "WEG 10009145407/02, pp. 10-13, 13-23, and 49-54" [serial] baudrate = 19200 parity = "E" stopbits = 1 [monitor] status_word = { address = 680, bits = { 0 = "STO", 1 = "RunCommand", 2 = "Local", 4 = "NoQuickStop", 5 = "SecondRamp", 6 = "ConfigMode", 7 = "Alarm", 8 = "MotorRunning", 9 = "GeneralEnable", 10 = "Reverse", 11 = "JOG", 12 = "Remote2", 13 = "Undervoltage", 15 = "Fault" } } output_frequency = { address = 5, scale = 0.1, unit = "Hz" } motor_current = { address = 3, scale = 0.1, unit = "A" } dc_bus_voltage = { address = 4, unit = "V" } output_voltage = { address = 7, unit = "V" } motor_torque = { address = 9, signed = true, scale = 0.1, unit = "%" } motor_speed = { address = 681, signed = true, scale = 0.01, unit = "%" } [control] command_register = 682 speed_register = 683 speed_scale = 0.01 speed_unit = "%" max_ref = 200.0 step_delay = 0.05 stop = [0x0042] run_fwd = [0x0042, 0x0043] run_rev = [0x0046, 0x0047] reset = [0x0042, 0x00C2, 0x0042] [control.watchdog] interval_ms = 50 fault = "RS-485 timeout (C9.3.5 and C9.1.1 require setup)" backstop_requires_setup = true [running_check] register = 680 bit = 8 [direction_check] register = 680 bit = 10 reverse_when_set = true [faults] register = 60 history = [4100, 4104, 4108, 4112, 4116, 4120, 4124, 4128, 4132, 4136] [faults.codes] 0 = "No fault" 6 = "F006 line phase loss / supply unbalance" 21 = "F021 DC-link undervoltage" 22 = "F022 DC-link overvoltage" 25 = "F025 braking resistor overload" 30 = "F030 power-module fault" 34 = "F034 DC-link contactor fault" 38 = "F038 gate-driver supply fault" 42 = "F042 control-board fault" 48 = "F048 IGBT overload" 53 = "F053 IGBT overtemperature" 54 = "F054 rectifier overtemperature" 55 = "F055 internal-air overtemperature" 61 = "F061 motor locked" 67 = "F067 inverted encoder/motor wiring" 69 = "F069 current measurement fault" 70 = "F070 overcurrent or short circuit" 71 = "F071 output overcurrent" 72 = "F072 motor overload" 73 = "F073 IGBT overload" 74 = "F074 ground fault" 76 = "F076 motor phase loss" 77 = "F077 current imbalance" 78 = "F078 motor overtemperature" 84 = "F084 auto-diagnosis fault" 91 = "F091 external fault" 99 = "F099 invalid current offset" 104 = "F104 control supply fault" 150 = "F150 motor overspeed" 153 = "F153 internal-air overtemperature" 155 = "F155 power-stack overtemperature" 157 = "F157 parameter-table data loss" 158 = "F158 parameter-table fault" 160 = "F160 STO relay fault" 161 = "F161 functional-safety communication fault" 165 = "F165 encoder fault" 167 = "F167 speed feedback fault" 169 = "F169 speed error too high" 171 = "F171 encoder position fault" 172 = "F172 encoder supply fault" 173 = "F173 encoder communication fault" 174 = "F174 encoder initialization fault" 175 = "F175 encoder mismatch" 176 = "F176 encoder data fault" 185 = "F185 pre-charge contactor fault" 228 = "F228 RS-485 timeout" 229 = "F229 serial interface fault" 230 = "F230 USB communication fault" 233 = "F233 CAN interface without power" 234 = "F234 CAN bus off" 235 = "F235 CANopen communication fault" 236 = "F236 DeviceNet master idle" 237 = "F237 DeviceNet timeout" 247 = "F247 EtherNet/IP offline" 249 = "F249 Modbus TCP timeout" 431 = "F431 safety board mismatch" 433 = "F433 functional-safety fault" 600 = "F600 power-unit communication fault" 605 = "F605 power-unit fault" 606 = "F606 power-unit overtemperature" 607 = "F607 power-unit overload" 608 = "F608 power-unit DC-link fault" 609 = "F609 power-unit phase fault" 709 = "F709 SoftPLC application stopped" # F1000+ includes option-, slot-, and application-dependent fault families; # their meanings depend on the installed CFW900 hardware and are not fixed. [rating] register = 1295 scale = 0.1 unit = "A" label = "Inverter rated current (S1.3.5)"