已经建立了OPC通讯,可以正常的读上数据来,我有两个timer,timer1每秒读OPC数据,timer2每秒向数据库写入OPC的数据,两个timer设定的时间都是1秒,可是记录进去之后经常会隔秒,掉帧。我试过了,如果不读OPC数据,只记录其他的数据,就不会掉帧,所以我怀疑就是读OPC时占用资源太多,请问大家有没有好的解决方案啊?不知道加 do evens 有没有用。

解决方案 »

  1.   

    OPC有异步模式函数调用,使用异步吧,就不会卡.
      

  2.   

    恩,我试试看!
    请问doevents 有用么?
      

  3.   

    在采集数据的等待循环中加入DoEvents应该可以
    不过,为什么不把两个Timer的代码整合到一个Timer中?先采集,再存入。
      

  4.   

    你没用对吧,异步是肯定需要的,至于读,连接好数据源后,在datachaged事件里面采集数据就OK了,用得着用计时器吗?
      

  5.   

    今天试过了,异步是可以读出来了,我想做到读出的每个值对应一个textbox,不间断的现实出来,可是一旦读了2个以上(包括2个)的OPC数据,textbox上的值就乱串了。我是按照西门子的例子做的,有没有哪位能给个成功的实例我参考下啊?多谢了!急!
      

  6.   

    你连接了几个变量?连接哪家的PLC?
    在GroupObj_DataChange中,ItemValues这个数组对应了每个变量的值。OPC编程时需要点经验的,慢慢来
      

  7.   

    你可以慢慢地看文档进行试验,我当年也这么过来的,而且我当时并没有硬件,比较辛苦,是与一个MM在网络上合作开发.现在确实是忘了具体的语法,但是知道这个方案.我记得OPC的二次开发并不是非常复杂,接口那些都还比较不错,多看文档以及示例就会明白的.
      

  8.   

    多谢楼上各位兄弟
    我用的是西门子的PLC
    西门子本身就有sample的,我就是按照异步的sample做的,结果我30个数据,在textbox上却只能显示29个,而且有的出现了错位和串值的现象。
    之前我做的同步通讯的就没有这个问题。
    因为时间有限,马上要交工了,所以急死啦~~~哎~
    我再仔细试试吧~~~