⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbusmasterfunctions.pas

📁 ModBus Communications Libraries for Delphi
💻 PAS
📖 第 1 页 / 共 4 页
字号:
(**
 * @internal
 * @file MbusMasterFunctions.pas
 *
 * @if NOTICE
 *
 * $Id: MbusMasterFunctions.pas,v 1.9 2005/07/25 22:41:01 henrik Exp $
 *
 * Copyright (c) 2003-2005 FOCUS Software Engineering Pty Ltd, Australia.
 * All rights reserved. <www.focus-sw.com>
 *
 * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS OF A
 * SEPARATE LICENSE STATEMENT AND LIMITED WARRANTY.
 *
 * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD FOCUS SOFTWARE ENGINEERING,
 * ITS RELATED COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY
 * CLAIMS OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR
 * DISTRIBUTION OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES
 * ARISING OUT OF OR RESULTING FROM THE USE, MODIFICATION, OR DISTRIBUTION
 * OF PROGRAMS OR FILES CREATED FROM, BASED ON, AND/OR DERIVED FROM THIS
 * SOURCE CODE FILE.
 *
 * @endif
 *)


unit MbusMasterFunctions;


(*****************************************************************************
 * Interface
 *****************************************************************************)

interface

uses
   Classes;


(*****************************************************************************
 * TMbusMasterFunctions class declaration
 *****************************************************************************)

(**
 * @brief Base class which implements Modbus data and control functions
 *
 * The functions provided by this base class apply to all protocol flavours
 * via inheritance. For a more detailed description see section @ref
 * mbusmaster.
 *
 * @version 1.1
 * @see mbusmaster
 * @see TMbusSerialMasterProtocol, TMbusRtuMasterProtocol
 * @see TMbusAsciiMasterProtocol, TMbusTcpMasterProtocol
 *)
