FieldTalk Modbus Master Library, Delphi Edition Library version 2.12.0

- 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',
      MbusSerialClientBase in '..\..\src\MbusSerialClientBase.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,
      MbusIpClientBase in '..\..\src\MbusIpClientBase.pas',
      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.