unit KSimComp;
{------------------------------------------------------------------------------}
{
  KSimComp - This file includes Kave 2000 Simulation components:
    TsInverter - inverter simulation
    TsEncoder  - encoder simulation

   Author:  Vesa Lappalainen
   Date:    9.9.1996
   Changes:

}
{------------------------------------------------------------------------------}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, kavesimu, KSimMot;

type

  TsInverter = class(TaSimuObject)
  private
    FFreq : double;
    FMotor : TsMotorObject;
  protected
    procedure SetFreq(f:double); virtual;
    function GetFreq:double;     virtual;
  public
    constructor Create(AOwner:TComponent); override;
  published
    property Freq:double read GetFreq write SetFreq;
    property Motor : TsMotorObject read FMotor write FMotor;
  end; { TsInverter }

  {----------------------------------------------------------------------------}
  TsEncoder = class(TaSimuObject)
  private
    FCount : double;
    FCnt : integer;
    UCnt : integer;
  public
    constructor Create(AOwner:TComponent); override;
    procedure increment(d:Double); virtual;
    procedure SetCount(d:double);  virtual;
    function GetCount:double;      virtual;
    property Count : Double Read GetCount Write SetCount;
    procedure Loaded; override;
    procedure SetCnt(value:integer); virtual;
  published
    property CounterNr : Integer Read FCnt Write SetCnt;
  end; { TsEncoder }



procedure Register;

implementation
uses k9cio;

{------------------------------------------------------------------------------}
{ TsInverter ==================================================================}
{------------------------------------------------------------------------------}

{------------------------------------------------------------------------------}
procedure TsInverter.SetFreq(f:double);
begin
  FFreq := f;
  if ( Assigned(FMotor) ) then FMotor.Speed := f;
end;

{------------------------------------------------------------------------------}
function TsInverter.GetFreq:double;
begin
  Result := FFreq;
end;

constructor TsInverter.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
end;

{------------------------------------------------------------------------------}
{ TsEncoder ===================================================================}
{------------------------------------------------------------------------------}
constructor TsEncoder.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  Shape := stCircle;
  Box.dp.x := 250;
  Box.dp.y := 250;
  FCount := 0;
  FCnt := CntFysVirDef;
  UCnt := 0;
end;

{------------------------------------------------------------------------------}
procedure TsEncoder.increment(d:Double);
var c : double;
begin
  if ( FCnt <= 0 ) then begin
    FCount := FCount + d;
    Exit;
  end;
  if ( SimulationOn ) then begin
    c := -ReadFCounter(CntFys)+d;
    SetFCounter(CntFys,-c);
  end;
  FCount := -ReadVCounter(FCnt);
end;

{------------------------------------------------------------------------------}
procedure TsEncoder.SetCount(d:double);
begin
  FCount := -d;
  if ( UCnt <= 0 ) then exit;
  SetVCounter(FCnt,-FCount);
end;

function TsEncoder.GetCount:double;
begin
  if ( UCnt <= 0 ) then begin
    Result := FCount;
    exit;
  end;
  Result := ReadVCounter(FCnt);
  FCount := Result;
end;



procedure Register;
begin
  RegisterComponents('Kave2000', [TsInverter,TsEncoder]);
end;


//-----------------------------------------------------------------------------
procedure TsEncoder.SetCnt(value:integer); //  virtual;
begin
  Fcnt := value;
  if ( not (csDesigning in ComponentState) ) then Ucnt := FCnt;
end;


//-----------------------------------------------------------------------------
procedure TsEncoder.Loaded; //  override;
begin
  if ( not (csDesigning in ComponentState) ) then Ucnt := FCnt;
  inherited;
end;



end.

