Documentation

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