type
   TMbusMasterFunctions = class(TComponent)

    private

      fSwapInts: boolean;
      fSwapFloats: boolean;


    public

      destructor Destroy; override;

      (***********************************************************************
       * Modbus functions
       ***********************************************************************)

      (**
       * @name Class 0 Modbus Functions
       * @ingroup mbusmaster
       *)
      //@{

      procedure writeMultipleRegisters(slaveAddr: integer; startRef: integer;
         var regArr: array of word);

      procedure writeMultipleLongInts(slaveAddr: integer; startRef: integer;
         var int32Arr: array of integer);

      procedure writeMultipleMod10000(slaveAddr: integer; startRef: integer;
         var int32Arr: array of integer);

      procedure writeMultipleFloats(slaveAddr: integer; startRef: integer;
        var float32Arr: array of single);

      procedure readMultipleRegisters(slaveAddr: integer; startRef: integer;
          out regArr: array of word);

      procedure readMultipleLongInts(slaveAddr: integer; startRef: integer;
         out int32Arr: array of integer);

      procedure readMultipleMod10000(slaveAddr: integer; startRef: integer;
         out int32Arr: array of integer);

      procedure readMultipleFloats(slaveAddr: integer; startRef: integer;
         out float32Arr: array of single);

      //@}


      (**
       * @name Class 1 Modbus Functions
       * @ingroup mbusmaster
       *)
      //@{

      procedure readCoils(slaveAddr: integer; startRef: integer;
         out bitArr: array of boolean);

      procedure readInputDiscretes(slaveAddr: integer; startRef: integer;
         out bitArr: array of boolean);

      procedure readInputRegisters(slaveAddr: integer; startRef: integer;
         out regArr: array of word);

      procedure readInputLongInts(slaveAddr: integer; startRef: integer;
         out int32Arr: array of integer);

      procedure readInputMod10000(slaveAddr: integer; startRef: integer;
         out int32Arr: array of integer);

      procedure readInputFloats(slaveAddr: integer; startRef: integer;
         out float32Arr: array of single);

      procedure writeCoil(slaveAddr: integer; bitAddr: integer;
         bitVal: boolean);

      procedure writeSingleRegister(slaveAddr: integer; regAddr: integer;
         regVal: word);

      procedure readExceptionStatus(slaveAddr: integer;
         out statusByte: byte);

      //@}


      (**
       * @name Class 2 Modbus Functions
       * @ingroup mbusmaster
       *)
      //@{

      procedure forceMultipleCoils(slaveAddr: integer; startRef: integer;
         var bitArr: array of boolean);

      procedure maskWriteRegister(slaveAddr: integer; regAddr: integer;
         andMask: word; orMask: word);

      procedure readWriteRegisters(slaveAddr: integer;
         readRef: integer; out readArr: array of word;
         writeRef: integer; var writeArr: array of word);

      //@}


      (***********************************************************************
       * Protocol Configuration
       ***********************************************************************)

      (**
       * @name Protocol Configuration
       * @ingroup mbusmaster
       *)
      //@{

      procedure setTimeout(const timeOut: integer);

      function getTimeout: integer;

      procedure setPollDelay(const pollDelay: integer);

      function getPollDelay: integer;

      procedure setRetryCnt(const retryCnt: integer);

      function getRetryCnt: integer;


    private

      procedure setBigEndianInts(val: boolean);

      procedure setSwappedFloats(val: boolean);


    published

      (**
       * Time-out port property
       *
       * @note A protocol must be closed in order to configure it.
       *)
      property timeout: integer read getTimeout write setTimeout default 1000;

      (**
       * Poll delay property. Delay between two Modbus read/writes in
       * ms
       *
       * @note A protocol must be closed in order to configure it.
       *)
      property pollDelay: integer read getPollDelay write setPollDelay;

      (**
       * Retry count property.
       *
       * @note A protocol must be closed in order to configure it.
       *)
      property retryCnt: integer read getRetryCnt write setRetryCnt;

      (**
       * Big endian integers property.
       *
       * @note A protocol must be closed in order to configure it.
       *)

      property bigEndianInts: boolean read fSwapInts write setBigEndianInts
         default false;

      (**
       * Swapped floats property.
       *
       * @note A protocol must be closed in order to configure it.
       *)
      property swappedFloats: boolean read fSwapFloats write setSwappedFloats
         default false;


    public

      //@}


      (**
       * @name Transmission Statistic Functions
       * @ingroup mbusmaster
       *)
      //@{

      function getTotalCounter: cardinal;

      procedure resetTotalCounter;

      function getSuccessCounter: cardinal;

      procedure resetSuccessCounter;

      //@}


      (***********************************************************************
       * Word Order Configuration
       ***********************************************************************)

      (**
       * @name Word Order Configuration
       * @ingroup mbusmaster
       *)
      //@{

      procedure configureBigEndianInts;

      procedure configureSwappedFloats;

      procedure configureLittleEndianInts;

      procedure configureIeeeFloats;

      //@}


      (***********************************************************************
       * Utility routines
       ***********************************************************************)

      function isOpen(): boolean;

      procedure closeProtocol;

      class function getPackageVersion: string;


    protected

      mbusHdl: pointer;

   end;


(*****************************************************************************
 * DLL stub functions
 *****************************************************************************)

procedure mbusMaster_destroyProtocol(mbusHdl: pointer);
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_destroyProtocol@4';

function mbusMaster_writeMultipleRegisters(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_writeMultipleRegisters@20';

function mbusMaster_writeMultipleLongInts(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_writeMultipleLongInts@20';

function mbusMaster_writeMultipleMod10000(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_writeMultipleMod10000@20';

function mbusMaster_writeMultipleFloats(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_writeMultipleFloats@20';

function mbusMaster_readMultipleRegisters(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readMultipleRegisters@20';

function mbusMaster_readMultipleLongInts(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readInputLongInts@20';

function mbusMaster_readMultipleMod10000(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readMultipleMod10000@20';

function mbusMaster_readMultipleFloats(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readMultipleFloats@20';

function mbusMaster_readCoils(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readCoils@20';

function mbusMaster_readInputDiscretes(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readInputDiscretes@20';

function mbusMaster_readInputRegisters(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readInputRegisters@20';

function mbusMaster_readInputLongInts(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readMultipleLongInts@20';

function mbusMaster_readInputMod10000(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readInputMod10000@20';

function mbusMaster_readInputFloats(
   mbusHdl: pointer; slaveAddr: integer; startRef: integer;
   refArrPtr: pointer; refCnt: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_readInputFloats@20';

function mbusMaster_writeCoil(
   mbusHdl: pointer; slaveAddr: integer; bitAddr: integer;
   bitVal: integer): integer;
   stdcall; external 'libmbusmaster.dll' name '_mbusMaster_writeCoil@16';

function mbusMaster_writeSingleRegister(
   mbusHdl: pointer; slaveAddr: integer; regAddr: integer;
   regVal: word): integer;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -