案例分析_提高InTouch速度

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

案例分析提高InTouch的I/O显示速度状况:

一客户系统由7套S5-155 组成,通讯采用Siemens的H1网络,监控软件为DOS下的COROS,硬件为286的机器,已投产12年。这些硬件和软件已经无法作备品备件了,现客户要求改造HMI,合并采集一些其它重要数据。

我们的方案为:

HMI软件采用Wonderware的InTouch 10,I/O驱动采用INA T的S5-OPCServer。采用INAT的OPCServer的原因在于它是用普通的以太网卡,无须Siemens的专用CP卡,且网络可以经过改造成RJ45格式的网线,这样以后的备品备件将没有任何问题,软件驱动没有损坏的后顾之忧,且网络上可以下载试用版,测试后发现功能强大,兼容性高,性能稳定。

软件部署分析:

由于S5的H1通信极其繁琐,它需要配置CP卡(通过专用软件CP143,在线下载配置参数到CP卡里),在CPU里还需要编写以太网的通讯程序,所以尽量少改动原来的代码。我们经过努力,已经可以在CPU里编写好合适的代码,配置合适的CP参数,能够让

OPCServer存取到S5 PLC里的信息。这样可以做到原来的COROS与现在的InTouch同时工作。S5 PLC的通讯有一个特点就是,每个连接都需要单独编成,所以使用一台OPCServer 工作,作为服务器,供所有的客户端存取数据。至于说到冗余,则需要另外备份一台OPCServer服务器,在主服务器出现故障后,通过软件切换到备份服务器上,做到冷备冗余,这样也可以满足生产的需要。

按理这样的工作结束,这个工程就可以结束了,但后来出现的问题却让我们无法想象。

主要的表现在:

数据的更新速度太慢!COROS的显示速度一般1秒可以全部更新完毕,但InTouch的速度却需要4-5秒,这个速度对于轧钢是无法接受的,中间的一些报警信息由于速度慢而导致丢失。

分析:

经过现场的调研,发现7个PLC的表现并非一样,其中6个PLC的速度用户不太关心,主要关心的是现场轧钢的速度,每个轧钢机架的状态,设定的参数,活套的参数等。所有这些参数本来在不同PLC里,但PLC的编程人员已经将他们汇总到一个叫REF的PLC中,所以我们只需要解决这个PLC的速度慢问题就可以达到用户要求了。

通过通讯连路的信息包分析看到,OPC的工作原理如下:

1 一个连接中所有的信息通过优化和组合,将有相同DB的Tag信息整合在一起,生成一个读该DB块的请求,不同DB上的Tag信息将整合到对不同的DB块的读写上,最理想的情况是:每个DB块只需要一次读DB的请求。

这些请求放到队列里,依次向PLC的CPU发出1条请求,获得CPU的反馈后进行下一个请求。CPU无法处理一个连接的多个请求。

在我们的项目里,InTouch的访问Tag信息中,竟然需要访问25个以上的DB块才能完整。这样一次循环,需要读25次以上。所以造成速度奇慢。

COROS采用的是专用方法,可以一次将数据读出,这样就可以大幅度地提高速度。但COROS的读,并非在数据块里,所以他的方法无法使用。

2一般HMI的设计可以多建立几个TOPIC,每个TOPIC的扫描速度可以灵活的设置,但这个项目里失效,因为只有一条连接通道,参数无法分开设置。

解决方法

1在PLC中增加OPC Server的连接通道数,这样可以显著的提高速度

2减少访问DB块数量。

改动程度比较

2种方法都需要修改PLC的程序,其中的增加连接数需要:

⏹增加H1的连接数,需要修改CP的配置参数,CP需要停机,同时还需要重新写入

到EPROM卡里,复杂。

⏹还需要修改CPU中的程序,要调用对这个连接的服务。

不得已不采用。

第二方法:

将DB块数据集中到一个DB块里,无须停机,可在线进行,由于是数据传输,没有逻辑,所以程序改动相对较小,更容易被用户接受。

事实证明这种方法是有效的,通过修改,原来的25个DB块访问,变成10个DB块的访问,速度也由原来的4-5秒,降低到2.5秒左右。因为对于往PLC里写的DB块是无法整合的,始终不能降低到最低。

挑战极限

通过上述的优化,速度大幅提高,但用户还是不接受,该如何办? 只有2条路可走,那就是增加连接数,进一步下降DB块的数量。

通过分析我们发现:

设定参数只有在修改时才需要涉及到,正常工作后数值是不动的,但从定义不同的访问速度方法不能使用。能否可以在需要写的时候访问这些DB块,而正常情况下不访问它?

对InTouch作如下的试验:

1对于需要写入的Tag如IOTag1,它的值不用来显示。显示修改的值是一个Memory 型的,在用户输入时,Script里写入下的代码

IOTag1 = M_Tag1;

运行的结果是,该IOTag1仍然在扫描的Tag里,看样子Wonderware的编译器检测到了该Tag是必须激活的。方法失败!

2在Script里不要显式地出现IOTag1,而是去CALL Function,然后在Quick Function里出现

IOTag1 = M_Tag1;

运行结果是:程序被执行,但I/O Server里并没有真正写到I/O里,失败!

3 Wonderware的技术支持建议可以使用wwpoke函数,将数据写到相应得地址里。编写程序,测试成功!仔细参考wwpoke函数的说明,发现他使用的DDE的功能,在本机的I/OServer里测试成功,但在I/OServer在不同的机器上却可能存在问题。这个方法可以进一步探讨。

4通过在I/Otag写入前,调用IOSetItem函数,指向正确的写入位置,然后给IOTag = value,强迫写入,执行完后,再调用IOSetItem函数将它指向另外的地方。测试成功!该方法的好处在于不使用DDE的WWPOKE,是可以通过内部的suitelink协议写入,可以对I/O 服务器在机外的情况。

通过上述的测试,我们的方法是:

设定参数通过修改PLC程序,将他移动到显示块里,而写的参数,运行时刻立即激活,写入后,立即释放。这样的话可以做到ref PLC在正常情况下只访问2个DB块的目标!

通过试验,最终速度已经达到0.9-1.2秒间,用户基本接受。

这也是InTouch的最好表现了。

相关文档
最新文档