为什么 OPC OnDataChange 的返回值为NULL

superzeal 2011-05-29 05:24:52
最近做了个opc 客户端程序,采用的Delphi7.0,用的是OPCDAauto.dll,导入的delphi,把控件放上之后,连接添加之类的都对了,但在OnDataChange 时,NumItems:返回值为正确的变化个数,但 ClientHandles, ItemValues, Qualities,
TimeStamps的返回值为NULL。不知道是为什么?

求高手解答。


unit s;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, OPCAutomation_TLB, OleServer,ActiveX;

type
TForm1 = class(TForm)
btn1: TBitBtn;
OPCServer1: TOPCServer;
OPCGroup1: TOPCGroup;
opcgrps1: TOPCGroups;
procedure btn1Click(Sender: TObject);
procedure OPCGroup1DataChange(ASender: TObject; TransactionID,
NumItems: Integer; var ClientHandles, ItemValues, Qualities,
TimeStamps: OleVariant);
private
{ Private declarations }
public
{ Public declarations }
FOPCItems: OPCItems; // interface
FOPCItem: OPCItem; // interface
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);

var
NumItems: Integer;
OVItemID: OleVariant;
OVClientHandles: OleVariant;
OVServerHandles: OleVariant;
OVErrors: OleVariant;
OleErr: string;
begin
OPCServer1.Connect1('MMTSET OPC Server');
OPCGroup1.ConnectTo(OPCServer1.OPCGroups.Add('test'));
OPCGroup1.UpdateRate :=1000;
OPCGroup1.IsActive := True;
OPCGroup1.IsSubscribed := True; // 事件支持


FOPCItems := OPCGroup1.OPCItems;

NumItems := 1;

OVItemID := VarArrayCreate([1, 1], varOleStr);
OVItemID[1] := 'a';

OVClientHandles := VarArrayCreate([1, 1], varInteger);
OVClientHandles[1] := 1;

OVServerHandles := VarArrayCreate([1, 1], varInteger);
OVServerHandles[1] := 0; // 初始化

OVErrors := VarArrayCreate([1, 1], varOleStr);
OVErrors := EmptyParam; // 初始化

FOPCItems.AddItems(
NumItems,
PSafeArray(TVarData(OVItemID).VOleStr),
PSafeArray(TVarData(OVClientHandles).VInteger),
PSafeArray(TVarData(OVServerHandles).VInteger),
PSafeArray(TVarData(OVErrors).VInteger),
EmptyParam,
EmptyParam
);

if OVServerHandles[1] >0 then
FOPCItem := FOPCItems.GetOPCItem(OVServerHandles[1])
else
begin
//raise EOleError.Create('失败: 连接' +cnItemName + #13#10 + OleErr);
Caption := 'error';
end
end;

procedure TForm1.OPCGroup1DataChange(ASender: TObject; TransactionID,
NumItems: Integer; var ClientHandles, ItemValues, Qualities,
TimeStamps: OleVariant);
var nSize : Integer;
p : Pointer;
s :string;
begin
if ClientHandles = null then
Exit;

nSize := VarArrayHighBound(ClientHandles,1) - VarArrayLowBound(ClientHandles,1 ) + 1;
SetLength(s,nSize);
p := VarArrayLock(ClientHandles);
try
Move(p^,PChar(s)^,nSize);
finally
VarArrayUnlock(ClientHandles);
end;

Caption := s;

end;

end.
...全文
524 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yct0605 2014-01-26
  • 打赏
  • 举报
回复
以前写过一个例子,可以参考一下 http://bbs.csdn.net/topics/330170980
taokan2014 2014-01-24
  • 打赏
  • 举报
回复
遇到相同问题,请问解决了么
lzd123 2011-12-19
  • 打赏
  • 举报
回复
OPC,还是找个稳定的客户端比较好,自己做比较麻烦
qihanbing 2011-10-31
  • 打赏
  • 举报
回复
if Assigned(FOnDataChange) then
FOnDataChange(Self,
Params[0],
Params[1],
OleVariant(TVarData(Params[2])),
OleVariant(TVarData(Params[3])),
OleVariant(TVarData(Params[4])),
OleVariant(TVarData(Params[5])));
qihanbing 2011-10-31
  • 打赏
  • 举报
回复
你检查一下delphi编译类的文件tlb,我和你同样的问题,结果发现是编译的错误,procedure TOPCGroup.InvokeEvent(DispID: TDispID; var Params: TVariantArray);在这里,你检查一下啊
superzeal 2011-05-29
  • 打赏
  • 举报
回复
没人回复吗
=========== Sep 10 2010 ----------- NextGrid v5.2.5 -- added: Images property in NxTreeColumn. added: ImageIndex property of the Row. NextInspector v5.2.5 -- added: OnAfterEdit event. Occur when item editing is done. Next Collection -- added: New component NxGlyphPageControl. =========== Aug 10 2010 ----------- NextGrid v5.2 -- added: Range multi-select. added: FullSize property in NxColorColumn. When True, color box will ocuppy whole cell. NextInspector v5.2 -- added: ItemByCaption[] property in Items property of NextInspector. Return Item by caption. added: GetFirstChild property of Item added. added: ShowMinimize and Minimized properties for Item. Designed for items with large ItemHeight. NxPageControl -- added: New property PartialTabs. When set to True, tab will be partialy shown when oversize control's width. NxToolbar -- added: Visible property to the Item. added: OnClick event to the Item. NextSheet -- added: OnChange event. Occur when Text property of cell is changed. =========== Jun 10 2010 ----------- NextGrid v5.1.6 -- fixed: bug-fixes and internal tweaks. NextInspector v5.1.6 -- added: OnDrawPreview event. fixed: Bug with ShowPreview property of Item. NxComboBox -- added: AutoCompleteDelay property for enabling auto-complete feature NxToolbar -- added: New Toolbar component (BETA) =========== May 15 2010 ----------- NextGrid, NextDBGrid v5.1.5 -- fixed: bug-fixes and internal tweaks NextSheet v1.4.5 -- fixed: Drawing merged cells while scrolling. fixed: Selection may be made with pressing left mouse key only. Next Collection -- added: New component TNxHint. Add support for HTML formated hint windows. =========== Apr 15 2010 ----------- NextGrid v5.1 -- fixed: Bug with cursor in NxHyperlinkColumn. added: OnDataChange event. Occur when column/row is added, deleted or inserted. NextGrid, NextDBGrid v5.1 -- added: Precision property to the TNxProgressColumn and TNxDBProgressColumn. fixed: Right click select bug. NextInspector v5.1 -- fixed: TNxToolbarItem: color of text when item is disabled. added: TNxSpinItem: added event OnSpin which occur by clicking on spin buttons of InplaceEditor. NxColorScheme -- added: 3 new color schemes: csBlue2010, csBlack2010, csSilver2010 to support MS Office 2010 color schemes. Next Editors -- added: OnButtonDown event for editors with button. Next Collection -- fixed: NxOutlookBar: AV when click on space between items. added: NxPageControl: TabMargin property. Specify extra space on right and left side of tab. =========== Jan 15 2010 ----------- NextGrid v5.0.6 -- fixed: Bug fixes and internal tweaks. NextInspector v5.0.6 -- added: ButtonCaption property for NxButtomItem and descendants. This property specify text which will appear on button of Editor. fixed: Bug fixes and internal tweaks. NxIconList -- added: New component. Display and select icon from attached ImageList. NextSheet v1.4.1 -- fixed: problem with parsing large cell address.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