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):
| Parameter | Fungsi | Value | Keterangan |
|---|
| PA072 | Station ID | 1 | Alamat ID Servo (Harus sama dengan di Python) |
| PA073 | Baud Rate | 2 | 9600 bps (Default standar) |
| PA074 | Comm Protocol | 0 | 8 Data bits, No Parity, 2 Stop bits (8N2) |
| PA004 | Control Mode | 1 | Set 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
- 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).
- 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.
- 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).