День добрый. Имеется owen ПЛК100. Подключен по Ethernet. Стандартный OPC сервер кодсис 2.3. Пишу маленькую программу мониторинга и управления на делфях.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OPCAutomation_TLB, StdCtrls, ExtCtrls, Mask, ComCtrls;
var
Form1: TForm1;
NewServer:OPCServer;
NewGroups:OPCGroups;
NewGroup:OPCGroup;
NewItems:OPCItems;
DOZATOR_OPEN:Variant;
При создании формы делаю коннект к ОРС.
NewServer:=CoOPCServer.Create;
NewServer.Connect('CoDeSys.OPC.02',NewServer.Serve rNode);
if NewServer.ServerState = 1 then
begin
//создаем группу
NewGroups:=NewServer.OPCGroups;
NewGroup:=NewGroups.Add('Group1');
DOZATOR_OPEN:=NewGroups.GetOPCGroup('Group1').OPCI tems .AddItem('.DOZATOR_OPEN', 1); // открыт дозатор на сброс в мешалку*
end
else
ShowMessage('Не удалось подключиться к контроллеру');
end;

Каждую секунду опрашиваем переменные.
DOZATOR_OPEN.Read(NewGroups.GetOPCGroup('Group1'). OPCItems.Item('.DOZATOR_OPEN'));
dos:=VarToStr(DOZATOR_OPEN.Value); //читаем статус задвижки дозатора
ShowMessage(dos);
if dos='True' then
begin
Panel3.Color:=clRed;
Button5.Caption:='ЗАКРЫТЬ задвижка';
end
else
begin
Panel3.Color:=clBlack;
Button5.Caption:='ОТКРЫТЬ задвижку';
end;

Управление в кнопки
begin
If dos = 'True' then
NewGroup.OPCItems.Item('.DOZATOR_OPEN').Write(0)
else
NewGroup.OPCItems.Item('.DOZATOR_OPEN').Write(1);
end;

Если переменная равна False, то все работает и считывается без проблем. Стоит нажать на кнопку и переключить переменную на True, то при опросе это переменной возникает ошибка EOleExeption Номер находится за пределами допустимого диапазона, хотя переменная считывается. В чем может быть проблема???