Senin, 26 Februari 2018

arduino modbus RS232


experiment pada tanggal 26 februari 2018 kali ini membahas tentang modbus RTU pada arduino menggunakan port RS232.

RS232 adalah standard komunikasi serial yang digunakan untuk koneksi periperal ke periperal. Biasa juga disebut dengan jalur I/O ( input / output ). Contoh yang paling sering kita temui adalah koneksi antara komputer dengan modem, atau komputer dengan mouse bahkan bisa juga antara komputer dengan komputer, semua biasanya dihubungkan lewat jalur port serial RS232.

adapun bahan yg dibutuhkan:
1. arduino
2. ttl to rs232
3. kabel usb to rs232

berikut sambungangannya



upload sket dibawah ini:
// Include always this library when you are using Modbus functions
#include <ModbusSlave232.h>

// Create new mbs instance
ModbusSlave232 mbs;

// Slave registers
enum {       
  MB_0,   // Register 0
  MB_1,   // Register 1
  MB_2,   // Register 2
  MB_3,   // Register 3 
  MB_4,   // Register 4 
  MB_REGS // Dummy register. using 0 offset to keep size of array
};

int regs[MB_REGS];

void setup(){

  // Modbus slave configuration parameters
  // SlaveId
  const unsigned char SLAVE = 1;
  // Baud rate  
  const long BAUD = 9600;           
  const unsigned PARITY = 'n';

  // Configure msb with config settings
  mbs.configure(SLAVE, BAUD, PARITY );
  pinMode(13, OUTPUT);
  pinMode(10, INPUT_PULLUP);
  digitalWrite(13, LOW);

}

void loop()
{
  // Pass current register values to mbs
  mbs.update(regs, MB_REGS);

  // Read all the analog Inputs, and store the values in
  // the Modbus registers.  
  regs[MB_0] = analogRead(A0);  // Analog 0 value
  regs[MB_1] = analogRead(A1);  // Analog 1 value
  regs[MB_2] = analogRead(A3);  // Analog 2 value
  regs[MB_3] = digitalRead(10);  // digital input
  digitalWrite(13, regs[MB_4]); // digital output

 
}






oiya librarynya jngan lupa sebelum upload
modbus rs232

cek hasil project tadi pakai modscan
sesuaikan id, parity, baudrate di modscan
isi lenght sesuai yang dibuat di sketch
.

.
.
.
hasil percobaan :

RESEARCH & INOVATION


awal mula dari sebuah riset saya itu dari adanya permasalahan atau abnormal pada peralatan di tempat saya bekerja. mulai awal saya masuk di perusahaan ini saya sangat tertarik dengan bapak senior namanya Pak Rahman. Bapak ini selalu melakukan perbaikan dan riset.
pada waktu itusaya menikmati pekerjaan di bidang RTU hanya sebentar itu pun hanya waktu OJT. kemudian saya ditempatkan di bagian Dispatcer. dispatcer itu kerjanya hanya terima telp dan bicara di radio. saya merasakan selama 3 tahun di bagian ini. akhirnya ada lowongan di bagian SCADA. kemudian saya mengajukan pindah ke bagian tersebut.
waktu itu ada 2 pilihan di bagian SCADA(telkom atau RTU). akhirnya saya terdampar di bagian RTU - SCADA dari tahun 2012- sekarang.

berinovasi,
awal mula saya berinovasi itu bukan karena kehendak saya tapi karena sebuah ajakan dari atasan saya pada awal tahun 2012. saya pun nggak punya background berinovasi. pada waktu itu saya masih di bagian dispatcer. saya pun membuat alat inovasi yang konyol judulnya SIBIBI (pendetekSI BInatang dalam kuBIkel) sebuah alat yang mendeteksi hewan di dalam kubikel yang mengandalkan sensor PIR saja dan mengirim indikasi via sms . dan rencana itu menggunakan mikrokontroller starduino. meng googling trus akhirnya nemu si ARDUINO.

Arduino adalah pengendali mikro single-board yang bersifat open-source, diturunkan dari Wiring platform, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Hardwarenya memiliki prosesor Atmel AVR dan softwarenya memiliki bahasa pemrograman sendiri.

jaman dahulu belum mengenal arduino clone. beda sama jaman now banyak sekali versi clone. dan waktu itu beli versi original langsung dari famosastudio.com.

latar belakang saya hanya arus kuat. tidak ada basic arus lemah atau elektronika.sehingga ketika melakukan experiment selalu gak pakai teori tapi dari hasil praktek. menurut saya arduino itu mikrokontroller yang sangat mudah dipakai. belajar otodidak pun bisa.

inovasi tahun 2012 itu hanya sampai tingkat  unit saja (disjatim). akan tetapi arduino saya ternyata masih dipakai oleh tim lain (MONETA). Alhamdulillah saya di ikutkan tim itu sampai melaju Nasional meskipun jadi anggota pupuk bawang (tukang bawa bawa alat).
dari sinilah saya merasakan betapa wahh, seandainya bisa naik panggung menerima piala juara. pada waktu itu tim MOneta juara 3 di nasional. dari situ saya penasaran gimana ya rasanya lomba di depan juri dan juara naik panggung nerima piala??????

tahun 2013 saya mencoba ikut"an gabung di inovasi temen. saya kali ini tidak bikin alat hanya nummmpang saja. dan inovasinya pun hanya sampai unit saja. mencoba lagi di tahun 2014, tapi kali ini saya membuat alat yang berawal dari sebuah permasalahan di tempat kerja saya. yaitu RTU (remote terminal unit) mengalami hang, solusinya yaitu reset atau matikan power sebentar dengan bantuan operator GI. pada waktu itu ada beberapa GI tanpa operator. akhirnyya saya membuat alat reset RTU dari Master Station berbasis arduino dengan dikasih protokol MODBUS. dan alat saya bisa sampai ke nasional juara 3.

