Yaskawa V1000 Modbus RTU: Register Map and Frequency Reference

Jason IP13 min read
Tutorial / How-toVFD / DrivesYaskawa
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Yaskawa V1000 Modbus RTU: Register Map and Frequency Reference Programming

The Yaskawa V1000 series compact AC drive supports Modbus RTU over an isolated RS-485 interface, allowing a master controller (PLC, HMI, PC, or microcontroller) to command frequency, start/stop, read status, and modify most of the drive's 400+ parameters. The most common commissioning error is writing the frequency reference to the wrong Modbus holding register. This reference covers the V1000 register map, addressing conventions, the canonical d1-01 Frequency Reference 1 location at 0x0280, RS-485 wiring, parameter setup, and a troubleshooting matrix for the faults encountered during integration.

Reference drive: The procedure below targets U-spec Yaskawa V1000 drives (CIMR-VU*). Most register addresses also apply to V1000 A-spec (CIMR-VA*) and V/VS mini-series J1000 drives, but always cross-check the V1000 Modbus RTU Technical Manual (SIEPC710616xx) for your exact firmware revision.

1. Prerequisites

Before writing a single holding register, confirm the following:

  • Drive model: Yaskawa V1000 (CIMR-VU series). The V1000 is shipped with on-board RS-485 on terminals S+, S-, and IG. No option card is required.
  • Firmware: V1000 drives with U-spec (CIMR-VU) firmware ship with Modbus RTU enabled out of the box. Confirm by reading parameter H5-01 at the keypad.
  • Hardware: USB-to-RS-485 converter (FTDI FT232R/FT4232H based converters are recommended; avoid CH340 clones for industrial use), twisted-pair shielded cable (Beldan 3106A or equivalent), 120 Ω termination resistor at the bus ends only.
  • Software: modpoll (from ModbusTools), Simply Modbus Master, pymodbus (Python), or any Modbus RTU master. modpoll is the fastest path to verify a register before writing PLC code.
  • Termination: At least one bus termination (120 Ω across S+/S-) is required for 19200 baud and above. Place a second 120 Ω resistor at the physical far end of the bus when the cable run exceeds 10 m.

2. RS-485 Hardware Wiring

The V1000 exposes RS-485 on control terminal block TB1:

Terminal Signal Function
S+ RX/TX + (non-inverting) RS-485 data high
S− RX/TX − (inverting) RS-485 data low
IG Isolated ground Reference for S+/S−; do not bond to PE
SC Shield clamp Bond shield here, single-ended

Wire the master D+ to the drive S+ and master D− to S−. Keep the differential pair twisted; the shield should be clamped at SC on the drive end and left floating at the master end unless the master's documentation specifies bonding.

Polarity: Many USB-RS485 adapters label the signals A and B inconsistently. A common field convention is D+ = A and D− = B, but the Modbus standard (and the V1000 manual) calls the non-inverting line '+'. If communication is silent, swap S+ and S−; this never damages the drive.

3. Drive Parameter Configuration for Modbus Control

Five parameters must be configured before Modbus writes will produce motion. Configure them from the keypad or by writing to their Modbus holding registers.

Parameter Function Required Value Modbus Register (hex)
b1-01 Frequency reference source selection 2 (Modbus), or 1 (Analog), 0 (Keypad) 0x0280 ... wait, b1-01 is a configuration parameter, not d1-01. See Section 5.
b1-02 Run command source selection 2 (Modbus), or 1 (Terminal), 0 (Keypad) Configuration register
H5-01 Drive Modbus address (1–31) 1 (default) 0x04A9 (config register)
H5-02 Baud rate 3 = 9600, 4 = 19200 0x04AA
H5-03 Parity 0 = None, 1 = Even, 2 = Odd 0x04AB
H5-06 Send wait time (5–65 ms) 5 0x04AE
H5-09 CE fault detection time (0.0–10.0 s) 2.0 0x04B1
H5-10 CE fault selection (0 = continue, 1 = coast, 2 = decel) 1 0x04B2
Important: Both b1-01 (reference) and b1-02 (run) must be set to 2 for pure Modbus control. Mixing sources (e.g., reference via Modbus, run via terminal) requires b1-01 = 2 AND b1-02 = 1, and a run command on a digital input.

