热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OPC在调用IOPCServer.AddGroup的时候报出错误“值不在预期范围内”

-------------------------定义的OPC操作类--------------------usingOpcRcw.Da;usingOpcRcw.Comn;usingSy

-------------------------定义的OPC操作类--------------------
using OpcRcw.Da;
using OpcRcw.Comn;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;


namespace WCS_SWKJ
{
    public class ClassOpcSynchro
    {
        public string serverName = "OPC.SimaticNET";
        public IOPCServer pIOPCServer; // OPC server接口
        public Object pobjGroup1; // Pointer to group object 
        public int nSvrGroupID; // server group handle for the added group 
        public System.Collections.Hashtable groupsID = new Hashtable(11); //用于记录组名和组ID号
        public System.Collections.Hashtable hitemsID = new Hashtable(17); //用于记录项名和项ID号
        public Guid iidRequiredInterface;
        public int hClientGroup = 0; //客户组号
        public int hClientItem = 0; //Item号



        /// 
        /// 创建一个OPC Server接口
        /// 
        /// 返回错误信息
        /// 若为true,创建成功,否则创建失败
        public bool Open(out string error)
        {
            ///dt = new S7Connection.DataChange(DataChange);
            ///server = new AsynServer(S7Connection.ServerType.OPC_SimaticNET, dt);

            error="";
            bool success=true;
            Type svrComponenttyp ;
            //获取 OPC Server COM 接口
            iidRequiredInterface = typeof(IOPCItemMgt).GUID;
            svrComponenttyp = System.Type.GetTypeFromProgID(serverName);
            try
            {
                //创建接口
                pIOPCServer =(IOPCServer)System.Activator.CreateInstance(svrComponenttyp);
                error="";
            }
            catch (System.Exception err) //捕捉失败信息
            {
                error="错误信息:"+err.Message;
                success=false;
            }
            return success;
        }

        /// 
        /// 添加组
        /// 
        /// 组名
        /// /创建时,组是否被激活
        /// //组的刷新频率,以ms为单位
        /// 返回错误信息
        /// 若为true,添加成功,否则添加失败
        public bool AddGroup(string groupName, int bActive, int updateRate, out string error)
        {
            error = "";
            int dwLCID = 0x407; //本地语言为英语 
            int pRevUpdateRate = 0;
            float deadband = 0;
            // 处理非托管COM内存
            GCHandle hDeadband;
            IntPtr pTimeBias = IntPtr.Zero;
            hDeadband = GCHandle.Alloc(deadband, GCHandleType.Pinned);

            try
            {
                /*
                pIOPCServer.AddGroup(string szName,
                    int bActive,
                    int dwRequestedUpdateRate,
                    int hClientGroup,
                    IntPtr pTimeBias,
                    IntPtr pPercentDradband,
                    int dwLCID,
                    out int phServerGroup,
                    out int pRevisedUpdateRate,
                    ref Guid riid,
                    out object ppUnk);
                 */
                pIOPCServer.AddGroup(groupName, //组名                                       --
                    bActive,                    //创建时,组是否被激活
                    updateRate,                 //组的刷新频率,以ms为单位
                    hClientGroup,               //客户号
                    pTimeBias,                  //这里不使用
                    (IntPtr)hDeadband,
                    dwLCID,                     //本地语言
                    out nSvrGroupID,            //移去组时,用到的组ID号
                    out pRevUpdateRate,         //返回组中的变量改变时的最短通知时间间隔
                    ref iidRequiredInterface,
                    out pobjGroup1);            //指向要求的接口


                    hClientGroup = hClientGroup + 1;
                    int groupID = nSvrGroupID;
                    groupsID.Add(groupName, groupID);
            }
            catch (System.Exception err) //捕捉失败信息
            {
                error = "错误信息:" + err.Message;
            }
            finally
            {
                if (hDeadband.IsAllocated) hDeadband.Free();
            }
            if (error == "")
                return true;
            else
                return false;
        }

----------------------程序调用类库文件的代码————————————————————————
              string sError = "";

            bool bReturn = MyOPC.Open(out sError);

            if (bReturn == false)
            {
                MessageBox.Show(sError);
            }
            else
            {
                MessageBox.Show("创建OPC服务器成功");
            }
            
            bReturn = MyOPC.AddGroup("groupName", 1, 250, out sError);

            if (bReturn == false)
            {
                MessageBox.Show(sError);
            }
            else
            {
                MessageBox.Show("添加组成功!");
            }

////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////

      在调用这个的时候 报出错误“值不在预期范围内”

       在当时各个变量的数值分别是:--后的数字

      pIOPCServer.AddGroup(groupName, //组名                                       
                  bActive,                    //创建时,组是否被激活                     -- groupname
                    updateRate,                 //组的刷新频率,以ms为单位                 --  250
                    hClientGroup,               //客户号                                   --  0
                    pTimeBias,                  //这里不使用                               --  0
                    (IntPtr)hDeadband,
                  dwLCID,                     //本地语言                                 —— 1031
                    out nSvrGroupID,            //移去组时,用到的组ID号                   ——  0
                    out pRevUpdateRate,         //返回组中的变量改变时的最短通知时间间隔   ——  0
                    ref iidRequiredInterface,
                 out pobjGroup1);            //指向要求的接口                            ——null




9 个解决方案

#1


没用过
帮顶

#2


关注。。。

#3


谢谢大家关注

#4


我用过,出现过类似问题。原因是用.net2005编译.net2003写的程序,可以找你支持OPC的厂家(如西门子),说你用他们的产品,让其发一份.net2005的样例给你

#5


我也遇到了同样的问题,开发环境 c#2008,您是怎么解决的,请指点一下。
我的qq: 170727222
mail: songgb@tisco.com.cn

#6


组的下标,从1开始的。看过OPCDAAuto-2.2.dll的源码

#7


顶不要帖子 沉下去!

#8


建议使用OPCServerClass.OPCGroups.Add(组名)来创建组.

#9


http://www.uipower.com/bbs/thread-148235-1-1.html

推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
妖精蝴蝶74
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有