(C#)OPC客户端源码

合集下载

c语言中各种符号含义

c语言中各种符号含义

c语言中各种符号含义1.#:预处理符号,用于在程序编译前进行一些预处理操作。

2. ;:语句结束符号,用于表示一行语句的结束。

3. {}:代码块,用于组织多条语句。

4. ():括号,用于表示运算的优先级和函数的参数列表。

5. []:方括号,用于表示数组的下标。

6. +:加号,用于做加法运算。

7. -:减号,用于做减法运算。

8. *:乘号,用于做乘法运算。

9. /:除号,用于做除法运算。

10. %:取余符号,用于求两个数的余数。

11. =:赋值符号,用于将右侧的值赋给左侧的变量。

12. ==:等于符号,用于判断两个数是否相等。

13. !=:不等于符号,用于判断两个数是否不相等。

14. >:大于符号,用于判断左侧的数是否大于右侧的数。

15. <:小于符号,用于判断左侧的数是否小于右侧的数。

16. >=:大于等于符号,用于判断左侧的数是否大于或等于右侧的数。

17. <=:小于等于符号,用于判断左侧的数是否小于或等于右侧的数。

18. &&:逻辑与符号,用于判断两个条件是否都成立。

19. ||:逻辑或符号,用于判断两个条件是否有一个成立。

20. !:逻辑非符号,用于取反一个条件。

21. &:取地址符号,用于获取变量的地址。

22. *:指针符号,用于声明指针变量和操作指针所指向的值。

23. sizeof:运算符,用于获取数据类型的大小。

24. ->:成员访问符号,用于访问结构体或指向结构体的指针的成员。

25. typedef:关键字,用于给数据类型起一个新的名字。

26. struct:关键字,用于定义结构体类型。

27. union:关键字,用于定义联合体类型。

28. enum:关键字,用于定义枚举类型。

29. if:关键字,用于表示条件语句。

30. else:关键字,用于表示条件语句中的“否则”分支。

31. switch:关键字,用于表示选择语句。

32. case:关键字,用于表示选择语句中的一个选项。

IP RAN硬件与施工规范介绍(C)

IP RAN硬件与施工规范介绍(C)

Page 12
硬件安装规范-拆包装规范
拆包装规范
1. 木箱的开箱方法请严格按照木箱上粘贴的开箱指导资料进行操作。
2. 机箱拆除外包木箱后,应放置在木质底座上,避免地面不平或杂物损坏机箱;若在室外拆除木箱,在机箱搬运到机房前应保留包装袋,防止灰尘、杂 物或雨水进入设备。单板包装箱要求在待安装的机房内拆包。
IPRAN 硬件设计须知 IPRAN 硬件安装规范 IPRAN 仓储运输规范
IPRAN 硬件自检自查
附录:快速安装指南与功率功耗
HUAWEI TECHNOLOGIES CO., LTD.
Huawei Confidential
Page 2
IP RAN硬件设计须知-CX插卡限制

一、100G线卡与网板需要配套使用
2014-12-15
Security Level:
IP RAN硬件与施工规范介绍
-----2013年中国电信LTE项目网络金种子培训教材
网络集成服务交付运营部-IP RAN总体组

HUAWEI TECHNOLOGIES CO., LTD.
Huawei Confidential


四、CX6D0L2XFA10 2*10GE子卡在ISUF-50单板2和3个槽位不能注册

2*10GE 子卡只能在ISUF-50(03054106)单板0和1槽位(下面)注册
HUAWEIBiblioteka TECHNOLOGIES CO., LTD.
Huawei Confidential
IPRAN硬件设计须知-CX产品CF卡容量与电模块端口限制
5. 搬运设备或在将设备安装到机柜时应使用承重把手,严禁拉拽其他部件上的 把手。
9. 设备要求远离蓄电池安装。如下场景中设备直面蓄电池,设备出风口热气 吹向蓄电池,高温气流容易损坏蓄电池,蓄电池损坏后腐蚀气体泄露会腐蚀 损坏设备。

C语言中变量的声明和定义

C语言中变量的声明和定义

C语⾔中变量的声明和定义变量声明和变量定义变量定义:⽤于为变量分配存储空间,还可为变量指定初始值。

程序中,变量有且仅有⼀个定义。

变量声明:⽤于向程序表明变量的类型和名字。

定义也是声明,extern声明不是定义定义也是声明:当定义变量时我们声明了它的类型和名字。

extern声明不是定义:通过使⽤extern关键字声明变量名⽽不定义它。

[注意]变量在使⽤前就要被定义或者声明。

在⼀个程序中,变量只能定义⼀次,却可以声明多次。

定义分配存储空间,⽽声明不会。

C++程序通常由许多⽂件组成,为了让多个⽂件访问相同的变量,C++区分了声明和定义。

变量的定义(definition)⽤于为变量分配存储空间,还可以为变量指定初始值。

在程序中,变量有且仅有⼀个定义。

声明(declaration)⽤于向程序表明变量的类型和名字。

定义也是声明:当定义变量的时候我们声明了它的类型和名字。

可以通过使⽤extern声明变量名⽽不定义它。

不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。

extern声明不是定义,也不分配存储空间。

事实上它只是说明变量定义在程序的其他地⽅。

程序中变量可以声明多次,但只能定义⼀次。

只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。

初始化式必须要有存储空间来进⾏初始化。

如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。

任何在多⽂件中使⽤的变量都需要有与定义分离的声明。

在这种情况下,⼀个⽂件含有变量的定义,使⽤该变量的其他⽂件则包含该变量的声明(⽽不是定义)。

如何清晰的区分变量声明和定义extern通知编译器变量在其他地⽅被定义1.extern告诉编译器变量在其他地⽅定义了。

例如:extern int i;//声明,不是定义int i;//声明,也是定义,未初始化带有初始化式的声明必定式定义2.如果声明有初始化式,就被当作定义,即使前⾯加了extern。

C语言程序的三种基本结构

C语言程序的三种基本结构

C语⾔程序的三种基本结构1、程序结构:在C语⾔程序中,⼀共有三种程序结构:顺序结构、选择结构(分⽀结构)、循环结构; 顺序结构:从头到尾⼀句接着⼀句的执⾏下来,直到执⾏完最后⼀句; 选择结构:到某个节点后,会根据⼀次判断的结果来决定之后向哪⼀个分⽀⽅向执⾏; 循环结构:循环结构有⼀个循环体,循环体⾥是⼀段代码。

对于循环结构来说,关键在于根据判断的结果,来决定循环体执⾏多少次; 注:在逻辑上有⼀种bool类型(也叫boolean类型,布尔类型),只有两个值,即真和假。

C语⾔的判断表达式最终的值就是⼀个bool类型,这个判断表达式的bool值就决定了选择结构如何选择,循环结构如何循环;2、顺序结构:顺序结构很简单,⼀般我们遇到的除了选择结构和循环结构外,都是顺序结构;3、选择结构:C语⾔中常⽤的选择结构主要有以下两种: (1) if else:引⼊关键字:if else else if if (bool值) // 如果bool值为真,则执⾏代码段1,否则执⾏代码段2 { 代码段1 } else { 代码段2 } if (bool值1) // 如果bool值1为真,则执⾏代码段1,否则判断bool值2是否为真 { 代码段1 } else if (bool值2) // 若bool值2为真则执⾏代码段2,否则直接执⾏代码段3 { // 开头的if和结尾的else都只能有⼀个,但是中间的else if可以有好多个 代码段2 } else { 代码段3 }1 #include <stdio.h>23int main(void)4 {5int a, b, max;67 a = 456;8 b = 45;910if (a > b) // 判断表⽰式11 {12 max = a;13 printf("true.\n");14 }15else if (a == b)16 {17 max = a;18 printf("a == b.\n");19 }20else21 {22 max = b;23 printf("false.\n");24 }2526 printf("max = %d.\n", max);2728return0;29 } (2) switch case:引⼊关键字:switch case break default switch (变量) // 执⾏到这⼀句时,变量的值是已知的 { // switch case语句执⾏时,会⽤该变量的值依次与各个case后的常数去对⽐,试图找到第⼀个匹配项,找到匹配的项⽬后, case 常数1: // 就去执⾏该case对应的代码段,如果没找到则继续下⼀个case,直到default 代码段1; // 如果前⾯的case都未匹配,则default匹配。

C标志

C标志

“C”(英文CHINA的第一个字母)标志是定量包装商品生产企业计量保证能力合格的标志,定量包装商品带上“C”标志表明其净含量是有保证的,是生产企业对消费者的承诺。

定量包装商品的生产企业只有在企业自我评价和自我声明的基础上,经省级以上政府计量部门核查,其计量保证能力合格并颁发了《定量包装商品生产企业计量保证能力证书》的,才能允许在定量包装商品上使用“C”标志。

什么是“定量包装商品”呢?2001年4月6日国家技监局制定颁发的《定量包装商品生产企业计量保证能力评价规定》和《定量包装商品生产企业计量保证能力评价规范》对此作了定义和规定。

“定量包装商品”是指以销售为目的,在一定量限范围内具有统一的质量(即重量)、体积、长度标注的包装商品。

其量限范围是:质量5g~25kg,体积5ml~25l长度没有限制。

而净含量是去除包装材料和该产品包装在一起的任何其他材料后的实际质量、体积和长度。

该《规范》明文规定,必须在商品包装上明确标注定量包装商品的净含量,净含量的标注必须符合《定量包装商品计量监督规定》的规定;定量包装商品的净含量的误差必须符合国家强制性标准和以上《监督规定》的要求;包装设备和包装工艺中的检测器具配备率必须达到100%,其精度应符合国家规定;定量包装商品的包装材料应满足定量包装商品计量准确性的要求,并能防止在包装和贮运过程中的渗漏和破损;必须确保不符合产品标准和实物净含量超过允许误差规定的包装产品处于受控状态。

目前,我国已由政府公布的第一批定量包装商品目录有3大类13种类。

食品类的有酒、食用油、方便面、米、面粉、奶粉、牛奶、酸奶、碳酸饮料、纯净水,其他还有洗涤用品类的洗衣粉,化妆品类的洗发液、护肤露,都是关系国民生活需要加大监督力度的产品。

同时已使用“C”标志的定量包装商品将不都是“终身制”。

推行“C”标志非常必要据悉,目前我国定量包装商品的种类和数量增长迅速,其工业产值已超过1000亿元。

据2001年初北京、上海、辽宁、江苏、陕西、重庆、山东、湖北8个省市的统计,定量包装商品生产企业已达到27000多家,其中以生产食品定量包装商品为主的企业占66%。

select函数的详细使用(C语言)

select函数的详细使用(C语言)

select函数的详细使⽤(C语⾔)Select在Socket编程中还是⽐较重要的,可是对于初学Socket的⼈来说都不太爱⽤Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞⽅式block,顾名思义,就是进程或是线程执⾏到这些函数时必须等待某个事件的发⽣,如果事件没有发⽣,进程或线程就被阻塞,函数不能⽴即返回)。

