Selasa, 13 November 2018

membuat modbus serial/RTU RS485 yang sangat mudah dan simple



berikut langsung saja saya share koding modbus serial/RTU RS485, semoga bermanfaat.
 koding ini mohon tidak diperjual belikan.


/*
Author : Fuad Hasan (CEO SIMOR)
website : puaks.blogspot.com
*/


#include <ModbusRtu.h>
#define ID  1 //slave ID
#define TXEN  2 //pin tx enable RS485
#define PS 0 //port serial 0,1,2,3 (1-3 for mega 2560, uno 0 only)
Modbus slave(ID, PS, TXEN);
uint16_t au16data[9]; // jumlah address yang dibuat

/**
 saat uji protocol via modscan setting
 baudrate 9600
 parity none
 slave ID 1
 lengt 9
 address 1
 Holding register
 */
void setup() {
  io_setup(); // I/O settings
  slave.begin( 9600 ); // baudrate

}

void loop() {
  slave.poll( au16data, 9 );
   io_poll();
}

/**
 * pin maping:
 * 2 - digital input
 * 3 - digital input
 * 4 - digital input
 * 5 - digital input
 * 6 - digital output
 * 7 - digital output
 * 8 - digital output
 * 9 - digital output
 * 13 - digital output
 * 10 - analog output PWM 0-255
 * 11 - analog output PWM 0-255


 */
void io_setup() {
  // define i/o
  //DIGITAL INPUT
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  //DIGITAL OUTPUT
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);


  digitalWrite(7, LOW );
  digitalWrite(8, LOW );
  digitalWrite(9, LOW );
  digitalWrite(13, LOW );
 
  //ANALOG OUTPUT
  analogWrite(10, 0 );
  analogWrite(11, 0 );
}

/**
 *  Link between the Arduino pins and the Modbus array
 */
void io_poll() {
  // get digital inputs -> au16data[0] HOLDING REGISTER 40001 di modscan, display options BINARY
  bitWrite( au16data[0], 0, digitalRead( 3 ));
  bitWrite( au16data[0], 1, digitalRead( 4 ));
  bitWrite( au16data[0], 2, digitalRead( 5 ));
  bitWrite( au16data[0], 3, digitalRead( 6 ));

  // set digital outputs -> au16data[1] HOLDING REGISTER 40002 di modscan, display options BINARY
  digitalWrite( 7, bitRead( au16data[1], 0 ));
  digitalWrite( 8, bitRead( au16data[1], 1 ));
  digitalWrite( 9, bitRead( au16data[1], 2 ));
  digitalWrite( 13, bitRead( au16data[1], 3 ));
 
  // set analog outputs, HOLDING REGISTER 40003 dan 40004 di modscan, display options unsign desimal
  analogWrite( 10, au16data[2] );
  analogWrite( 11, au16data[3] );

  // read analog inputs, HOLDING REGISTER 40005 dan 40006 di modscan, display options unsign desimal
  au16data[4] = analogRead( 0 );
  au16data[5] = analogRead( 1 );

  // diagnose communication
  au16data[6] = slave.getInCnt();
  au16data[7] = slave.getOutCnt();
  au16data[8] = slave.getErrCnt();
}



library bisa download dibawah ini:
modbus

IOT blynk PM2120 Schneider


Assalamu'alaikum

hari ini saya akan share tentang cara membuat monitoring online berbasis Internet Of Things, riset kali ini saya menggunakan power meter merk schneider PM2120 dapat pinjaman dari warga Bontang yang mempunyai pabrik pupuk kaltim. sebut saja Mr. W.

oprek ini berawal dari ide ketika gimana caranya membangun sistem monitoring tanpa memikirkan server master. akhirnya ketemu aplikasi Blynk yang bisa di download di play store. aplikasi ini Free tetapi hanya menyediakan cuma sedikit energy, kamu juga bisa nambah energy tersebut dengan membeli via playstore pakai pulsa atau kartu kredit.


langsung saja apa saja yang dibutuhkan:
1. arduino mega/uno ( yang dipakai riset kali ini mega , mumpung musim kampanye sapa tahu dapat komisi dari partai)
2. kabel LAN
3. Ethernet shield
4. Kabel data buat upload arduino IDE
5. Shield RS485 kalo gak ada pakai TTL to RS485  (cara penyambungan bisa d lihat di artikel saya sebelumnya)
6. PM2120 (boleh pinjam tetangga sebelah atau pak lurah terdekat)

langkah -langkah:
1. upload koding dibawah ini (koding dibawah hanya contoh pengambilan data tegangan):
{

  float VNR;
  unsigned long VNR1 = (unsigned long) regs[8]<<16| regs[9];
  VNR=*(float*)& VNR1;


  Blynk.virtualWrite(V0, VNR);
 }



koding riset ini hasil perkawinan example simplemodbusmaster dengan example blynk yang ethernet

2. sambungkan shield rs485 dengan PM2120,
3. pasang ethernet shield, dan shield RS485 di arduino mega.
4. sambungkan kabel lan to laptop (posisi laptop konek dengan wifi, share koneksi wifi di port LAN)




selamat berkreasi. apabila ada yang kurang jelas bisa bertanya pada grup modbus arduino atau WA saya (081555305255)



Wassalam
CEO SIMOR

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...