Delphi如何能通过OPC对PLC数据进行每隔一段时间的读取,即实时的读取

a340611953 2012-06-25 02:37:49
小弟使用了一个Timer控件,发现在里面写一个read事件就出现错误,错误提示是:Access Violation at address 00456535 in module 有什么解决方案吗,各位大虾帮帮忙啊
...全文
448 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcn8011 2012-06-26
  • 打赏
  • 举报
回复
控件有没有注册?
看那山瞧那水 2012-06-26
  • 打赏
  • 举报
回复
对,一般OPC服务器可以选择数据变化更新或者定时更新的,内部就是COM事件
a340611953 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
如果是OPC,PLC提供的OPC服务器没提供通知吗?客户端只要连上就不要管了,自动更新,或者需要配置下?
[/Quote]不太懂你的意思,你是说的数据刷新吗?
a340611953 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
用iocomp吧
www.ccrun.com有下载
[/Quote]我下载了iocomp控件,杂用啊。。
看那山瞧那水 2012-06-26
  • 打赏
  • 举报
回复
如果是OPC,PLC提供的OPC服务器没提供通知吗?客户端只要连上就不要管了,自动更新,或者需要配置下?
a340611953 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
放代码出来。
直接读是没问题的吗?
是不是通讯出问题?
[/Quote]通讯应该是没问题的,单独拿出来读是可以的,代码如下,各位大虾帮忙看看,小弟刚刚接触工控,基本都是自己摸索的,还有很多不懂的地方
procedure TForm1.Read(Sender: TObject);
begin
testItem1.Read(OPCDeVice,myvalue1,myquality,mytimestamp); //问题
testItem6.Read(OPCDeVice,myvalue6,myquality,mytimestamp);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Read(Sender);
Edit3.Text:=myvalue1;
case myvalue6 of
0:Edit2.Text:='设备无故障,可正常运行';
1:Edit2.Text:='左限故障,请检查';
2:Edit2.Text:='右限故障,请检查';
3:Edit2.Text:='设备过载,请检查';
end;
end;
a340611953 2012-06-26
  • 打赏
  • 举报
回复
各位大大辛苦了,小弟发现错误了,原来是Timer控件事件定义太短了,默认1000MS竟然不行,改成1500就成功了。。。。。郁闷了。。。结贴了。非常感谢各位
cptang 2012-06-25
  • 打赏
  • 举报
回复
用iocomp吧
www.ccrun.com有下载
lzg827 2012-06-25
  • 打赏
  • 举报
回复
放代码出来。
直接读是没问题的吗?
是不是通讯出问题?
robotdeng 2012-06-25
  • 打赏
  • 举报
回复
和TIMER没关系, 一般是用了没有初始化的内存块, 或是没有创建实例的类.
newfang 2012-06-25
  • 打赏
  • 举报
回复
应该和用木用timer木有关系吧

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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