可是使⽤Select就可以完成⾮阻塞(所谓⾮阻塞⽅式non-block,就是进程或线程执⾏此函数时不必⾮要等待事件的发⽣,⼀旦执⾏肯定返回,以返回值的不同来反映函数的执⾏情况,如果事件发⽣则与阻塞⽅式相同,若事件没有发⽣则返回⼀个代码来告知事件未发⽣,⽽进程或线程继续执⾏,所以效率较⾼)⽅式⼯作的程序,它能够监视我们需要监视的⽂件描述符的变化情况——读写或是异常。

Select的函数格式:int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout);先说明两个结构体:第⼀,struct fd_set可以理解为⼀个集合,这个集合中存放的是⽂件描述符(filedescriptor),即⽂件句柄,这可以是我们所说的普通意义的⽂件,当然Unix下任何设备、管道、FIFO等都是⽂件形式,全部包括在内,所以毫⽆疑问⼀个socket就是⼀个⽂件,socket句柄就是⼀个⽂件描述符。

fd_set集合可以通过⼀些宏由⼈为来操作,⽐如清空集合FD_ZERO(fd_set *),将⼀个给定的⽂件描述符加⼊集合之中FD_SET(int ,fd_set*),将⼀个给定的⽂件描述符从集合中删除FD_CLR(int,fd_set*),检查集合中指定的⽂件描述符是否可以读写FD_ISSET(int ,fd_set* )。

