Logo OMNJI
OMNJI

Panduan Lengkap Kontrol Servo Dorna: Wiring RS485, Setting Parameter, dan Script Python

 


Karena Anda menggunakan USB to RS485 Converter (tanpa Arduino), Anda akan mengontrol driver Dorna (seri EPS-B1/M1/EB) menggunakan protokol Modbus RTU langsung dari Python.

Ini adalah metode standar industri. Komputer Anda bertindak sebagai "PLC" atau Master, dan driver servo adalah Slave.

1. Wiring (Pengkabelan)

Hubungkan konverter USB-RS485 Anda ke port komunikasi driver (biasanya CN3 atau terminal block RS485).
  • Converter A+ (D+) ke Driver RS485+ (A)
  • Converter B- (D-) ke Driver RS485- (B)
  • GND ke GND (Wajib disambung agar sinyal stabil & tidak noise)

2. Setting Parameter Driver (Wajib)

Sebelum menjalankan Python, Anda harus mengatur parameter di panel driver agar bisa "mendengar" perintah dari komputer. (Nomor parameter bisa sedikit berbeda tergantung seri, cek manual Anda):
ParameterFungsiValueKeterangan
PA072Station ID1Alamat ID Servo (Harus sama dengan di Python)
PA073Baud Rate29600 bps (Default standar)
PA074Comm Protocol08 Data bits, No Parity, 2 Stop bits (8N2)
PA004Control Mode1Set ke Speed Control atau Internal Position (agar bisa gerak via software)

3. Script Python (Modbus RTU)

Kita gunakan library minimalmodbus. Install dulu:
pip install minimalmodbus serial
Berikut adalah script lengkap untuk Enable Servo, Cek Posisi, dan Kirim Speed:
import minimalmodbus
import serial
import time

# --- KONFIGURASI ---
PORT_NAME = 'COM3'   # Windows: 'COM3', Linux/Mac: '/dev/ttyUSB0'
SLAVE_ID = 1         # Sesuai PA072
BAUDRATE = 9600      # Sesuai PA073

# --- SETUP INSTRUMENT ---
driver = minimalmodbus.Instrument(PORT_NAME, SLAVE_ID)
driver.serial.baudrate = BAUDRATE
driver.serial.bytesize = 8
driver.serial.parity   = serial.PARITY_NONE
driver.serial.stopbits = 2
driver.serial.timeout  = 0.2
driver.mode = minimalmodbus.MODE_RTU
driver.clear_buffers_before_each_transaction = True

def read_parameter(param_num):
    """
    Membaca Parameter PAxxx.
    Pada Dorna, alamat Modbus biasanya = Nomor Parameter.
    Contoh: PA004 (Control Mode) -> Address 4.
    """
    try:
        # functioncode=3 untuk Read Holding Register
        val = driver.read_register(param_num, 0, functioncode=3)
        return val
    except IOError:
        return None

def write_speed(speed_rpm):
    """
    Menulis ke Register Kecepatan Internal.
    Cek manual: Biasanya PA300-an adalah 'Internal Speed'.
    Contoh asumsi: PA301 adalah Target Speed 1.
    """
    try:
        # Address 301 desimal = PA301
        driver.write_register(301, speed_rpm, functioncode=6)
        print(f"Speed set to {speed_rpm} RPM")
    except IOError:
        print("Gagal kirim speed")

def servo_enable(state):
    """
    Enable/Disable Servo (SON).
    PERHATIAN: Alamat ini BEDA tiap firmware. 
    Cari 'Communication Control Word' di manual.
    Seringkali di address 0x0100, 0x2000, atau via mapping Virtual Input.
    """
    # Contoh umum untuk drive Asia: Write 1 ke Address Control
    # Jika gagal, Anda harus mapping 'Virtual DI' (PA5xx) ke fungsi 'Servo On'.
    try:
        val = 1 if state else 0
        # Ganti 0x0100 dengan alamat Control Word manual Anda
        driver.write_register(0x0100, val, functioncode=6) 
        print(f"Servo State: {'ON' if state else 'OFF'}")
    except IOError:
        print("Gagal set enable")

# --- MAIN LOOP ---
try:
    print(f"Connecting to Dorna Servo ID {SLAVE_ID}...")
    
    # 1. Tes Koneksi: Baca Control Mode (PA004)
    mode = read_parameter(4) 
    if mode is not None:
        print(f"Koneksi SUKSES! Control Mode (PA004): {mode}")
    else:
        print("Koneksi GAGAL. Cek wiring A/B terbalik atau Baudrate salah.")
        exit()

    # 2. Main Loop Monitor Posisi
    while True:
        # Baca Posisi Motor (Absolute Position sering di PA010 / PA011)
        # Ingat: Posisi adalah 32-bit (2 register: High & Low)
        # Ini contoh baca Low Word saja (Address 11 contohnya)
        pos = read_parameter(11) 
        print(f"Posisi Motor: {pos} pulses")
        
        # Uncomment baris bawah jika sudah tahu register enable yang benar
        # write_speed(100) 
        
        time.sleep(0.5)

except KeyboardInterrupt:
    print("Berhenti.")
except Exception as e:
    print(f"Error: {e}")

Kunci Sukses untuk Dorna

  1. Peta Register (Address Map):
    Di manual Dorna, cari tabel di bagian belakang berjudul "Communication Address".
    • Biasanya: Address Register = Nomor Parameter (PA).
    • Contoh: Jika ingin ubah Speed di PA301, tulis ke address 301 (desimal).
  2. Enable Servo (SON):
    Mengaktifkan servo via Modbus seringkali tricky. Cara termudah adalah Mapping Virtual Input:
    • Set salah satu input digital virtual (misal PA501) menjadi fungsi "Servo On".
    • Lalu tulis nilai 1 ke register PA501 tersebut via Python.
  3. Latency: Modbus via USB tidak secepat pulsa (Pulse/Direction). Gunakan mode ini untuk aplikasi Point-to-Point (pindah A ke B), bukan untuk Contouring (seperti CNC ukir).

Komentar