Setelah beberapa kali membahas mengenai cara akses perangkat sensor ber-protokol Modbus RTU, maka kali ini akan dipraktekkan bagaimana cara mengontrol relay yang modulnya banyak beredar di marketplace yaitu bertipe 485 relay 2 ch / 4 ch / 8 ch V1.1 . Modul ini banyak dibahas di berbagai blog, bagaimana secara gamblang sekali mengirim datanya menggunakan arduino, dimana kebanyakan menggunakan perintah serial langsung jadi (berupa sequence modbus) beserta dengan ceksum CRC mod16 di belakangnya.
Sebelumnya bisa dibaca seri tulisan mengenai modbus disini dan praktek pzem disini.
Namun seperti biasa bukan blog aisi555 kalau hanya berbagi script langsung pakai tanpa membuat bingung pembaca. Eeiittt....kali ini gampang kok, cukup sediakan modul relay nya seperti diatas beserta power suply 12 volt dan jangan sampai ketinggalan perangkat USB to RS485 yang akan menghubungkan PC ke perangkat relay secara RS485. Setelah menghubungkan 2 kabel A+ dan B- antara USB to RS485 vs Modul Relay, maka dari berbagai sumber di internet ( disini dan disini ) saya pilihkan beberapa perintah serial siap pakai yg bisa dicoba melalui terminal/putty/realterm. Ingat bahwa perangkat yang baru datang secara default /awal memiliki address 1 dengan BaudRate 9600.
Cara Mengetahui Address :
00 03 00 00 00 01 85 DB
Return:
00 03 02 00 01 44 44 ==> 01 itu address (warna merah)
Kita asumsikan address dari modul adalah 01 ( 1 byte paling depan adalah address)
Relay 0 ON : 01 05 00 00 FF 00 8C 3A
Relay 0 OFF: 01 05 00 00 00 00 CD CA
Relay 1 ON : 01 05 00 01 FF 00 DD FA
Relay 1 OFF: 01 05 00 01 00 00 9C 0A
Relay 2 ON : 01 05 00 02 FF 00 2D FA
Relay 2 OFF : 01 05 00 02 00 00 6C 0A
Relay 3 ON : 01 05 00 03 FF 00 7C 3A
Relay 3 OFF : 01 05 00 03 00 00 3D CA
*) Warna orange / 2 byte di belakang adalah CRC Modbus 16
Saya sih lebih senang menggunakan Real Term sebagai serial terminal untuk mengetestnya seperti yang saya lakukan sebelumnya ( klik disini untuk mengetahui seting nya) , dan hasil capture saya dibawah ini :
CRC Modbus 16 di bagian belakang (2 byte terakhir) dapat di masukkan langsung atau membiarkannya dibuatkan langsung oleh RealTerm. Jangan lupa menambahkan 0x sebelum hexanya agar tidak terjadi error (khusus realterm)
Perintah lainnya yang mungkin berguna :
SEMUA ON : 01 0F 00 00 00 08 01 FF BE D5
SEMUA OFF : 01 0F 00 00 00 08 01 00 FE 95
Membalik posisi relay / Flip / Toggle
Relay 0 Flip / Toggle : 01 05 00 00 55 00 F2 9A
Relay 1 Flip / Toggle : 01 05 00 01 55 00 A3 5A
Relay 2 Flip / Toggle : 01 05 00 02 55 00 53 5A
Relay 3 Flip / Toggle : 01 05 00 03 55 00 02 9A
Merubah address (contoh dari 01 ke 09 ) : 01 10 00 00 00 01 02 00 09 66 56
Merubah address (contoh dari 09 ke 01 ) : 09 10 00 00 00 01 02 00 01 00 50
Lalu animasi paling atas gimana ya ? Saya gunakan python untuk merubah relay secara berurutan:
import serial
from time import sleep
ser = serial.Serial("COM25", baudrate=9600, timeout=3.0)
tog1 =b'\x01\x05\x00\x00\x55\x00\xF2\x9A'
tog2 =b'\x01\x05\x00\x01\x55\x00\xA3\x5A'
tog3 =b'\x01\x05\x00\x02\x55\x00\x53\x5A'
tog4 =b'\x01\x05\x00\x03\x55\x00\x02\x9A'
while (True):
print("Merubah relay secara berurutan ..")
ser.write(tog1)
sleep(0.5)
ser.write(tog2)
sleep(0.5)
ser.write(tog3)
sleep(0.5)
ser.write(tog4)
sleep(0.5)