第⼆,struct timeval是⼀个⼤家常⽤的结构,⽤来代表时间值,有两个成员,⼀个是秒数,另⼀个是毫秒数。

维生素c百度百科

维生素c百度百科

维生素c_‎百度百科我‎的百科我‎的贡献草稿‎箱百度首页‎| 登录‎‎‎‎新闻‎网页‎贴吧‎知道‎MP3 ‎图片‎视频‎百科帮‎助设置‎‎首页自然‎文化地‎理历史‎生活社会‎艺术人‎物经济‎科学体育‎春节维‎他命C在百‎度百科中为‎本词条的同‎义词,已为‎您做自动跳‎转。

编辑词‎条维生素‎c百科名片‎维生素C‎图片维生素‎C(Vit‎a min ‎C,As‎c orbi‎cAc‎i d)又叫‎L-抗坏血‎酸,是一种‎水溶性维生‎素。

食物中‎的维生素C‎被人体小肠‎上段吸收。

‎一旦吸收,‎就分布到体‎内所有的水‎溶性结构中‎,正常成人‎体内的维生‎素C代谢活‎性池中约有‎1500m‎g维生素C‎,最高储存‎峰值为30‎00mg维‎生素C。

正‎常情况下,‎维生素C绝‎大部分在体‎内经代谢分‎解成草酸或‎与硫酸结合‎生成抗坏血‎酸-2-硫‎酸由尿排出‎;另一部分‎可直接由尿‎排出体外。

