我们得到了 OPC 工作。由于错误,我无法将 RsLinx 安装到我的 Win7(和 XP 模式),所以我将我的测试应用程序发送到真实的地方,并有人对其进行测试。
因为我没有DLL,所以我不能做Delphi接口,所以我只需要做OLE调用。
Group Add 遇到了一个有趣的问题。
我演示一下:
procedure TForm1.Button8Click(Sender: TObject);
var
r, g : variant;
s : string;
v : variant;
ws : WideString;
begin
Log('Connect');
r := CreateOleObject('RSI.OPCAutomation');
r.Connect('RSLinx OPC Server');
Log('Add as constant');
g := r.OPCGroups.Add('MONKEY_C');
Log('Name ' + g.Name);
Log('Add as string');
s := 'MONKEY_S';
g := r.OPCGroups.Add(s);
Log('Name ' + g.Name);
Log('Add as variant');
s := 'MONKEY_V';
v := s;
g := r.OPCGroups.Add(v);
Log('Name ' + g.Name);
Log('Add as ole variant');
s := 'MONKEY_OV';
v := VarAsType(s, varOleStr);
g := r.OPCGroups.Add(v);
Log('Name ' + g.Name);
Log('Add as widestring');
s := 'MONKEY_WS';
ws := WideString(s);
g := r.OPCGroups.Add(ws);
Log('Name ' + g.Name);
Log('Add as widestring var');
s := 'MONKEY_WSV';
ws := WideString(s);
v := ws;
g := r.OPCGroups.Add(v);
Log('Name ' + g.Name);
r := 0;
end;
结果是:
Connect
Add as constant
Name MONKEY_C
Add as string
Name _Group0
Add as variant
Name _Group1
Add as ole variant
Name _Group2
Add as widestring
Name _Group3
Add as widestring var
Name _Group4
所以我不能添加任何组而不是常量定义的问题......
我需要知道 Delphi 如何编译这个常量,以便我可以将我的变量值转换为这种格式。
有人可以帮我解决这个主题吗?
谢谢:dd
你好!
所以这个问题很神秘。我在纯 OLE 调用中发现了另一个错误。
function TDDRsOPCObject.IndexOfGroup(GroupName: string): integer;
var
ogs, g : variant;
i : integer;
s : string;
begin
CheckObject;
Result := -1;
ogs := FObj.OPCGroups;
s := '';
for i := 1 to ogs.Count do begin
g := ogs.Item(i); // This is working
if AnsiCompareText(g.Name, GroupName) = 0 then begin
Result := i;
Exit;
end;
end;
end;
function TDDRsOPCObject.GetGroupByName(GroupName: string): variant;
var
idx : integer;
ogs, g : variant;
begin
CheckObject;
VarClear(Result);
idx := IndexOfGroup(GroupName);
ogs := FObj.OPCGroups;
if idx <> -1
then begin
g := ogs.Item(idx); // HERE I GOT: The parameter is incorrect
Result := g;
end;
end;
所以有趣的是:具有相同调用的 IndexOfGroup 正在工作,GetGroupByName 不是...... :-(
所以我决定不再和风车战斗(Don Q)。我从一个有 Delphi7 的亲爱的用户那里得到了 TLB(在 Win7 中,Delphi6 不能产生 OLE 接口),我找到了 Kassl。
希望这些接口可以帮助我...
谢谢:dd