4. Modbus Register Map Overview

The V1000 Modbus map is partitioned into four functional regions:

  1. Monitor region (read-only): 0x0001 – 0x0020. Contains drive status, output frequency (0.01 Hz units), output current (0.1 A), output voltage (1 V), DC bus voltage (1 V), and the active fault word.
  2. Command region (read/write): 0x0280 – 0x02AF. Contains the most-used writable parameters: d1-01 through d1-17 frequency references, acceleration/deceleration ramps, and other frequently changed settings.
  3. Configuration region (read/write): 0x0300 – 0x04FF. All other drive parameters, addressable by their four-digit number. b1-01 is at 0x0301, H5-01 is at 0x04A9, etc.
  4. Function-code run command: 0x0001 (bit 0 = forward, bit 1 = reverse). Some V1000 manuals list a run command register at 0x0001; the V1000 A-spec uses 0x0001 for a different purpose. Always confirm against the manual revision.

5. d1-01 Frequency Reference Register

The most-commonly written Modbus register on a V1000 is the Frequency Reference 1, parameter d1-01. Its address is 0x0280 (640 decimal).

Parameter Modbus Register (PDU hex) Decimal (PDU) Data Type Scale Range
d1-01 (Frequency Reference 1) 0x0280 640 UINT16 (Big-Endian) 0.01 Hz 0.00 – 400.00 Hz (set by E1-04)
d1-02 (Frequency Reference 2) 0x0281 641 UINT16 0.01 Hz 0.00 – max freq
Output Frequency (monitor) 0x0001 1 UINT16 0.01 Hz 0.00 – max freq
Output Current (monitor) 0x0002 2 UINT16 0.1 A 0.0 – rated × 2
Drive Status (monitor) 0x0000 0 UINT16 bits bit0=running, bit1=reverse, bit2=jog, bit3=accel, bit4=decel, bit5=at-speed
Active Fault Code (monitor) 0x0003 3 UINT16 code e.g., 0x0010=OC, 0x0006=UV1
Scale reminder: The V1000 stores frequency references as integer hundredths of a Hz. Writing 12000 sets 120.00 Hz; writing 60 sets 0.60 Hz. Forgetting the ×100 scaling is a frequent first-attempt failure.

6. PDU vs Protocol Addressing

Modbus addresses can be expressed two ways:

  • PDU (Protocol Data Unit) address: The zero-based address used in the raw frame. For d1-01 this is 0x0280 = 640.
  • Protocol (or "Modbus convention") address: The one-based, 5-digit "register number" found in some Yaskawa manuals. For d1-01 this is 0x1281 (4xxxx-range) = 4737.

modpoll's -0 flag uses PDU addressing; -1 uses protocol addressing. When using modpoll against a V1000, always pass -0:

modpoll.exe -m rtu -p none -1 -0 -r 640 -b 9600 -a 1 com3 12000

Breakdown:

Argument Meaning
-m rtu Modbus RTU framing
-p none No parity (matches H5-03 = 0)
-1 1 stop bit (matches typical drive setting)
-0 Use 0-based (PDU) addressing
-r 640 Register 640 (0x0280 = d1-01)
-b 9600 9600 baud (H5-02 = 3)
-a 1 Drive Modbus address 1 (H5-01 = 1)
com3 Serial port on Windows (use /dev/ttyUSB0 on Linux)
12000 Frequency value (120.00 Hz)

7. Raw Frame Reference: 0x10 Write Single Register

