# Property of PMA Electrical Solutions, LLC. # # WEG CFW500 G1 frequency inverter over Modbus RTU on the RS-485 serial # interface. This file does not claim CFW500 G2. The CFW501 (HVAC) ships a separate # Modbus manual (10002041185) and is NOT claimed here. # # RS-485 comes from the plug-in module, not the drive body: the standard # CFW500-IOS carries it, as do CFW500-CRS485-B, -CUSB and -CRS232. Which # module is fitted reads back in P0027. # # Sources โ€” WEG "Modbus RTU CFW500 User's Manual" 10002253377 / 03 (03/2022): # P0308/P0310/P0311/P0312/P0313/P0314 serial setup ...... pp. 11-15 # P0680 status word, Table 3.4 .......................... pp. 16-17 # P0682 control word, Table 3.5 ......................... pp. 18-19 # P0683 13-bit speed reference .......................... p. 19 # Memory map (parameter number == register number), 5.2 . p. 25 # A128/F228 serial timeout .............................. p. 31 # and WEG "CFW500 Programming Manual" 10006739425 (firmware V4.1X): # P0001-P0049 reading parameters ........................ pp. 19-1 to 19-6 # Fault/alarm table ..................................... pp. 0-28 to 0-32 # P0220-P0228 command source ............................ pp. 7-5 to 7-8 # P0295 inverter rated current .......................... p. 6-2 # # Drive-side setup: P0312 = 2 (Modbus RTU on the standard interface), # P0308 node address, P0310 baud, P0311 byte format, then # P0220 = 1 (Always Remote), P0222 = 9 (reference Serial/USB), # P0226 = 5 (direction Serial/USB), P0227 = 2 (run/stop Serial/USB). # Without those four the drive ACKs the control word and ignores it. # # Addressing: the parameter number IS the 0-based register number # (P0005 -> 5, P0682 -> 682). Manual ยง5.2 notes masters that use 4x base # addressing will show these as 40006 / 40683 โ€” this profile is 0-based. name = "WEG CFW500 G1" vendor = "WEG" device_type = "vfd" verified = false probe_register = 680 [connection] summary = "For the documented G1 path, use the Serial (1) RS-485 terminals on a fitted CFW500 plug-in; the standard CFW500-IOS pinout is shown here." warnings = ["Isolate and discharge the drive before changing a plug-in module.", "Additional CUSB/CRS232/second-RS485 connectors require a different P312 interface selection; this guide does not guess those setup values."] [[connection.methods]] id = "cfw500_ios_rs485" title = "CFW500-IOS Serial (1) RS-485" transport = "serial" hardware = "option" port = "CFW500-IOS terminals 14 A-Line(-), 16 B-Line(+), 18 GND" connector = "Plug-in module control terminals" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded twisted-pair RS-485 cable with optional reference" parts = ["CFW500-IOS or another plug-in exposing the documented Serial (1) interface", "Small insulated screwdriver", "Endpoint termination per plug-in installation guide"] wiring = [{ adapter = "D- / A-", device = "14, A-Line (-)", signal = "RS-485 negative" }, { adapter = "D+ / B+", device = "16, B-Line (+)", signal = "RS-485 positive" }, { adapter = "COM/GND", device = "18, GND", signal = "0 V reference", required = false }] steps = ["Isolate the drive and verify which plug-in is fitted using its label or P0027.", "On CFW500-IOS, wire negative to 14 and positive to 16; use 18 only for the optional reference.", "Set termination only if this drive is at a physical bus end and route the cable away from power conductors.", "Close the drive, restore power, and select the isolated computer adapter."] setup = ["Set P0312 = 2 Modbus RTU on the standard interface, then configure P0308/P0310/P0311.", "Set P0220 = 1, P0222 = 9, P0226 = 5, and P0227 = 2 for serial control; commission P0313/P0314."] warnings = ["Only one serial interface can own commands/references.", "Do not use this G1 profile for CFW500 G2."] source = "WEG 10002253377/03, pp. 7-10 and 11-19" # P0310 default 1 = 19200, P0311 default 1 = 8 data bits / even parity / 1 stop. [serial] baudrate = 19200 parity = "E" stopbits = 1 [monitor] status_word = { address = 680, bits = { 0 = "STO", 4 = "QuickStopActive", 5 = "SecondRamp", 6 = "ConfigMode", 7 = "Alarm", 8 = "MotorRunning", 9 = "GeneralEnable", 10 = "Forward", 11 = "JOG", 12 = "Remote", 13 = "Undervoltage", 14 = "PID_Auto", 15 = "Fault" } } output_frequency = { address = 5, scale = 0.1, unit = "Hz" } # P0005 motor_current = { address = 3, scale = 0.1, unit = "A" } # P0003 dc_bus_voltage = { address = 4, unit = "V" } # P0004 output_voltage = { address = 7, unit = "V" } # P0007 motor_torque = { address = 9, signed = true, scale = 0.1, unit = "%" } # P0009 output_power = { address = 10, scale = 0.1, unit = "kW" } # P0010 module_temperature = { address = 30, signed = true, unit = "C" } # P0030 motor_overload_ixt = { address = 37, unit = "%" } # P0037 inverter_status = { address = 6 } # P0006, 0=Ready 1=Run 2=Undervolt 3=Fault 7=STO present_alarm = { address = 48 } # P0048 control_word = { address = 682 } # P0682, what we command # P0681/P0683 are 13-bit-plus-sign against the MOTOR RATED FREQUENCY P0403, # not against Hz: 8192 == P0403. Reported as percent of rated so the profile # does not bake in a 60 Hz motor. motor_speed = { address = 681, signed = true, scale = 0.01220703125, unit = "%" } speed_reference = { address = 683, signed = true, scale = 0.01220703125, unit = "%" } # P0682 bits: 0 Run/Stop, 1 General enable, 2 Direction (1 = follow the # reference sign), 3 JOG, 4 LOC/REM (1 = Remote), 5 Second ramp, # 6 Quick stop, 7 Fault reset. # This profile accepts only nonnegative references: direction is selected once, # by bit 2 in run_fwd/run_rev, avoiding a second inversion from a negative sign. [control] command_register = 682 speed_register = 683 speed_scale = 0.01220703125 # 8192 raw = 100% of P0403; 100/8192 speed_unit = "%" # NOT Hz โ€” percent of the motor rated frequency max_ref = 100.0 step_delay = 0.05 # 0x16 = general enable + forward + remote, run bit clear: ramp to stop. # Bit 2 only steers a running motor; with bit 0 clear the drive decelerates. stop = [0x0016] run_fwd = [0x0016, 0x0017] # enable and stage direction, then set Run run_rev = [0x0012, 0x0013] # bit 2 clear inverts the reference direction # Pulse reset only while explicitly holding the stopped remote command. reset = [0x0016, 0x0096, 0x0016] # P0314 serial watchdog DEFAULTS TO 0.0 (disabled), so a run command followed # by silence leaves the motor turning with no master attached. Set P0314 on # the drive and leave P0313 = 1 (stop via ramp) for the keepalive to mean # anything. [control.watchdog] interval_ms = 50 fault = "A128/F228 serial timeout (P0314, if configured)" backstop_requires_setup = true [running_check] register = 680 bit = 8 [direction_check] register = 680 bit = 10 reverse_when_set = false # P0049 present fault; P0050/P0060/P0070 are the last three. [faults] register = 49 history = [50, 60, 70, 80, 81, 82] [faults.codes] 0 = "No fault" 6 = "F0006 Line phase loss / supply unbalance" 21 = "F0021 Undervoltage on the DC link" 22 = "F0022 Overvoltage on the DC link" 31 = "F0031 Plug-in module communication fault" 33 = "F0033 Self-tuning fault (stator resistance P0409)" 48 = "F0048 IGBT overload" 51 = "F0051 IGBT overtemperature" 68 = "F0068 Motor overtemperature (dedicated PTC input)" 70 = "F0070 Overcurrent / short circuit" 72 = "F0072 Motor overload" 73 = "F0073 HSRM overcurrent / short circuit" 74 = "F0074 Ground fault" 76 = "F0076 Motor connection error / phase loss" 78 = "F0078 Motor overtemperature (PTC via AIx or DIx)" 79 = "F0079 Encoder signal fault" 80 = "F0080 CPU watchdog fault" 81 = "F0081 Firmware update failure" 83 = "F0083 Hardware identification failed" 84 = "F0084 Power hardware identification failed" 85 = "F0085 Plug-in module will not start" 86 = "F0086 Safety functions module identification failed" 87 = "F0087 Iu current offset fault" 88 = "F0088 Iv current offset fault" 89 = "F0089 Iw current offset fault" 91 = "F0091 External fault via DIx" 100 = "F0100 EEPROM fault" 101 = "F0101 DataFlash fault" 150 = "F0150 Motor overspeed" 151 = "F0151 Incompatible parameter version (MMF memory card)" 153 = "F0153 Internal overtemperature" 158 = "F0158 Main firmware version incompatible with plug-in" 160 = "F0160 Safety functions module in fault state" 161 = "F0161 Safety functions module communication fault" 162 = "F0162 Hardware incompatibility (STO module on a 600 V drive)" 169 = "F0169 Speed error too high" 179 = "F0179 Internal fan low speed" 182 = "F0182 Pulse feedback fault" 228 = "F0228 Serial telegram reception timeout" 233 = "F0233 No supply on the CAN interface" 234 = "F0234 CAN bus off" 235 = "F0235 CANopen node guarding / heartbeat" 236 = "F0236 DeviceNet master idle" 237 = "F0237 DeviceNet connection timeout" 238 = "F0238 Profibus DP interface in clear mode" 239 = "F0239 Profibus DP interface offline" 240 = "F0240 Profibus DP module access fault" 247 = "F0247 EtherNet/IP offline" 248 = "F0248 Ethernet interface access error" 249 = "F0249 Ethernet offline / Modbus TCP timeout" 700 = "F0700 Remote HMI communication fault" 709 = "F0709 SoftPLC application stopped" 710 = "F0710 SoftPLC application too large" 711 = "F0711 SoftPLC user program fault" 712 = "F0712 SoftPLC illegal download" 761 = "F0761 Internal PID process variable low" 763 = "F0763 Internal PID process variable high" 767 = "F0767 Dry pump detected" 769 = "F0769 Broken belt detected" 771 = "F0771 Filter maintenance" 787 = "F0787 External PID process variable low" 789 = "F0789 External PID process variable high" # The drive knows its own rated current. Compare before restoring a clone. [rating] register = 295 scale = 0.1 unit = "A" label = "Inverter rated current (P0295)" # Clone ranges are deliberately omitted. Broad parameter ranges include action # commands such as oriented start-up (P0317), plug-in upload (P0318), HMI copy # (P0319), and self-tuning (P0408); restoring those can move or retune a motor. # Add only an individually audited allowlist when the profile format supports it.