国产亚洲精品俞拍视频_91热久久免费频精品99欧美_91色视频在线观看_性做久久久久久久久男女

PLC企業資訊
    西門子變頻器6SL3211OAB125UB1
    發布者:黃工  發布時間:2016-04-09 00:10:40
    西門子變頻器6SL3211OAB125UB1,西門子變頻器6SL3211OAB125UB1

                               {心中有空間,夢想就有可能}

                     {西門子與客戶攜手,讓關鍵所在,逐一實現}

    聯   系   人: 黃勇《黃工》   24小時聯系手機:  13701633515
    直線銷售 電 話: 021-31660605    在 線 商 務 QQ:  77956468 
    單位:臺                                                                                  產品單價:電議

    供貨數量:不限                                                                      最小定量:1

    包裝說明:齊全                                                                      產品規格:全新原裝

    步進可調的穩壓開關電源
    {開關電源行業門戶網}:開關電源是利用現代電力電子技術,控制開關管開通和關斷的時間比率,維持穩定輸出電壓的一種電源。由于擁有較高的效率和較高的功率密度,開關電源在現代電子系統中的使用越來越普及。開關電源高頻化、模塊化和智能化是其發展方向。其中,步進可調、實時顯示是開關電源智能化研究方向之一,F設計開關電源,技術指標為:輸出電壓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輸入電容、柵一源電路引線電感所產生的高頻寄生振蕩?捎行岣咿D換效率,若選用幾個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;
    }

    版權聲明PLC信息網轉載作品均注明出處,本網未注明出處和轉載的,是出于傳遞更多信息之目的,并不意味 著贊同其觀點或證實其內容的真實性。如轉載作品侵犯作者署名權,或有其他諸如版權、肖像權、知識產權等方面的傷害,并非本網故意為之,在接到相關權利人通知后將立即加以更正。聯系電話:0571-87774297。
最新資訊