OPC数据读取内存溢出
时间:2011-08-19
来源:互联网
最近了一个OPC客户端程序(用的是自动化接口【OPCDAAuto.dll】),写了如下的OPC Item数据读取函数,在线程里调用,程序运行过程中,内存不断增加。
函数内容:
function TOPCMan.getOPCItemData(itemname: OleVariant): String;
var
NumItems: Integer;
OVItemID: OleVariant;
OVClientHandles: OleVariant;
OVServerHandles: OleVariant;
Value, Quality, TimeStamp: OleVariant;
OVErrors: OleVariant;
FOPCItems: OPCItems;
FOPCItem: OPCItem;
begin
Value := '0.00';
FOPCItems := dm.OPCGroup.OPCItems;
if(not assigned(FOPCItems))then Exit;
NumItems := 1;
OVItemID := VarArrayCreate([1, 1], varOleStr);
OVItemID[1] := itemname;
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
begin
FOPCItem := FOPCItems.GetOPCItem(OVServerHandles[1]);
if(not Assigned(FOPCItem))then Exit;
FOPCItem.Read(OPCDevice, Value, Quality, TimeStamp);
end;
OVClientHandles := unassigned;
OVServerHandles := unassigned;
OVErrors := unassigned;
FOPCItems := nil;
FOPCItem := nil;
result := FormatFloat('0.00', Value);
end;
跪求高手指点
函数内容:
function TOPCMan.getOPCItemData(itemname: OleVariant): String;
var
NumItems: Integer;
OVItemID: OleVariant;
OVClientHandles: OleVariant;
OVServerHandles: OleVariant;
Value, Quality, TimeStamp: OleVariant;
OVErrors: OleVariant;
FOPCItems: OPCItems;
FOPCItem: OPCItem;
begin
Value := '0.00';
FOPCItems := dm.OPCGroup.OPCItems;
if(not assigned(FOPCItems))then Exit;
NumItems := 1;
OVItemID := VarArrayCreate([1, 1], varOleStr);
OVItemID[1] := itemname;
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
begin
FOPCItem := FOPCItems.GetOPCItem(OVServerHandles[1]);
if(not Assigned(FOPCItem))then Exit;
FOPCItem.Read(OPCDevice, Value, Quality, TimeStamp);
end;
OVClientHandles := unassigned;
OVServerHandles := unassigned;
OVErrors := unassigned;
FOPCItems := nil;
FOPCItem := nil;
result := FormatFloat('0.00', Value);
end;
跪求高手指点
作者: xiaoping1984 发布时间: 2011-08-19
表示关注!!
作者: lixiaolongmylove 发布时间: 2011-08-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28