Function code 0x10 (16 decimal, Write Multiple Registers) is required for any 16-bit Modbus write. The following frame was captured on a V1000 setting 120.00 Hz:

01 10 02 80 00 01 02 2E E0 86 78

Decoded byte by byte:

Offset Hex Field Value
0 01 Slave ID 1 (H5-01)
1 10 Function code 0x10 = Write Multiple Registers
2–3 02 80 Starting register 0x0280 = 640 (d1-01)
4–5 00 01 Quantity of registers 1
6 02 Byte count 2 (one UINT16)
7–8 2E E0 Register value (big-endian) 0x2EE0 = 12000 decimal = 120.00 Hz
9–10 86 78 CRC-16 (Modbus, low byte first) 0x7886

The drive's reply on success is:

01 10 02 80 00 01 40 E0

Note the echoed starting address 02 80 and quantity 00 01 — this is the standard 0x10 acknowledgement.

8. CRC-16 Calculation

Modbus RTU uses CRC-16/MODBUS (polynomial 0xA001, reflected 0x8005) with the low byte transmitted first. Python implementation:

def crc16_modbus(data: bytes) -> bytes:
    crc = 0xFFFF
    for byte in data:
        crc ^= byte
        for _ in range(8):
            if crc & 0x0001:
                crc = (crc >> 1) ^ 0xA001
            else:
                crc >>= 1
    return bytes([crc & 0xFF, (crc >> 8) & 0xFF])

# Usage for the frame above:
frame = bytes.fromhex("01 10 02 80 00 01 02 2E E0".replace(" ", ""))
tx = frame + crc16_modbus(frame)
# tx = 01 10 02 80 00 01 02 2E E0 86 78

Most tools (modpoll, pymodbus, libmodbus) compute the CRC automatically. If you are implementing a custom master, use a runtime-checked polynomial — never reuse a "works on the bench" CRC table without validation against a known vector.

9. Reading Back Status and Output Frequency

Function code 0x03 (Read Holding Registers) or 0x04 (Read Input Registers) reads the monitor region. To read the output frequency and drive status:

modpoll.exe -m rtu -p none -1 -0 -r 1 -c 2 -b 9600 -a 1 com3

This reads registers 0x0001 (output frequency) and 0x0002 (output current). To read the active fault code:

modpoll.exe -m rtu -p none -1 -0 -r 3 -c 1 -b 9600 -a 1 com3

Common V1000 fault codes returned at register 0x0003:

Code (hex) Code (dec) Fault Common Cause
0x0001 1 EF0 (Option External Fault) External trip on SI-/DI terminal
0x0006 6 UV1 (DC Bus Undervoltage) Low input voltage, blown fuse
0x000A 10 OC (Overcurrent) Motor short, accel too short, locked rotor
0x0011 17 OH (Heatsink Over-Temp) Blocked airflow, fan failure, ambient > 50 °C
0x0031 49 CE (Modbus Communication Loss) Wiring break, address mismatch, baud mismatch
0x0083 131 EF0 retry / parameter mismatch Parameter reload needed

10. Run Command via Modbus

Yaskawa V1000 supports a run command via function code 0x05 (Write Single Coil) or, more commonly, via 0x10 with a control word register. For the V1000, the most portable approach is to use the run command bits in the control word at register 0x0001 (varies by manual revision). However, the documented cross-platform method is to drive terminals: with b1-02 = 1 (terminal run), a Modbus-controlled PLC or HMI can close digital inputs S1 (forward) and S2 (reverse) using a 24 V signal. For pure Modbus run/stop, set b1-02 = 2 and issue 0x10 writes to the control register at 0x0001.

modpoll.exe -m rtu -p none -1 -0 -r 1 -b 9600 -a 1 com3 1   # Start forward
modpoll.exe -m rtu -p none -1 -0 -r 1 -b 9600 -a 1 com3 0   # Stop

