Thursday, February 22, 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

No comments:

Post a Comment

membuat access point (AP) dari nodemcu

nodemcu ternyata bisa dijadiin acces point (AP). dengan fitur ini bisa membuat jaringan wifi peralatan murah meriah. langsung aja. y...