‎目录‎[隐藏]‎基本性‎质物理性质‎‎化学性质‎发展历‎程功‎效适‎宜人群‎富含食物‎正常‎需求生理功‎能‎防病作用‎‎药物作用‎吸收代‎谢缺乏表现‎‎过量表现‎注意‎人工合‎成维‎生素C片说‎明书基本‎性质物理‎性质‎化学‎性质‎发展历程‎功效‎适宜人‎群富‎含食物‎正常需求‎生理功能‎‎防病作用‎‎药物作用‎吸收‎代谢缺乏‎表现‎过量‎表现‎注意‎人工合‎成维生素C‎片说明书‎‎[编辑本段‎]基本性质‎物‎理性质‎外观:‎无色晶体‎熔点:‎190 -‎192℃‎沸点‎:(无)‎紫外吸‎收最大值:‎245nm‎荧光‎光谱:激发‎波长-无n‎m,荧光波‎长-无nm‎;溶‎解性:水溶‎性维生素‎化学‎性质‎分子式:‎C6H8O‎6分‎子量:17‎6.12u‎CA‎S号:50‎-81-7‎酸性‎,具有较强‎的还原性,‎加热或在溶‎液中易氧化‎分解,在碱‎性条件下更‎易被氧化。

‎构成‎:一个维生‎素分子由六‎个碳原子、‎八个氢原子‎和六个氧原‎子构成。

c结尾的单词

c结尾的单词

437个以C为结尾的英文单词以下为以C为结尾的单词,共437个(后附单词及例句)——adj. 水生的,水中的1、music 音乐例句:His first music teacher was a major influence in his life.他的第一位音乐老师是他一生中对他影响非常大的人。

Every week they get together to make music.每个星期他们都聚在一起唱歌奏乐。

2、romantic 浪漫的例句:I'm not interested in a romantic relationship.我对谈情说爱不感兴趣。

This season's look is soft and romantic.这段时间的流行风格是柔和、浪漫。

3、charismatic 有魅力的例句:Like all truly charismatic people, he can work his magic on both men and women.像所有真正富有魅力的人一样,他让男人和女人都很着迷。

He's unsympathetic, but charismatic and complex.他很讨人厌,但很有感召力,令人捉摸不透。

4、civic 城市的;公民的Civic education can only build up active and modern civic education.公民教育只能是造就积极的现代公民的教育。

We must carry out the Program for lmproving Civic Morality.认真贯彻公民道德建设实施纲要。

Second, about the includes civic education and extension.其次,公民教育的内含和外延。