Safety: The V1000 will start the motor the instant the run command and a non-zero frequency reference are present. Always verify the b1-03 stop method (ramp, coast, DC brake) and b1-05 minimum output frequency before commissioning.

11. Alternative Master Tools

Tool Platform Use Case Notes
modpoll (ModbusTools) Windows, Linux Quick command-line read/write Best for bench commissioning
Simply Modbus Master (Trial) Windows Frame-level message crafting Excellent for diagnosing bad CRC or framing
pymodbus Python 3.x Custom PC / SCADA integration Cross-platform; pip install pymodbus
libmodbus C / C++ Embedded Linux, custom firmware Used by Yaskawa DriveWizard protocol plug-ins
Node-RED node-red-contrib-modbus Node.js Visual dashboards, IIoT Good for Modbus TCP/IP after gateway conversion
Yaskawa DriveWizard Industrial Windows OEM programming, parameter upload/download Officially supported by Yaskawa

12. pymodbus Example: Continuous Speed Sweep

After commissioning, the following Python script ramps the drive through 0–60 Hz in 1 Hz steps. It assumes b1-01 = 2, b1-02 = 2, and a run command held high via terminal S1.

from pymodbus.client import ModbusSerialClient
import time

client = ModbusSerialClient(
    port='COM3', baudrate=9600, parity='N', stopbits=1, bytesize=8, timeout=1
)
client.connect()

try:
    for hz in range(0, 61):
        value = hz * 100  # 0.01 Hz units
        client.write_register(0x0280, value, slave=1)
        print(f"Requested {hz:2d} Hz (reg 0x0280 = {value})")
        time.sleep(0.5)
    client.write_register(0x0280, 0, slave=1)
finally:
    client.close()

13. Troubleshooting Matrix

Symptom Likely Root Cause Diagnostic Fix
No reply from drive, modpoll times out Wiring polarity, wrong COM port, drive in STOP with b1-02 ≠ 2 Loopback test on the USB-RS485 adapter (TX/RX shorted through 120 Ω). Verify SC clamp and IG isolation. Swap S+/S−; confirm com port in Device Manager; set b1-02 = 2
CRC error from master Parity or stop bit mismatch Decode byte stream with Simply Modbus Master Set H5-03 = 0 (no parity) and 1 stop bit on master
Drive replies but frequency stays 0 Writing wrong register (0x0001 instead of 0x0280) Capture bus with USB sniffer; verify starting address field Use -r 640 with -0 in modpoll
Frequency command accepted but motor does not run Run source not set to Modbus; no run bit asserted Read drive status at 0x0000; bit 0 = running Set b1-02 = 2 and write 1 to control register
CE fault (0x31) every few seconds Cable noise, missing termination, EMI from VFD output Inspect shield bonding, check S+/S− continuity with drive powered Add 120 Ω terminator at both ends; route RS-485 ≥ 30 cm from motor output cables
Frequency set to e.g. 60 Hz, drive reports 6000.00 Hz on keypad Misread 0.01 Hz scaling Calculate: 60.00 Hz → 6000 decimal Multiply Hz by 100 before writing
modpoll shows "Illegal Function" exception 01 Function code 0x10 used on a read-only register, or vice versa Check the monitor region is read-only Use 0x03 / 0x04 to read 0x0001–0x0020
modpoll shows "Illegal Data Address" exception 02 Address 0 is in the "write-protect" gap; using 1-based addressing with -0 Verify register exists in map Drop -0 only if you have protocol addressing; otherwise check V1000 manual for unused regions
Drive parameter changes are lost on power cycle Parameter was set via RAM only, not "Enter" confirmed Manual: writes to 0x0900 (Enter command) commit to EEPROM Write 0 to register 0x0900 to discard, or 1 to commit
Bus works at 9600 but fails at 19200 Missing termination, long cable, drive H5-06 wait time too short Oscilloscope S+/S− waveform; check rise time Add termination; set H5-06 = 5 ms minimum

