联系我们

联系人:黄勇(先生)

联系手机:13701633515

固定电话:31660605

企业邮箱:77956468@qq.com

联系我时,请说是在地方电气网上看到的,谢谢!

今日最新资讯
热门资讯
地方电气网资讯
    西门子变频器6SL3211OAB125UB1
    发布者:黄工  发布时间:2016-04-09 00:10:40  访问次数:47

    西门子变频器6SL3211OAB125UB1,西门子变频器6SL3211OAB125UB1

                               {心中有空间,梦想就有可能}

                     {西门子与客户携手,让关键所在,逐一实现}

    联   系   人: 黄勇《黄工》   24小时联系手机:  13701633515
    直线销售 电 话: 021-31660605    在 线 商 务 QQ:  77956468 
    单位:台                                                                                  产品单价:电议

    供货数量:不限                                                                      最小定量:1

    包装说明:齐全                                                                      产品规格:全新原装

    步进可调的稳压开关电源
    {开关电源行业门户网}:开关电源是利用现代电力电子技术,控制开关管开通和关断的时间比率,维持稳定输出电压的一种电源。由于拥有较高的效率和较高的功率密度,开关电源在现代电子系统中的使用越来越普及。开关电源高频化、模块化和智能化是其发展方向。其中,步进可调、实时显示是开关电源智能化研究方向之一。现设计开关电源,技术指标为:输出电压30V至36V可调,最大输出电流2A,有过流保护功能,能对输出电压进行键盘设定和步进调整、步进值1V,并能实时显示输出电压和电流的开关稳压电源。
     
    1 总体设计方案
        采用AT89S52单片机为控制核心,对普通的开关电源控制部分进行优化设计,并通过软件编程实现了对开关电源的智能控制。设计中采用隔离变压器将市电变压后通过整流滤波送至DC-DC升压变换器,经过一系列的控制整合电路之后可实现设计要求。系统总体框图如图1.1所示。

    1.1 DC-DC主回路拓扑
        采用UC3842和MAX4080构成DC-DC转换电路。UC3842是一块功能齐全、较为典型的单端电流型PWM控制集成电路,内包含误差放大器、电流检测比较器、PWM锁存器、振荡器、内部基准电源和欠压锁定等单元。电流控制型升压DC-DC转换电路,外接元器件少、控制灵活、成本低,输出功率容易做到100W以上。当然,DC-DC转换电路也可以采用成品模块,若用PI公司生产的DPA-Switch设计开关电源具有集成度高、外围电路简单、发热量少、性能指标优良。
       
        由UC3842设计的DC-DC升压电路直接用误差信号控制电感峰值电流,间接地控制PWM脉冲宽度,达到控制输出端电压的目的。开关管以UC3842设定的频率周期开闭,使电感L储存能量并释放能量。当开关管导通时,电感充电,把能量储存在L中。当开关截止时,L产生反向感应电压,通过二极管把储存的电能释放到输出电容器中。输出电压由传递的能量多少来控制,而传递能量的多少由通过电感电流的峰值来控制。具体设计电路如图1.2所示。

    1.2 保护电路
        在大电流的情况下容易损坏芯片,所以需要对大电流的情况给予电路保护。设计中采用单片机控制继电器的通断来控制电路中的电流,对输出电路电流采样,采样值与额定值比较,反馈比较电路如图1.3所示,当电流大于2.5A时,则产生信号使单片机进入中断处理程序,使继电器起动,实现DC-DC电路的断电,从而达到保护电路的作用。单片机控制电路如图1.4所示。该方案中单片机控制继电器的吸合时间短,而且易于实现。


    1.3 数字设定及显示电路
        采用AT89S52单片机和集成芯片CD4051实现程控和步进,用单片机控制键盘实现输出电压的初始设定,可以实现电压的步进1V,步减1V。使用液晶显示输出电压和电流,可拨动转换开关来选择显示电压/电流模式。
    1.4 程序设计
        在设计好相关电路的基础上,通过编程由单片机对开关电源进行智能控制。系统由单片机AT89S52控制,电源系统具有"+‰"和"-"步进功能,步进幅度为1V。同时AT89S52结合继电器等电路实现了电路过流保护功能,并且能实时显示开关电源的输出电压和电流。程序总流程图和中断流程图如图1(5,6)所示。

    2 提高效率
        如何提高开关电源的效率显得尤为重要。在提高开关电源的效率上采取了如下措施。
    2.1 DC-DC转换电路中电感在很大程度上影响系统的效率。市场上很难买到符合要求的电感,在绕制时对电感磁芯和漆包线的要求非常高,应将输出电压纹波降到最小。
    2.2 DC-DC转换电路中开关管采用MOS管取代双极性晶体管,串联栅极电阻将衰减由MOS输入电容、栅一源电路引线电感所产生的高频寄生振荡。可有效提高转换效率,若选用几个MOS管IRF530并联,可进一步提高效率。
    2.3续流二极管选择肖特基二极管,其开启时间短、管压降小,可使电感存储能量大,有利于提高电源转换效率。
    2.4二极管、电感和MOS管的栅极最好尽可能地靠近焊接,这样可以减少损耗,有利于提高系统的效率。
     
    3 测试数据和分析
    3.1 电压调整率SU
        电压调整率SU指U2在指定范围内变化时,输出电压U0的变化率。用自耦调压器调节U2从15V到21V之间变化,在输出电流为2A时候,测量出输出电压,从而得到电压调整率SU。

     
    3.2 负载调整率SI
        负载调整率SI指I0在指定范围内变化时,输出电压U0的变化率。改变负载电阻,使输出电流在0~2A以内变化时,得到负载调整率数据如下。

    3.3 DC-DC变换器效率
        效率η=P0/PIN,其中P0=U0I0,PIN=UINIIN。用毫伏表在DC-DC模块端口直接读出输入和输出电压电流各值,可得变换器效率。

    3.4 纹波电流
        在开关电源设计中,MOS管源极接上1kΩ的电阻,电源滤波处加无极性电容,滤除高频纹波。电流纹波实测数据如下

     
        基于AT89S52的开关稳压电源具有良好智能控制和步进功能,测试数据表明电源系统具有较高的电压调整率和负载调整率,并具有很高的效率,电源在最大输出功率下能连续安全工作足够长的时间。当然可通过对MOS管及相关元器件选择、电路优化设计,或选择DC-DC成品模块可进一步提高电源性能。

    西门子S7-200编程电缆制作

    西门子S7-200编程电缆100%能用,绝对无损坏电脑和PLC,安全可靠。(注:681是电阻,它的阻值是680欧姆;682是电阻,它的阻值是6.8K) 

    6ES7211-0AA23-0XB0 SIMATIC S7-200 CPU211,DC/DC/DC,6输入/4输出
    6ES7211-0BA23-0XB0 SIMATIC S7-200 CPU211,AC/DC/Rly,6输入/4输出
    6ES7212-1AB23-0XB0 SIMATIC S7-200 CPU222,DC/DC/DC,8输入/6输出
    6ES7212-1BB23-0XB0 SIMATIC S7-200 CPU222,AC/DC/Rly,8输入/6输出
    6ES7214-1AD23-0XB0 SIMATIC S7-200 CPU224,DC/DC/DC,14输入/10输出
    6ES7214-1BD23-0XB0 SIMATIC S7-200 CPU224,AC/DC/Rly,14输入/10输出
    6ES7214-2AD23-0XB0 SIMATIC S7-200 CPU224XP,DC/DC/DC,14输入/10输出,集成2AI/1AO
    6ES7214-2AS23-0XB0 SIMATIC S7-200 CPU224XPsi,DC/DC/DC,14输入/10输出,集成2AI/1AO
    6ES7214-2BD23-0XB0 SIMATIC S7-200 CPU224XP,AC/DC/Rly,14输入/10输出(NPN输出),集成2AI/1AO
    6ES7216-2AD23-0XB0 SIMATIC S7-200 CPU226,DC/DC/DC,24输入/16输出
    6ES7216-2BD23-0XB0 SIMATIC S7-200 CPU226,AC/DC/Rly,24输入/16输出
    6ES7212-1AB23-0XB8 S7-200CN CPU222,DC/DC/DC,8输入/6输出
    6ES7212-1BB23-0XB8 S7-200CN CPU222,AC/DC/Rly,8输入/6输出
    6ES7214-1AD23-0XB8 S7-200CN CPU224,DC/DC/DC,14输入/10输出
    6ES7214-1BD23-0XB8 S7-200CN CPU224,AC/DC/Rly,14输入/10输出
    6ES7214-2AD23-0XB8 S7-200CN CPU224XP,DC/DC/DC,14输入/10输出,集成2AI/1AO
    6ES7214-2AS23-0XB8 S7-200CN CPU224XPsi,DC/DC/DC,14输入/10输出,集成2AI/1AO
    6ES7214-2BD23-0XB8 S7-200CN CPU224XP,AC/DC/Rly,14输入/10输出(NPN输出),集成2AI/1AO
    6ES7216-2AD23-0XB8 S7-200CN CPU226,DC/DC/DC,24输入/16输出
    6ES7216-2BD23-0XB8 S7-200CN CPU226,AC/DC/Rly,24输入/16输出
    6ES7221-1BF22-0XA0 SIMATIC S7-200, EM221 数字量输入模块, 8输入24V DC
    6ES7221-1BH22-0XA0 SIMATIC S7-200, EM221 数字量输入模块, 16输入24V DC
    6ES7221-1EF22-0XA0 SIMATIC S7-200, EM221 数字量输入模块, 8输入 交流120/230V AC
    6ES7222-1BD22-0XA0 SIMATIC S7-200, EM222 数字量输出模块,4输出24V DC 5A
    6ES7222-1BF22-0XA0 SIMATIC S7-200, EM222 数字量输出模块,8输出24V DC
    6ES7222-1EF22-0XA0 SIMATIC S7-200, EM222 数字量输出模块,8输出 交流120/230V AC
    6ES7222-1HD22-0XA0 SIMATIC S7-200, EM222 数字量输出模块,4输出继电器 10A
    6ES7222-1HF22-0XA0 SIMATIC S7-200, EM222 数字量输出模块,8输出继电器
    6ES7223-1BF22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,4输入 24V DC/4输出 24V DC
    6ES7223-1BH22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,8输入 24V DC/8输出 24V DC
    6ES7223-1BL22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,16输入 24V DC/16输出 24V DC
    6ES7223-1BM22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,32输入 24V DC/32输出 24V DC
    6ES7223-1HF22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,4输入 24V DC/4输出继电器
    6ES7223-1PH22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,8输入 24V DC/8输出继电器
    6ES7223-1PL22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,16输入 24V DC/16输出继电器
    6ES7223-1PM22-0XA0 SIMATIC S7-200, EM223 数字量输入/输出模块,32输入 24V DC/32输出继电器
    6ES7231-0HC22-0XA0 SIMATIC S7-200, EM231 模拟量输入模块,4输入
    6ES7231-0HF22-0XA0 SIMATIC S7-200, EM231 模拟量输入模块,8输入
    6ES7231-7PB22-0XA0 SIMATIC S7-200, EM231 热电阻模块,2输入
    6ES7231-7PC22-0XA0 SIMATIC S7-200, EM231 热电阻模块,4输入
    6ES7231-7PD22-0XA0 SIMATIC S7-200, EM231 热电偶模块,4输入
    6ES7231-7PF22-0XA0 SIMATIC S7-200, EM231 热电偶模块,8输入
    6ES7232-0HB22-0XA0 SIMATIC S7-200, EM232 模拟量输出模块,2输出
    6ES7232-0HD22-0XA0 SIMATIC S7-200, EM232 模拟量输出模块,4输出
    6ES7235-0KD22-0XA0 SIMATIC S7-200, EM235 模拟量输入输出模块,4输入/1输出
    6ES7253-1AA22-0XA0 SIMATIC S7-200, EM253 定位模块
    6ES7277-0AA22-0XA0 SIMATIC S7-200, EM277 Profibus-DP 从站模块

    • SIMATIC S7 系列的新型模块化微型控制器
    • 包括:
      • 控制器配备集成的 PROFINET IO 控制器接口,用于SIMATIC 控制器、人机界面、编程设备或其他自动化组件之间的通讯
      • 带 PROFIBUS DP 主站接口的通讯模板
      • 通讯模块 PROFIBUS DP 从站接口
      • 用于连接到 GSM/G 移动电话网络的 GPRS 模块
      • 集成的 web 服务器,带有标准和用户特定的网页
      • 数据记录功能,用于在运行时从用户程序归档数据
      • 强大的集成技术功能,如计数、测量、闭环控制和运动控制
      • 集成数字量和模拟量 I/O
      • 直接在控制器中使用的信号板
      • 用于通过输入/输出通道扩展控制器的信号模块
      • 用于通过附加通讯接口扩展控制器的通讯模块
      • 附件,例如,电源、开关模块或 SIMATIC 存储卡
    • 以最低的成本提供最大自动化性能的微型控制器。
    • 安装、编程和操作都非常简单。
    • 大规模集成,节省空间,功能强大。
    • 适用于小型到中型的自动化工程应用。
    • 既可用于简单的控制任务,也可以用于复杂的自动化任务。
    • 所有 CPU 都可在独立模式、网络和分布式结构内使用。
    • 适用于可编程控制器过去在经济上不可行的应用。
    • 具有出色的实时性能和功能强大的通讯选件

    SIMATIC S7-1200 是一款适用于机械设备制造以及工厂构建中开环和闭环控制任务的控制器。它可实现最大的自动化性能以及最为经济的成本。

    由于同时采用了高性能的紧凑型模块化设计,SIMATIC S7-1200 适用于各种自动化应用。其使用范围从更换继电器和接触器一直到网络和分布式结构中复杂的自动化任务。

    S7-1200 还不断开辟了以前由于经济原因而开发的特殊电子元件领域。

    应用示例包括,例如:

    • 布局系统
    • 输送系统
    • 电梯和自动扶梯
    • 材料运输设备
    • 金属加工机械
    • 包装机械
    • 印刷机器
    • 纺织机械
    • 混合系统
    • 淡水处理厂
    • 污水处理厂
    • 外部显示屏
    • 配电站
    • 室温控制
    • 加热/冷却系统控制
    • 能量管理
    • 消防系统
    • 空调系统
    • 照明控制
    • 泵的控制
    • 安防/门禁系统

    SIMATIC S7-1200 系列由以下模块组成:

    • 3 个控制器,具有不同类型的分级性能,可作为宽范围的交流或直流控制器
    • 2 个信号板(模拟和数字),用于直接在 CPU 上进行的低成本模块化控制器扩展,安装空间保持不变
    • 13 个不同的数字和模拟信号模块
    • 2 个通讯模块 (RS232/RS485),用于通过点对点连接进行的通讯
    • 带有 4 个端口的以太网开关,用于执行许多不同的网络拓扑
    • PS 1207 稳定电源装置,115/230 V 交流线路电压,24 V 直流额定电压

    机械特点

    • 坚固耐用的紧凑型塑料外壳
    • 易于接触的连接和控制元件,用前挡板保护
    • 可拆卸连接端子,也适用于模拟或数字扩展模板

    设备功能

    • 符合国际标准:
      SIMATIC S7-1200 符合 VDE、UL,、CSA 和 FM 等标准(Class I、Cat 2;危险区组别 A、B、C 和 D,T4A)。生产中采用的质量管理体系已通过 ISO 9001 认证
    通讯

    SIMATIC S7-1200 配备不同的通讯机制:

    • 集成的 PROFINET 接口
    • 通过通讯模板实现点对点连接

    PROFINET 接口

    集成的 PROFINET 接口允许进行下列通讯:

    • 编程器
    • 人机接口(HMI)设备
    • 其他 SIMATIC 控制器

    支持以下协议:

    • TCP/IP
    • ISO-on-TCP
    • S7 通讯

    运用VC#编程通过OPC方式实现PC机与西门子PLC通讯

    1、 配置OPC服务器
    对于服务器的配置与同步通讯的配置一样,这里不需再讲解,若有不清楚的,可以参阅之前发布的<运用VC#编程通过OPC方式实现PC机与西门子PLC通讯>
    2、 OPC编程
    变量组、项的命名规则与同步通讯的一样,这里不再描叙,下面主要就开发一个异步通讯类 AsynServer来讲解如何编程。
    <1>、引用
    在VC#开发环境中添加对OpcRcw.Da库以及OpcRcw.Comn库的引用,该库属于.NET库,不属于COM库,西门子虽然编写了类库,以提供对.NET平台的支持,但这些类库仍然难于编程,里面包含了大量的在托管和非托管区传输数据,因此我们需要在它的基础上再开发一个类库,以简化以后的编程,首先在类的开头使用命名空间:
    using OpcRcw.Comn;
    using OpcRcw.Da;
    using System.Runtime.InteropServices;
    using System.Collections;
    <2>、编程
    异步编程的原理就是在OPC服务器那边检测当前活动的变量组,一但检测到某一个变量,譬如变量Q0.0从1变成0,就会执行一个回调函数,以实现针对变量发生变化时需要实现的动作,在这里可以采用委托来实现该功能。
    1、 在命名空间的内部、类 AsynServer声明之前添加委托的申明:
    // 定义用于返回发生变化的项的值和其对应的客户句柄
    public delegate void DataChange(object[] values,int[] itemsID);
    2、 该类继承于西门子提供的库接口IOPCDataCallback
    public class AsynServer:IOPCDataCallback
    在类的开头部分声明变量:
    struct groupStru
    {
    public int groupID;
    public object groupObj;
    }
    internal const int LOCALE_ID = 0x407; //本地语言
    private Guid iidRequiredInterface;
    private string serverType="";
    private int hClientGroup = 0; //客户组号
    private int nSvrGroupID; // server group handle for the added group 
    private Hashtable hashGroup; //用于把组收集到一起
    private int hClientItem=0; //Item号
    3、编写构造函数,接收委托参数已确定当数据发生变化时需要执行的方法入口点:
    //创建服务器
    //svrType 服务器类型的枚举
    //dataChange 提供用于在数据发生变化时需要执行的函数入口
    public AsynServer(ServerType svrType,DataChange dataChange)
    {
    switch(svrType)
    {
    case ServerType.OPC_SimaticHMI_PTPR
    serverType="OPC.SimaticHMI.PTPro";break;
    case ServerType.OPC_SimaticNET:
    serverType="OPC.SimaticNET";break;
    case ServerType.OPC_SimaticNET_DP:
    serverType="OPC.SimaticNET.DP";break;
    case ServerType.OPC_SimaticNET_PD:
    serverType="OPC.SimaticNET.PD";break;
    case ServerType.OPCServer_WinCC:
    serverType="OPCServer.WinCC";break;
    }
    hashGroup=new Hashtable(11);
    dtChange=dataChange;
    }

    4、创建服务器
    // 创建一个OPC Server接口
    //error 返回错误信息
    //若为true,创建成功,否则创建失败
    public bool Open(out string error)
    {
    error="";bool success=true;
    Type svrComponenttyp ;
    //获取 OPC Server COM 接口
    iidRequiredInterface = typeof(IOPCItemMgt).GUID;
    svrComponenttyp = System.Type.GetTypeFromProgID(serverType);
    try
    {
    //创建接口
    pIOPCServer =(IOPCServer)System.Activator.CreateInstance(svrComponenttyp);
    error="";
    }
    catch (System.Exception err) //捕捉失败信息
    {
    error="错误信息:"+err.Message;success=false;
    }
    return success;
    }
    5、 编写添加Group的函数
    ///


    /// 添加组
    /// 
    /// 组名
    /// /创建时,组是否被激活
    /// //组的刷新频率,以ms为单位
    /// 返回错误信息
    /// 若为true,添加成功,否则添加失败
    public bool AddGroup(string groupName,int bActive,int updateRate,out string error)

    error="";bool success=true;
    int dwLCID = 0x407; //本地语言为英语 
    int pRevUpdateRate;
    float deadband = 0;
    // 处理非托管COM内存
    GCHandle hDeadband;
    IntPtr pTimeBias = IntPtr.Zero;
    hDeadband = GCHandle.Alloc(deadband,GCHandleType.Pinned);
    try
    {
    pIOPCServer.AddGroup(groupName, //组名
    bActive, //创建时,组是否被激活
    updateRate, //组的刷新频率,以ms为单位
    hClientGroup, //客户号
    pTimeBias, //这里不使用
    (IntPtr)hDeadband,
    dwLCID, //本地语言
    out nSvrGroupID, //移去组时,用到的组ID号
    out pRevUpdateRate, //返回组中的变量改变时的最短通知时间间隔
    ref iidRequiredInterface,
    out pobjGroup1); //指向要求的接口
    hClientGroup=hClientGroup+1; 
    groupStru grp=new groupStru();
    grp.groupID=nSvrGroupID;grp.groupObj=pobjGroup1;
    this.hashGroup.Add(groupName,grp);//储存组信息
    // 对异步操作设置回调,初始化接口
    pIConnectionPointContainer = (IConnectionPointContainer)pobjGroup1;
    Guid iid = typeof(IOPCDataCallback).GUID;
    pIConnectionPointContainer.FindConnectionPoint(ref iid,out pIConnectionPoint);
    pIConnectionPoint.Advise(this,out dwCookie);
    }
    catch (System.Exception err) //捕捉失败信息
    {
    error="错误信息:"+err.Message;success=false;
    }
    finally
    {
    if (hDeadband.IsAllocated) hDeadband.Free();
    }
    return success;
    }

    6、 编写激活、或者取消激活组的函数

    在同步编程中对于组的激活或者取消激活没有实质的意义,但在异步通讯编程中却异常重要,这是因为OPC服务器只对当前处于活动状态的组中的变量进行监控,同时这也是很有必要的,因为我们可以把不同界面中的变量编程不同的组,即同一界面中的变量规成一个组,而在某一时刻提供给用户的只有一个界面,让该界面中用到的组处于活动状态,这样执行委托调用时只会执行于该界面中有关的变量检测,而如果让所有的组处于活动状态,则当前没有显示给用户的界面用到的变量若发生变化也会触发对委托函数的调用,这根本是没有必要的,同时会大大降低程序的性能,请严格控制组的激活。
    ///
    /// 激活或者取消激活组
    /// 
    /// 指定组名
    /// true为激活,false为取消激活
    /// 若有错误,返回错误信息
    /// 若为true,添加成功,否则添加失败
    public bool AciveGroup(string groupName,bool toActive,out string error)
    {
    error="";bool success=true;
    //通过名称获取组
    object grp=((groupStru)hashGroup[groupName]).groupObj;
    IOPCGroupStateMgt groupStateMgt=(IOPCGroupStateMgt)grp;
    //初始化传递参数
    IntPtr pRequestedUpdateRate = IntPtr.Zero; //由客户指定的Item更新间隔时间
    int nRevUpdateRate = 0; //由服务器返回的能够更新的最短时间间隔
    IntPtr hClientGroup = IntPtr.Zero; //客户组
    IntPtr pTimeBias = IntPtr.Zero;
    IntPtr pDeadband = IntPtr.Zero;
    IntPtr pLCID = IntPtr.Zero; 

    // 激活或者取消激活组
    int nActive = 0; 
    GCHandle hActive = GCHandle.Alloc(nActive,GCHandleType.Pinned);
    if(toActive)
    hActive.Target = 1;
    else
    hActive.Target = 0;
    try 
    {
    groupStateMgt.SetState(pRequestedUpdateRate,out nRevUpdateRate,hActive.AddrOfPinnedObject(),pTimeBias,pDeadband,pLCID,hClientGroup); 
    }
    catch(System.Exception err)
    {
    error="错误信息:"+err.Message;success=false;
    }
    finally
    {
    hActive.Free(); 
    }
    return success;
    }

    7、 向指定的组中添加变量的函数
    ///
    /// 向指定的组添加一系列项
    /// 
    /// 指定组名
    /// 完整的item名数组
    /// 由服务器返回读写数据时需要使用的item号
    /// 无错误,返回true,否则返回false
    public bool AddItems(string groupName,string[] itemsName,int[] itemsID)
    {
    bool success=true;
    OPCITEMDEF[] ItemDefArray=new OPCITEMDEF[itemsName.Length];
    for(int i=0;i {
    hClientItem=hClientItem+1; //客户项自动加1
    ItemDefArray[i].szAccessPath = ""; // 可选的通道路径,对于Simatiic Net不需要。
    ItemDefArray[i].szItemID = itemsName[i]; // ItemID, see above
    ItemDefArray[i].bActive = 1; // item is active
    ItemDefArray[i].hClient = hClientItem; // client handle ,在OnDataChange中会用到
    ItemDefArray[i].dwBlobSize = 0; // blob size
    ItemDefArray[i].pBlob = IntPtr.Zero; // pointer to blob 
    ItemDefArray[i].vtRequestedDataType = 4; //DWord数据类型
    }
    //初始化输出参数
    IntPtr pResults = IntPtr.Zero;
    IntPtr pErrors = IntPtr.Zero;
    try 
    {
    // 添加项到组
    object grp=((groupStru)hashGroup[groupName]).groupObj;
    ((IOPCItemMgt)grp).AddItems(itemsName.Length,ItemDefArray,out pResults,out pErrors);

    int[] errors = new int[itemsName.Length]; 
    IntPtr pos = pResults;
    Marshal.Copy(pErrors, errors, 0,itemsName.Length);
    for(int i=0;i {
    if (errors[i] == 0)
    {
    OPCITEMRESULT result = (OPCITEMRESULT)Marshal.PtrToStructure(pos, typeof(OPCITEMRESULT));
    itemsID[i] = result.hServer; 
    pos = new IntPtr(pos.ToInt32() + Marshal.SizeOf(typeof(OPCITEMRESULT)));
    }
    else
    {
    String pstrError;
    pIOPCServer.GetErrorString(errors[0],0x407,out pstrError); 
    success=false;
    break;
    }
    }
    SetItenClient(groupName,itemsID,itemsID); //要求始终只有一个组被激活,才不会引起冲突。
    }
    catch (System.Exception err) // catch for error in adding items.
    {
    success=false;
    //error="错误信息:"+error+err.Message;
    }
    finally
    {
    // 释放非托管内存
    if(pResults != IntPtr.Zero)
    {
    Marshal.FreeCoTaskMem(pResults);
    pResults = IntPtr.Zero;
    }
    if(pErrors != IntPtr.Zero)
    {
    Marshal.FreeCoTaskMem(pErrors);
    pErrors = IntPtr.Zero; 
    }
    }
    return success;
    }

来源:上海赞国
免责声明:地方电气网转载作品均注明出处,本网未注明出处和转载的,是出于传递更多信息之目的,并不意味 着赞同其观点或证实其内容的真实性。如转载作品侵犯作者署名权,或有其他诸如版权、肖像权、知识产权等方面的伤害,并非本网故意为之,在接到相关权利人通知后将立即加以更正。联系电话:0571-87774297。
0571-87774297