Arduino Playground - ModbusMaster Library

4
The playground is a publicly- editable wiki about Arduino. Manuals and Curriculum Installing Arduino on Linux Board Setup and Configuration Development Tools Arduino on other Atmel Chips Interfacing With Hardware Output Input User Interface Storage Communication Power supplies General Interfacing with Software User Code Library Snippets and Sketches Libraries Tutorials Suggestions & Bugs Electronics Technique Sources for Electronic Parts Related Hardware and Initiatives Arduino People/Groups & Sites Exhibition Project Ideas Languages Main Site Blog Playground Forum Labs Store Sign in or Register ModbusMaster Library for Arduino Author: Doc Walker Contact: 4-20ma at wvfans dot net Overview This is an Arduino library for communicating with Modbus slaves over RS232/485 (via RTU protocol). Updated to support Arduino 1.0. Features The following Modbus functions have been implemented: 0x01 - Read Coils 0x02 - Read Discrete Inputs 0x05 - Write Single Coil 0x0F - Write Multiple Coils 0x03 - Read Holding Registers 0x04 - Read Input Registers 0x06 - Write Single Register 0x10 - Write Multiple Registers 0x16 - Mask Write Register 0x17 - Read Write Multiple Registers Uploading Sketches Arduinos prior to the Mega have one serial port which must be connected to USB (FTDI) for uploading sketches and to the RS232/485 device/network for running sketches. You will need to disconnect pin 0 (RX) while uploading sketches. After a successful upload, you can reconnect pin 0. Arduino Playground - ModbusMaster Library http://playground.arduino.cc/Code/ModbusMaster 1 de 4 20/6/2013 14:13

Transcript of Arduino Playground - ModbusMaster Library

Page 1: Arduino Playground - ModbusMaster Library

The playground is a publicly-

editable wiki about Arduino.

Manuals and Curriculum

Installing Arduino on Linux

Board Setup and

Configuration

Development Tools

Arduino on other Atmel Chips

Interfacing With Hardware

Output

Input

User Interface

Storage

Communication

Power supplies

General

Interfacing with Software

User Code Library

Snippets and Sketches

Libraries

Tutorials

Suggestions & Bugs

Electronics Technique

Sources for Electronic Parts

Related Hardware and

Initiatives

Arduino People/Groups &

Sites

Exhibition

Project Ideas

Languages

Main Site Blog Playground Forum Labs Store

Sign in or Register

ModbusMaster Library for Arduino

Author: Doc Walker

Contact: 4-20ma at wvfans dot net

Overview

This is an Arduino library for communicating with Modbus slaves over

RS232/485 (via RTU protocol). Updated to support Arduino 1.0.

Features

The following Modbus functions have been implemented:

0x01 - Read Coils

0x02 - Read Discrete Inputs

0x05 - Write Single Coil

0x0F - Write Multiple Coils

0x03 - Read Holding Registers

0x04 - Read Input Registers

0x06 - Write Single Register

0x10 - Write Multiple Registers

0x16 - Mask Write Register

0x17 - Read Write Multiple Registers

Uploading Sketches

Arduinos prior to the Mega have one serial port which must be connected

to USB (FTDI) for uploading sketches and to the RS232/485

device/network for running sketches. You will need to disconnect pin 0

(RX) while uploading sketches. After a successful upload, you can

reconnect pin 0.

Arduino Playground - ModbusMaster Library http://playground.arduino.cc/Code/ModbusMaster

1 de 4 20/6/2013 14:13

Page 2: Arduino Playground - ModbusMaster Library

PARTICIPATE

Suggestions

Formatting guidelines

All recent changes

PmWiki

WikiSandBox training

Basic Editing

Cookbook (addons)

Documentation index

Drone with Arduino

Thermostat with Arduino

edit SideBar

Hardware

This library has been tested with an Arduino Duemilanove, PHOENIX

CONTACT nanoLine controller, connected via RS485 using a Maxim

MAX488EPA transceiver.

Installation

The latest version can be downloaded from Github.

Arduino 17 (or later)

Determine the location of your sketchbook by selecting File >

Preferences from within the Arduino IDE. If you don't already have a

libraries folder within your sketchbook, create one and unzip the

archive there. See this for more information.

Arduino 16 (or earlier)

Download the zip file, extract and copy the ModbusMaster folder to

ARDUINO_HOME/hardware/libraries. If you are upgrading from a

previous version, be sure to delete ModbusMaster.o.

Support

Please report any bugs on the Issue Tracker.

Questions/Feedback

I can be contacted at 4-20ma at wvfans dot net.

Example

The library contains a few sketches that demonstrate use of the

ModbusMaster library. You can find these in the examples folder.

/*

Basic.pde - example using ModbusMaster library

This file is part of ModbusMaster.

ModbusMaster is free software: you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation, either version 3 of the License, or

(at your option) any later version.

ModbusMaster is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

Arduino Playground - ModbusMaster Library http://playground.arduino.cc/Code/ModbusMaster

2 de 4 20/6/2013 14:13

Page 3: Arduino Playground - ModbusMaster Library

You should have received a copy of the GNU General Public License

along with ModbusMaster. If not, see <http://www.gnu.org/licenses/>.

Written by Doc Walker (Rx)

Copyright © 2009-2012 Doc Walker <4-20ma at wvfans dot net>

*/

#include <ModbusMaster.h>

// instantiate ModbusMaster object as slave ID 2

// defaults to serial port 0 since no port was specified

ModbusMaster node(2);

void setup()

{

// initialize Modbus communication baud rate

node.begin(19200);

}

void loop()

{

static uint32_t i;

uint8_t j, result;

uint16_t data[6];

i++;

// set word 0 of TX to least-significant word of counter (bits 15..0)

node.TX(0, lowWord(i));

// set word 1 of TX to most-significant word of counter (bits 31..16)

node.TX(1, highWord(i));

// slave 1: write TX to (2) 16-bit registers starting at register 0

result = node.WriteMultipleRegisters(0, 2);

// slave 1: read (6) 16-bit registers starting at register 2 to RX

result = node.ReadHoldingRegisters(2, 6);

// do something with data if read is successful

if (result == node.ku8MBSuccess)

{

for (j = 0; j < 6; j++)

{

data[j] = node.RX(j);

}

}

}

Project inspired by Arduino Modbus Master.

Arduino Playground - ModbusMaster Library http://playground.arduino.cc/Code/ModbusMaster

3 de 4 20/6/2013 14:13

Page 4: Arduino Playground - ModbusMaster Library

Share |

Arduino Playground - ModbusMaster Library http://playground.arduino.cc/Code/ModbusMaster

4 de 4 20/6/2013 14:13