关于很多点数据采集的资源问题 点击:1689 | 回复:17



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2004-07-01 14:48:00
楼主
请教高手一个问题: 如果现场数据采集点很多,大约2000多个点,要读写,server端已定,请问在客户端如果直接使用读写函数,那么会不会占用很大cpu资源??如果是,怎么样在客户端解决?



kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2004-07-08 10:39:00
1楼
数据监视,也就是读,最好采用订阅方式。 另外,具体情况,具体分析,2000个数据点不算很多。

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-10 21:55:00
2楼
所谓订阅方式是不是采用异步读方式???

kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2004-07-12 08:22:00
3楼
确切地说不是一回事,异步读是客户程序发送一个读请求后立即返回,读取结果依靠回调函数获得,是“一次性”的; 订阅方式是客户程序发送请求,即订阅后立即返回,服务器不断地将数据通过回调函数传递回来,直到客户程序取消订阅或者服务器自行退出。 其实从性能上看二者差不多,即使是同步访问,也仅仅是阻塞客户程序线程而已,一般不会给服务器造成额外负担,更不会大量占用客户计算机的系统资源。 可能影响性能的,是调用读函数时,指定了从设备读取,而不是从缓冲区读取,这可能会使得一些服务器性能下降,当然了,这与具体的服务器实现有关。

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-12 11:41:00
4楼
噢,我现在用的就是订阅方式,采用异步读,用回调函数自动返回,不过我把它有封装成了delphi下的控件,由用户来完成。 采用同步方式,发现数据量大的话,资源占用很厉害。

kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2004-07-12 13:32:00
5楼
“资源占用很厉害”是CPU还是内存?是客户还是服务器占用?这个应该不难分析。

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-12 15:16:00
6楼
cpu占用100%!

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2004-07-13 08:32:00
7楼
影响CPU占用率的因素有: 1. 工具包是否有好的查找算法. 2. 你的回调中或读数据中是否作过优化

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-13 09:22:00
8楼
邓志群: 我是这样的:服务器端是无法修改的,用的是西门子的opc,客户端是我开发的,我先添加了1000个Items(用For循环),然后再回调函数中,用数组返回。 想问一下:如何做优化? 谢谢!

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-13 09:25:00
9楼
还想问一下: 对于同步方式,在请求数据量大的情况下,是不是会占用很大资源。 而采用回调函数方式,怎可在一定程度上解决这个问题?

kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2004-07-13 09:39:00
10楼
你处理同步读返回结果的方式和在回调函数中的处理方式一样吗? 理论上讲同步/异步读对系统资源的占用应该差不多的,同步虽然阻塞,但并不占用CPU,除非OPC服务器内部对同步/异步读的实现不一样。 另外提问时请将问题描述得详细些,比如至少要说明100%的CPU是谁占用的,客户还是服务器?

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-14 11:31:00
11楼
呵呵,服务器端内存不断增加,客户端资源100%,运行10几个小时,死机。另,由于封装成控件,程序流程大致是:先添加组,(后边写成了一函数)然后添加条目,采用同步方式取数据,返回,移除该条目。 用户使用该控件,直接调用函数,得到返回值,这段是放在定时器当中执行的。 请看看,这样有什么问题吗?

kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2004-07-14 13:29:00
12楼
客户端资源100%是什么意思?客户端计算机CPU使用率100%吗? 可能是定时器间隔过短。 感觉西门子的OPC性能还可以的,不应该有内存泄漏的问题。 你的客户程序中每次调用都建立新group吗?如果是这样而又没有删除的话可能导致服务器中group对象越来越多。

问题1

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 16回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2003年11月27日
发表于:2004-07-15 10:05:00
13楼
不是,初始化的时候,组只创建一次,程序退出时,释放! 对的,客户端的确是CPU占用100%

kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2004-07-15 16:28:00
14楼
尝试加大定时器时间间隔。 另外调用同步读接口函数后释放内存资源了吗?比如ppItemValues之类。不过这个即使不释放也不大会造成服务器端内存泄漏的。

窒息的鱼

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 16回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2003年7月30日
发表于:2004-07-20 13:53:00
15楼
请教困惑: 请问你的客户端使用什么开发的?是工具包还是根据da规范自己写的呀?希望能给点指点!谢谢!

Lucifer_008

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2004年3月29日
发表于:2004-08-03 14:20:00
16楼
关于:西门子的opc 有没有任何资料呀?或者说我改掌握些什么呢? 最近想通过 以太网建立 PC与西门子PLC之间通讯 苦于无门 高手指教呀!

EMAIN

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 66回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2003年10月31日
发表于:2004-09-17 22:19:00
17楼
TO窒息的鱼: 用VB很容易就可实现客户端访问,而且现在网上到处都是VB写的客户端源程序,基本不用修改就可使用的.

热门招聘
相关主题

官方公众号

智造工程师