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

📄 iopcitem.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  if not Assigned(Owner) then Exit;

  if Assigned(Owner.OnGetType) then  Owner.OnGetType(PropertyName, FPropertyType); 
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetGroupName(const Value: String);
begin
  FGroupName := Value;
  if Active then Activate;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.Activate;
begin
  if OPCDLLNotLoaded          then Exit;
  if not Assigned(Owner)      then Exit;

  if Owner.IsDesigning        then Exit;

  if FAutoError               then UpdateError;
  if FSignalHandle <> 0       then Deactivate;

  if Trim(FPropertyName) = ''                               then Exit;
  if (Trim(FGroupName)   = '') and (Trim(FServerName) = '') then Exit;
  if Trim(FItemName)     = ''                               then Exit;

  if Active then Deactivate;

  if OPCDLLNotLoaded then Exit;
  FSignalHandle := OPCDLLSignalAdd(PChar(FComputerName), PChar(FServerName), PChar(FItemName), PChar(FGroupName), FUpdateRate, False, FPropertyType, ReceiveData);
end;
//***********************************************************************************************************************************
procedure TiOPCItem.ActivateSuspend;
begin
  if OPCDLLNotLoaded          then Exit;
  if not Assigned(Owner)      then Exit;

  if Owner.IsDesigning        then Exit;

  if FAutoError               then UpdateError;
  if FSignalHandle <> 0       then Deactivate;

  if Trim(FPropertyName) = ''                               then Exit;
  if (Trim(FGroupName)   = '') and (Trim(FServerName) = '') then Exit;
  if Trim(FItemName)     = ''                               then Exit;

  if Active then Deactivate;

  if OPCDLLNotLoaded then Exit;
  FSignalHandle := OPCDLLSignalAdd(PChar(FComputerName), PChar(FServerName), PChar(FItemName), PChar(FGroupName), FUpdateRate, True, FPropertyType, ReceiveData);
end;
//***********************************************************************************************************************************
procedure TiOPCItem.Deactivate;
begin
  if OPCDLLNotLoaded     then Exit;
  if not Assigned(Owner) then Exit;
  if Owner.IsDesigning   then Exit;

  if OPCDLLNotLoaded then Exit;
  OPCDLLSignalRemove(FSignalHandle);
  FSignalHandle := 0;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.ReceiveData(Data: OLEVariant; TimeStamp: Double; Quality: Word);
begin
  FData      := Data;
  FTimeStamp := TimeStamp;
  FQuality   := Quality;

  if FAutoError                 then UpdateError;
  if Assigned(FOwner.OnNewData) then FOwner.OnNewData(Self);
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetData(const Value: OleVariant);
begin
  if OPCDLLNotLoaded then Exit;
  OPCDLLSignalSendData(FSignalHandle, Value);
end;
//***********************************************************************************************************************************
{ TiOPCItemManager }
//***********************************************************************************************************************************
constructor TiOPCItemManager.Create;
begin
  FList := TStringList.Create;
end;
//***********************************************************************************************************************************
destructor TiOPCItemManager.Destroy;
begin
  Clear;
  FList.Free;
  inherited;
end;
//***********************************************************************************************************************************
function TiOPCItemManager.Add: Integer;
var
  iOPCItem : TiOPCItem;
begin
  iOPCItem := TiOPCItem.Create;
  iOPCItem.Owner := Self;
  Result := FList.AddObject('',iOPCItem);
end;
//***********************************************************************************************************************************
procedure TiOPCItemManager.Clear;
begin
  while FList.Count > 0 do
    begin
      FList.Objects[0].Free;
      FList.Delete(0);
    end;
end;
//***********************************************************************************************************************************
procedure TiOPCItemManager.Delete(Index: Integer);
begin
  FList.Objects[Index].Free;
  FList.Delete(Index);
end;
//***********************************************************************************************************************************
function TiOPCItemManager.GetCount: Integer;
begin
  Result := FList.Count;
end;
//***********************************************************************************************************************************
function TiOPCItemManager.GetItem(Index: Integer): TiOPCItem;
begin
  Result := FList.Objects[Index] as TiOPCItem;
end;
//***********************************************************************************************************************************
function TiOPCItemManager.FindIndex(OPCItem: TiOPCItem): Integer;
begin
  Result := FList.IndexOfObject(OPCItem);
end;
//***********************************************************************************************************************************
function TiOPCItemManager.DoWriteToStream: Boolean;
begin
  Result := Count > 0;
end;
//***********************************************************************************************************************************
procedure TiOPCItemManager.WriteToStream(Writer: TWriter);
var
  x : Integer;
begin
  TWriterAccess(Writer).WriteValue(vaCollection);
  for x := 0 to Count - 1 do
  begin
    Writer.WriteListBegin;
    WriterWriteProperties(Writer, GetItem(x));
    Writer.WriteListEnd;
  end;
  Writer.WriteListEnd;
end;
//***********************************************************************************************************************************
procedure TiOPCItemManager.ReadFromStream(Reader: TReader);
var
  Item : TiOPCItem;
begin
  Clear;
  if not Reader.EndOfList then Clear;
  if TReaderAccess(Reader).ReadValue <> vaCollection then exit;
  while not Reader.EndOfList do
  begin
    Item := TiOPCItem.Create;
    Item.Owner := Self;
    FList.AddObject('',Item);
    Reader.ReadListBegin;
    while not Reader.EndOfList do TReaderAccess(Reader).ReadProperty(Item);
    Reader.ReadListEnd;
    Item.Loaded;
  end;
  Reader.ReadListEnd; 
end;
//***********************************************************************************************************************************
function TiOPCItemManager.GetDesigning: Boolean;
begin
  Result := False;
  if Assigned(FOnGetDesigning) then FOnGetDesigning(Self, Result);
end;
//***********************************************************************************************************************************
procedure TiOPCItem.UpdateResume;
begin
  if OPCDLLNotLoaded then Exit;
  OPCDLLSignalResume(FSignalHandle);
end;
//***********************************************************************************************************************************
procedure TiOPCItem.UpdateSuspend;
begin
  if OPCDLLNotLoaded then Exit;
  OPCDLLSignalSuspend(FSignalHandle);
end;
//***********************************************************************************************************************************
procedure TiOPCItem.SetAutoError(const Value: Boolean);
begin
  if FAutoError <> Value then
    begin
      FAutoError := Value;
      if FAutoError then UpdateError;
    end;
end;
//***********************************************************************************************************************************
procedure TiOPCItem.UpdateError;
var
  iComponent : TiComponent;
begin
  if not Active                 then                                               Exit;
  if not Assigned(Owner)        then                                               Exit;
  if not Assigned(Owner.Owner)  then                                               Exit;
  if Owner.Owner is TiComponent then iComponent := Owner.Owner as TiComponent else Exit;

  if Active then
    begin
      if QualityGood then TiComponentAccess(iComponent).ErrorActive := False
        else TiComponentAccess(iComponent).ErrorActive := True;
    end;
end;
//***********************************************************************************************************************************
function TiOPCItem.GetQualityGood: Boolean;
begin
  Result := (FQuality and $C0) = $C0;
end;
//***********************************************************************************************************************************
function TiOPCItem.GetActive: Boolean;
begin
  Result := False;
  if not Assigned(Owner) then Exit;
  if Owner.IsDesigning   then Exit;
  if OPCDLLNotLoaded     then Exit;
  Result := OPCDLLSignalGetActive(FSignalHandle);
end;
//***********************************************************************************************************************************
end.

⌨️ 快捷键说明

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