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:
unsigned long Teg1 = (unsigned long) regs[0]<<16| regs[1]; // ini untuk register tegangan bukan om ?
BalasHapusbetullll
Hapus
Hapusmodbus_construct(&packets[PACKET1], 1, READ_INPUT_REGISTERS, 0, 6, 0) // cara menentukan ini gmana om ? saya ga paham
baca datasheet modbus slave dulu.
Hapuscontoh Power meter.
mau data apa yg dipanggil di arduino?
misal voltage. dia di register brp?
ikut function apa ?
Om nanya donk, maksud baris ini. unsigned long Teg1 = (unsigned long) regs[0]<<16| regs[1].
Hapuskenapa regs[0] digeser ke kiri 16 habis itu isinya di OR sama reg[1]. ndak paham blas,,
itu type data float
Hapusbagaimana wiring nya gan ?
BalasHapusdari sdm120 kan ada terminal rs485, itu pasang kabel sambungkan ke arduino memlalui ttl to rs485
HapusGan, saya mau tanya.
BalasHapusSaya buat datalogger pake sdm230, arduino uno + konverter ttl to rs485
Codingan-nya apakah sama seperti diatas ?
coba cek datasheetnya ? apakah register modbusnya apa sama?
HapusKomentar ini telah dihapus oleh pengarang.
BalasHapusassalamualikum gan....
BalasHapusklo cara reset ulang nilainya ke 0 lgi gmana ya gan?
walaikumsalam. reset nilai kwhnya?
HapusIya gan, nilai kwh nya...
Hapustidak ada fitur reset
HapusKalau di tabel holding register formatnya real itu maksudnya gimana dan rumusnya gimana om..? Apakah sama menggunakan shift left?
BalasHapus