Pages: [1]   Go Down
Author Topic: MAX 485 & ModbusMaster - Basic Guide  (Read 3622 times)
0 Members and 1 Guest are viewing this topic.
United States
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

This is like my 5th post or something, but I wanted to give back. I didn't see a "guides" section and this doesn't really meet many standards in way of a guide, but I thought it could really help someone get started, especially REALLY new people.


Youtube video showing physical hookup:
https://www.youtube.com/watch?v=P2DYBKIAHQA

Excellent post with schematic:
http://pskillenrules.blogspot.com/2009/08/arduino-and-rs485.html

Modbus Master Library:
http://www.arduino.cc/playground/Code/ModbusMaster

Code:
Code:
#include <ModbusMaster.h>


// instantiate ModbusMaster object as slave ID 2
// This is how to set the serial port, 3 is serial # and 2 is the SLAVE ID of the node
ModbusMaster node(3,2);
const int txRxPin = 4;
int txState = LOW;


void setup()
{
  // initialize Modbus communication baud rate
  node.begin(19200);
  pinMode(txRxPin, OUTPUT);
}


void loop()
{
//creating a counter that transmits "i"
 static uint32_t i;
  uint8_t j, result;
  uint16_t data[6];
 
  i++;

  txState = HIGH;
  digitalWrite(txRxPin, txState);
  // slave: write TX buffer to (2) 16-bit registers starting at register 0
  result = node.writeMultipleRegisters(0, 2);
 
 

}
Essentially this code shows you how to transmit over modbus a 32bit int
« Last Edit: November 22, 2012, 09:14:42 pm by zabaat » Logged

nr Bundaberg, Australia
Offline Offline
Tesla Member
***
Karma: 121
Posts: 8433
Scattered showers my arse -- Noah, 2348BC.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Looks pretty simple, better than I would have thought for Modbus but I guess all the clever stiff is in the library.

______
Rob
Logged

Rob Gray aka the GRAYnomad www.robgray.com

United States
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

EDIT : The below could be false... checking...


To add receive capability to MAX485 use this link to modify your modbusmaster.cpp file   (file attached)

http://electronics.stackexchange.com/questions/49097/arduino-as-modbus-master-with-max485-doesnt-get-any-response

Code:
    // code edited to work with MAX485:
  // transmit request
  UCSR0A=UCSR0A |(1 << TXC0); 
  Serial.flush();
  digitalWrite(3, HIGH);

  for (i = 0; i < u8ModbusADUSize; i++)
  {
#if defined(ARDUINO) && ARDUINO >= 100
    MBSerial.write(u8ModbusADU[i]);
#else
    MBSerial.print(u8ModbusADU[i], BYTE);
#endif
  }
  while (!(UCSR0A & (1 << TXC0)));
  digitalWrite(3, LOW);
  // --

  u8ModbusADUSize = 0;

* ModbusMaster.cpp (25.27 KB - downloaded 35 times.)
« Last Edit: November 21, 2012, 03:47:34 am by zabaat » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

I am newbie in arduino. I read this topic but still  I do not know how to use a 0x05 - Write Single Coil function.  Could anyone please explain, how to send (for example 01 05 00 00 FF 00 8C 3A)  the commands using the ModbusMaster library after the condition in the program?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Zabaat good job. Have known tons of info from you .Thanks
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey, i must send to PowerMeter a command in modbus, but i can't use ModbusMaster Library.

This is the command:
Device Addr : 0x01
Function : 0x03
MSB 1 Word Addr : 0x03
LSB 1 Word Addr : 0x25
Words number MSB: 0x00 
Words number LSB: 0x04
CRC 16 MSB: 0x55
CRC 16 LSB: 0x86

Thank you.
Logged

Pages: [1]   Go Up
Jump to: