OPCの仕事に就きました。エラーのためにRsLinxをWin7(およびXPモードも)にインストールできないため、テストアプリを実際の場所に送信し、誰かがテストします。
DLLがないため、Delphiインターフェイスを作成できません。そのため、OLE呼び出しのみを実行する必要があります。
GroupAddで興味深い問題が発生しました。
私はそれを示します:
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は機能していません... :-(
それで、私は風車との戦いを続けないと決めました(ドンQ)。Delphi7を使用している親愛なるユーザーからTLBを入手しました(Win7ではDelphi6はOLEインターフェイスを生成できません)。Kasslを見つけました。
これらのインターフェースが私を助けてくれますように...
ありがとう:dd