• Libraries
  • Shop
  • Doc
  • Free Modbus
  • Support
  • Login
  • Introduction
  • Chapters
  • Modules
  • Classes

Examples

Serial Example

The following example sersimple.cpp shows how to configure a serial Modbus protocol and read values:

(**
 * @file sersimple.dpr
 *
 * A simple console based example using FieldTalk in Modbus RTU master mode
 *
 * @if NOTICE
 *
 * Copyright (c) proconX Pty Ltd. All rights reserved.
 *
 * The following source file constitutes example program code and is
 * intended merely to illustrate useful programming techniques.  The user
 * is responsible for applying the code correctly.
 *
 * THIS SOFTWARE IS PROVIDED BY PROCONX AND CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PROCONX OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @endif
 *)


program SerSimple_Example;

{$APPTYPE CONSOLE}

uses
  SysUtils, { sleep lives here in Delphi 7 }
  Windows, { sleep lives here in Delphi 3 }
  MbusMasterFunctions in '..\..\src\MbusMasterFunctions.pas',
  MbusSerialMasterProtocol in '..\..\src\MbusSerialMasterProtocol.pas',
  MbusAsciiMasterProtocol in '..\..\src\MbusAsciiMasterProtocol.pas',
  MbusRtuMasterProtocol in '..\..\src\MbusRtuMasterProtocol.pas',
  BusProtocolExceptions in '..\..\src\BusProtocolExceptions.pas';


(*****************************************************************************
 * Gobal data
 *****************************************************************************)

const
  portName = 'COM1';

var
//  mbusProtocol: TMbusAsciiMasterProtocol; { Use this declaration for ASCII }
  mbusProtocol: TMbusRtuMasterProtocol; { Use this declaration for RTU }


(*****************************************************************************
 * Function implementation
 *****************************************************************************)

(**
 * Opens protocol
 *)
procedure openProtocol;
begin
  try
    mbusProtocol := TMbusRtuMasterProtocol.Create(nil);
    mbusProtocol.portName := portName;
    mbusProtocol.baudRate := 19200;
    mbusProtocol.dataBits := 8;
    mbusProtocol.stopBits := 1;
    mbusProtocol.parity := 2;
    mbusProtocol.openProtocol;
  except
    on e: Exception do
    begin
      writeln('Error opening protocol: ', e.message, '!');
      halt(1);
    end;
  end;
end;


(**
 * Closes protocol
 *)
procedure closeProtocol;
begin
  mbusProtocol.closeProtocol;
  mbusProtocol.Destroy;
end;


(**
 * Cyclic loop which polls every one second 10 registers starting at
 * reference 100 from slave # 1
 *)
procedure runPollLoop;
var
  i: integer;
  dataArr: array[0..9] of word;
begin
  while true do
  begin
    try
      mbusProtocol.readMultipleRegisters(1, 100, dataArr);
      for i := low(dataArr) to high(dataArr) do
        writeln('[', 100 + i, ']: ', dataArr[i]);
      writeln;
    except
      on e: EBusProtocolException do
        writeln(e.message, '!');
      on e: Exception do
      begin
        writeln('Fatal error: ', e.message, '!');
        halt(1);
      end;
    end;
    sleep(1000);
  end;
end;


(**
 * Main function.
 *)
begin
  openProtocol;
  runPollLoop;
  closeProtocol;
end.

MODBUS/TCP Example

The following example tcpsimple.cpp shows how to configure a MODBUS/TCP protocol and read values:

(**
 * @file tcpsimple.dpr
 *
 * A simple console based example using FieldTalk in Modbus/TCP master mode
 *
 * @if NOTICE
 *
 * Copyright (c) proconX Pty Ltd. All rights reserved.
 *
 * The following source file constitutes example program code and is
 * intended merely to illustrate useful programming techniques.  The user
 * is responsible for applying the code correctly.
 *
 * THIS SOFTWARE IS PROVIDED BY PROCONX AND CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PROCONX OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * @endif
 *)


program TcpSimple_Example;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows,
  MbusTcpMasterProtocol in '..\..\src\MbusTcpMasterProtocol.pas',
  BusProtocolExceptions in '..\..\src\BusProtocolExceptions.pas',
  MbusMasterFunctions in '..\..\src\MbusMasterFunctions.pas';


(*****************************************************************************
 * Gobal data
 *****************************************************************************)

const
  hostName = '127.0.0.1';

var
  mbusProtocol: TMbusTcpMasterProtocol;


(*****************************************************************************
 * Function implementation
 *****************************************************************************)

(**
 * Opens protocol
 *)
procedure openProtocol;
begin
  try
    mbusProtocol := TMbusTcpMasterProtocol.Create(nil);
    mbusProtocol.hostName := hostName;
    mbusProtocol.openProtocol;
  except
    on e: Exception do
    begin
      writeln('Error opening protocol: ', e.message, '!');
      halt(1);
    end;
  end;
end;


(**
 * Closes protocol
 *)
procedure closeProtocol;
begin
  mbusProtocol.closeProtocol;
  mbusProtocol.Destroy;
end;


(**
 * Cyclic loop which polls every one second 10 registers starting at
 * reference 100 from slave # 1
 *)
procedure runPollLoop;
var
  i: integer;
  dataArr: array[0..9] of word;
begin
  while true do
  begin
    try
      mbusProtocol.readMultipleRegisters(1, 100, dataArr);
      for i := low(dataArr) to high(dataArr) do
         writeln('[', 100 + i, ']: ', dataArr[i]);
      writeln;
    except
      on e: EBusProtocolException do
         writeln(e.message, '!');
      on e: Exception do
      begin
         writeln('Fatal error: ', e.message, '!');
         halt(1);
      end;
    end;
    sleep(1000);
  end;
end;


(**
 * Main function.
 *)
begin
  openProtocol;
  runPollLoop;
  closeProtocol;
end.


FieldTalk Modbus Master Library, Delphi Edition
Library version 2.6.2
Speak to the Experts
Modbus Organization Member logo

We are member of the Modbus Organization, Inc.

Buy with Confidence
30-day money back guarantee All our FieldTalk web sales are backed by a 30-day Money Back Guarantee.
We Accept
Bank VISA MasterCard PayPal
Customer Info
  • Info & Contact
  • Customer Login
  • Terms of Service
  • Terms of Sale
  • Privacy Policy
© 2005-2025 proconX Pty Ltd. All rights reserved. proconX and FieldTalk are trademarks of proconX Pty Ltd.
All other trademarks and registered trademarks appearing on www.modbusdriver.com are the property of their respective owners.