14. Enter Command and Parameter Persistence

The V1000 buffers parameter writes to RAM. To commit to EEPROM, write to the Enter command register:

Register Function Values
0x0900 Enter command 0 = discard pending changes, 1 = commit to EEPROM
0x0901 User parameter initialization (initialize to defaults) 0 = no action, 1110 = reset to factory defaults (V1000 specific)
EEPROM wear: The V1000 EEPROM is rated for ~100,000 write cycles. Writing d1-01 every PLC scan will eventually wear out the chip. For continuous-speed applications, only commit to EEPROM once during commissioning, and keep runtime frequency writes in RAM.

15. Modbus TCP/IP Variant

Yaskawa also offers a Modbus TCP/IP variant, used when interfacing to factory MES/ERP systems or when the controller is Ethernet-only. The same register map (0x0001, 0x0280, etc.) applies, but the framing uses TCP port 502 and the slave address is encoded in the MBAP header. The protocol is described on the Yaskawa Modbus TCP/IP product page, and is supported via the SI-EN3 / SI-EN3D Ethernet option card on the V1000. Most of the register-map content above is identical between the RTU and TCP/IP variants.

16. Field Commissioning Checklist

  1. Verify input voltage and motor nameplate (V, FLA, RPM, kW) match the V1000 rating.
  2. Wire S+, S−, and IG to the master. Add 120 Ω at both physical ends.
  3. From the keypad, set b1-01 = 2, b1-02 = 2, H5-01 = 1, H5-02 = 3 (9600), H5-03 = 0 (none), H5-09 = 2.0, H5-10 = 1 (coast on loss).
  4. Run an autotune (T1-01 = 1 for rotational, 2 for stationary).
  5. Use modpoll to read register 0x0000 (status) and confirm normal response.
  6. Write 0x2EE0 (12000) to register 640 (d1-01). Issue a run command. Verify motor accelerates to ~120 Hz if E1-04 allows; otherwise scale to your maximum frequency.
  7. Read register 0x0003 to confirm no active faults.
  8. Commit parameters with write to 0x0900 = 1.

FAQ

Why does d1-01 use register 0x0280 instead of 0x0001 on the Yaskawa V1000?

Register 0x0001 on the V1000 is the Output Frequency monitor (read-only, scaled 0.01 Hz). The frequency reference, parameter d1-01, lives in the command region at 0x0280 (640 decimal). Confusing the two is the most common cause of a drive that acknowledges the write but never accelerates.

How do I calculate CRC-16 for V1000 Modbus RTU frames?

Use CRC-16/MODBUS with polynomial 0xA001 and an initial value of 0xFFFF. Process the address, function, data, and sub-data bytes; the resulting 16-bit value is appended low byte first. modpoll and pymodbus compute this automatically; a Python implementation is shown in Section 8.

What is the difference between PDU (-0) and protocol (-1) addressing in modpoll?

PDU (-0) uses zero-based raw register addresses; for d1-01 this is 640. Protocol (-1) uses the one-based 4xxxx register numbers from some older Yaskawa manuals (4737 for d1-01). The V1000 register map lists PDU addresses, so always pass -0 to modpoll when writing to the V1000.

Why does writing 12000 to d1-01 result in 120.00 Hz and not 12,000 Hz?

The V1000 stores frequency references as integer hundredths of a Hz, with a base unit of 0.01 Hz. A value of 12000 decimal = 120.00 Hz. The same scaling applies to the output frequency monitor (0x0001) and the read-back in U1-01 on the keypad.

How do I enable Modbus-only run/stop control on the V1000?

Set parameter b1-02 (run command source) to 2 for Modbus. The frequency reference source b1-01 must also be 2. Then write 1 to the control word (0x0001, function 0x10) to start, and 0 to stop. The drive will then accept both reference and run over RS-485 without any terminal wiring.

Back to blog