📄 mbusmasterfunctions.pas
字号:
(**
* @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 + -