lanjut tahun 2015 membuat alat fingerprint sebagai keamanan ruang server SCADA. tahun ini saya kurang beruntung hanya sampai unit saja. coba lagi membuat alat di tahun 2016 yaitu DUMMY scada 20kv. alat ini hanya sampai tingkat regional.

lanjut 2017 saya membuat alat lagi berbasis arduino dengan protokol modbus tcp dan modbus rtu. yang saya namai SIMOR (simple module RTU). alat ini saya implementasikan di perusahaan sebagai modul IO sebuah RTU existing di tempat kerja saya. awal mulanya saya hanya bisa bikin modul IO yang protokolnya hanya modbus rtu port serial RS485. dan ketika maju regional di oprek trus akhirnya bisa bikin RTU sebagai gateway juga atau modbus master. dan alhamdulillah sampai nasional JUARA 3.

dari tahun ke tahun saya selalu menggunakan arduino dengan protocol modbus. dikarenakan software master station maupun RTU existing tempat kerja saya sudah support modbus. dan protokolnya free. cuma kelemahannya tidak mempunyai timestamp. dan tidak termasuk dalam SPLN.

Modbus adalah protokol komunikasi serial yang dipublikasikan oleh Modicon pada tahun 1979 untuk diaplikasikan ke dalam programmable logic controllers (PLCs). Modbus sudah menjadi standar protokol yang umum digunakan untuk menghubungkan peralatan elektronik industri.

dari beberapa kali inovasi, baru kali ini ada semua omongan dari seseorang, "BERHENTILAH BERINOVASI". 

apakah inovasi saya merugikan perusahaan???
 YA - karena alat saya menggunakan biaya dari perusahaan
TIDAK - karena alat saya sudah bisa menguntungkan bagi perusahaan, memudahkan bagi pegawai untuk bekerja dan meningkatkan penjualan KWH, selain itu juga mengharumkan nama unit saya bekerja.

omongan orang itu saya anggap sebuah angin yang baunya nggak enak yang lewat begitu saja (no kentut).  saya tetap melakukan riset dan inovasi.

Jumat, 23 Februari 2018

arduino uno (modbus master) vs sdm120 (modbus Slave)

kali ini experiment tentang kwh 1 phasa yang sudah ada modbusnya yaitu EASTRON type sdm120. kwh ini mempunyai port serial RS485 untuk komunikasi modbusnya.
berikut register addressnya:


untuk lengkapnya bisa download disini

pertama coba dulu sdm dengan software modscan. gunakan usb to rs485




wiring kwh seperti pada gambar di kwh tersebut.
colokkan tegangan 220 dan kasih beban lampu atau terserah.


berikut setting dafaultnya :


 untuk lengkapnya download dibawah ini:
download user manual SDM120 


kwh ini menggunakan function code 3 type datanya float.


setelah semua data yang dicek sudah sesuai, lanjutkan mapping data di arduino.
apa tujuan mapping di arduino????????
- untuk merubah dari modbus rtu ke modbus tcp.
- untuk monitor kwh jarak jauh
- untuk kendalikan koskosan...

untuk mengambil data ke arduino, yang dibutuhkan antara lain:
  • ethernet shield
  • arduino uno /mega
  • shield rs485/ rs485 to ttl


berikut sketch experiment saya mengambil data tegangan:
 /*
Online Power Monitoring
Author  : Fuad Hasan
Created : 10 April 2017
*/
#include <SPI.h>
#include <Ethernet.h>
#include "Mudbus.h"

#include <SimpleModbusMaster.h>
#include <avr/wdt.h>
#define baud 2400
#define timeout 2000
#define polling 200 // the scan rate
#define retry_count 100

// used to toggle the receive/transmit pin on the driver
#define TxEnablePin 2
// The total amount of available memory on the master to store data
#define TOTAL_NO_OF_REGISTERS 6


enum
{
  PACKET1,//device1
  //PACKET2,//device2
  TOTAL_NO_OF_PACKETS // leave this last entry
};

// Create an array of Packets to be configured
Packet packets[TOTAL_NO_OF_PACKETS];

// Masters register array
unsigned int regs[TOTAL_NO_OF_REGISTERS];

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x96, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 3, 10 };
  uint8_t gateway[] = { 192, 168, 3, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);
  //Avoid pins 4,10,11,12,13 when using ethernet shield

  delay(5000);
  //Serial.begin(9600);
 
 
 
    // Initialize each packet
  modbus_construct(&packets[PACKET1], 1, READ_INPUT_REGISTERS, 0, 6, 0);//
  //modbus_construct(&packets[PACKET2], 2, READ_HOLDING_REGISTERS, 101, 43, 43);//
 
 
 
  // Initialize the Modbus Finite State Machine
  modbus_configure(&Serial, baud, SERIAL_8N1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
 
 // pinMode(LED, OUTPUT);
  //Serial.begin (9600);
  wdt_disable();
  //wdt_enable(WDTO_4S);
 
}
void(* resetFunc) (void) = 0;

void loop()
{
  modbus_update();
  Mb.Run();
  float Teg;
  unsigned long Teg1 = (unsigned long) regs[0]<<16| regs[1];
  Teg=*(float*)& Teg1;
 

 
   //mapping MODBUS
  Mb.R[0] = Teg;
     
}
berikut hasil experiment kali ini:

 

bila kurang jelas silahkan kontak: 081555305255

signal gsm sim800l

Value RSSI dBm Condition 2 -109 Marginal 3 -107 Marginal 4 -105 Marginal 5 -103 Marginal 6 -101 Marginal 7 -99 Marginal 8 -97 Marginal 9 -95...