5、picnic 野餐;愉快的时间We stopped for a picnic en route.我们在途中停下来野餐。

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

【转】(C#)OPC客户端源码转载申明申明:本文为转载,如需转载本文,请获取原文作者大尾巴狼啊的同意,谢谢合作!转自:大尾巴狼啊原文出处:/xiaosacao/archive/2009/01/13/1374895.html前几天我就发布过这篇文章,可惜的是,发布后代码有的却看不到,后来我就删了,至今不明白什么原因- -!关于C++、VB来开发OPC客户端的资料网上有很多,但C#的至今没发现有多少。

由于近期项目的需要,就开发了OPC客户端的一个模块。

在我想来,程序员挺累的,原因我很累。

所以我想大家也很累~~~嘿嘿。

特别是刚接手OPC客户端开发的前几天,天天盯住显示器,百度、GOOGLE不停的搜索。

每天早上醒来,眼睛都瑟瑟的。

从事3年以上软件开发的朋友们,估计都会腰酸背痛吧!反正我是这样的。

不说那么多废话了,贴上源码,让需要的同行看看吧,代码的质量并不高,就当做抛砖引玉吧!1、枚举本地服务器2、获取服务器信息3、列出了服务器上Tag4、可以设置组的属性5、读\写功能6、可进行远程连接(DCOM需配置)先看图:引用类库:OPC服务器:开发工具:当前环境:源码:///程式使用C#.NET 2005 编写///引用类库OPCDAAuto.dll///OPCServer采用KEPWare///在windows xp sp2、sp3、windows 2003上测试通过///完成于:2008年12月31日///测试于:2009年01月05日//////作者:潇洒草///Email:zhkai868@///QQ:44649029//////如分发,请保留此摘要。

///鄙视那些拿代码当宝贝的人,鄙视那些你不拿源码换就不稀罕你的人,鄙视那些自私的人。

///别人看到你的代码,你能死啊?对你有多大威胁啊?强烈鄙视~~~///如果你是这样的人,赶紧关了。

偶不欢迎。

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using ;using System.Collections;using OPCAutomation;namespace OPC测试通过{public partial class MainFrom : Form{public MainFrom(){InitializeComponent(); }#region私有变量///<summary>/// OPCServer Object///</summary>OPCServer KepServer;///<summary>/// OPCGroups Object///</summary>OPCGroups KepGroups;///<summary>/// OPCGroup Object///</summary>OPCGroup KepGroup;///<summary>/// OPCItems Object///</summary>OPCItems KepItems;///<summary>/// OPCItem Object///</summary>OPCItem KepItem;///<summary>///主机IP///</summary>string strHostIP = "";///<summary>///主机名称///</summary>string strHostName = "";///<summary>///连接状态///</summary>bool opc_connected = false; ///<summary>///客户端句柄///</summary>int itmHandleClient = 0;///<summary>///服务端句柄///</summary>int itmHandleServer = 0;#endregion#region方法///<summary>///枚举本地OPC服务器///</summary>private void GetLocalServer(){//获取本地计算机IP,计算机名称IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);if (IPHost.AddressList.Length > 0){strHostIP = IPHost.AddressList[0].ToString();}else{return;}//通过IP来获取计算机名称,可用在局域网内IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);strHostName=ipHostEntry.HostName.ToString();//获取本地计算机上的OPCServerNametry{KepServer = new OPCServer();object serverList = KepServer.GetOPCServers(strHostName);foreach (string turn in (Array)serverList){cmbServerName.Items.Add(turn);}cmbServerName.SelectedIndex = 0;btnConnServer.Enabled = true;}catch(Exception err){MessageBox.Show("枚举本地OPC服务器出错:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageB oxIcon.Warning);}}///<summary>///创建组///</summary>private bool CreateGroup(){try{KepGroups = KepServer.OPCGroups;KepGroup = KepGroups.Add("OPCDOTNETGROUP");SetGroupProperty();KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup _AsyncWriteComplete);KepItems = KepGroup.OPCItems;}catch (Exception err){MessageBox.Show("创建组出现错误:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon. Warning);return false;}return true;}///<summary>///设置组属性///</summary>private void SetGroupProperty(){KepServer.OPCGroups.DefaultGroupIsActive =Convert.ToBoolean(txtGroupIsActive.Text);KepServer.OPCGroups.DefaultGroupDeadband = Convert.ToInt32(txtGroupDeadband.Text);KepGroup.UpdateRate = Convert.ToInt32(txtUpdateRate.Text);KepGroup.IsActive = Convert.ToBoolean(txtIsActive.Text);KepGroup.IsSubscribed =Convert.ToBoolean(txtIsSubscribed.Text);}///<summary>///列出OPC服务器中所有节点///</summary>///<param name="oPCBrowser"></param>private void RecurBrowse(OPCBrowser oPCBrowser){//展开分支oPCBrowser.ShowBranches();//展开叶子oPCBrowser.ShowLeafs(true);foreach (object turn in oPCBrowser){listBox1.Items.Add(turn.ToString());}}///<summary>///获取服务器信息,并显示在窗体状态栏上///</summary>private void GetServerInfo(){tsslServerStartTime.Text ="开始时间:"+ KepServer.StartTime.ToString()+" ";tsslversion.Text ="版本:"+ KepServer.MajorVersion.ToString() + "." + KepServer.MinorVersion.ToS tring()+"."+KepServer.BuildNumber.ToString();}///<summary>///连接OPC服务器///</summary>///<param name="remoteServerIP">OPCServerIP</param>///<param name="remoteServerName">OPCServer名称</param>private bool ConnectRemoteServer(string remoteServerIP, string remoteServerName){try{KepServer.Connect(remoteServerName, remoteServerIP);if (KepServer.ServerState == (int)OPCServerState.OPCRunning){tsslServerState.Text = "已连接到-" + KepServer.ServerName + " ";}else{//这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档tsslServerState.Text = "状态:" + KepServer.ServerState.ToString() + " ";}}catch (Exception err){MessageBox.Show("连接远程服务器出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, Mess ageBoxIcon.Warning);return false;}return true;}#endregion#region事件///<summary>///写入TAG值时执行的事件///</summary>///<param name="TransactionID"></param>///<param name="NumItems"></param>///<param name="ClientHandles"></param>///<param name="Errors"></param>void KepGroup_AsyncWriteComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Arr ay Errors){lblState.Text = "";for (int i = 1; i <= NumItems; i++){lblState.Text += "Tran:" + TransactionID.ToString() + " CH:" + ClientHandles.GetValue(i). ToString() + " Error:" + Errors.GetValue(i).ToString();}}///<summary>///每当项数据有变化时执行的事件///</summary>///<param name="TransactionID">处理ID</param>///<param name="NumItems">项个数</param>///<param name="ClientHandles">项客户端句柄</param>///<param name="ItemValues">TAG值</param>///<param name="Qualities">品质</param>///<param name="TimeStamps">时间戳</param>void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemV alues, ref Array Qualities, ref Array TimeStamps){//为了测试,所以加了控制台的输出,来查看事物ID号//Console.WriteLine("********"+TransactionID.ToString()+"*********");for (int i = 1; i <= NumItems; i++){this.txtTagValue.Text = ItemValues.GetValue(i).ToString();this.txtQualities.Text = Qualities.GetValue(i).ToString();this.txtTimeStamps.Text = TimeStamps.GetValue(i).ToString();}}///<summary>///选择列表项时处理的事情///</summary>///<param name="sender"></param>///<param name="e"></param>private void listBox1_SelectedIndexChanged(object sender, EventArgs e){try{if (itmHandleClient != 0){this.txtTagValue.Text = "";this.txtQualities.Text ="";this.txtTimeStamps.Text = "";Array Errors;OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);//注:OPC中以1为数组的基数int[] temp = new int[2] { 0, bItem.ServerHandle };Array serverHandle = (Array)temp;//移除上一次选择的项KepItems.Remove(KepItems.Count, ref serverHandle, out Errors);}itmHandleClient = 1234;KepItem = KepItems.AddItem(listBox1.SelectedItem.ToString(), itmHandleClient); itmHandleServer = KepItem.ServerHandle;}catch(Exception err){//没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。

相关文档
最新文档