精华内容
下载资源
问答
  • [原创]实现用C#开发K3插件教程,公司内部资源下来的 [原创]实现用C#开发K3插件教程,公司内部资源下来的
  • C#开发PDA程序

    2019-04-24 15:15:57
    本源码为C#开发PDA程序,适合初学者,可以直接使用;源码全;
  • 使用C#开发数据库

    2018-05-29 10:11:55
    使用C#开发数据库应用系统(Winform及相关的控件),,,,,,,,,,,,
  • 用C#开发的2048小游戏

    2015-11-27 18:46:31
    用C#开发的2048小游戏,新手很有练手的帮助。
  • C#学习路线图之《C#开发入门及项目实战》配书源代码 代码完整、详尽。本资源适合初学者锻炼独立开发项目的能力。
  • C#开发资源库

    2018-12-08 22:13:28
    文本中包含C#开发资源库的下载链接 C#开发资源库是一个资源集合库,内部包含丰富的C#软件学习资料、例程、实用模块资源
  • C#开发PDA 的步骤

    2019-04-13 17:26:30
    本文档用于向开发人员介绍C#开发PDA步骤,方法详细;适用于中高级开发人员;
  • OPC UA C#开发

    2018-05-09 09:09:46
    C#版本的开发包有两小时时限,可以用于学习和测试.已测试过可以使用.
  • 用C#开发的一个语音朗读程序,使用windows speech 5.1技术
  • 应众多公司的实际需求,《使用c#开发搜索引擎》介绍如何以c#作为工具开发搜索引擎。全书以完成一个网站搜索\垂直搜索作为目标,从网络爬虫抓取数据开始,然后到中文分词、文本排重等文本挖掘技术和搜索结果展现。...
  • C#开发实例大全 提高卷
  • 重要提示,下载前请认真阅读以下内容:1.由于CSDN限制上传大小,这里下载的文件是百度网盘的链接。2.由于百度网盘的分享...3.这个是《C#开发实战1200例》这本书的光盘文件,即教程范例的源代码,并不是这本书的pdf。
  • FC模拟器C#开发.rar

    2019-09-27 09:55:02
    用C#开发的FC模拟器用C#开发的FC模拟器用C#开发的FC模拟器
  • 海康威视 c# 开发实例

    2018-08-02 14:21:29
    亲测可用 可以参考 官网上有 官网上有 官网上有 官网上有 去官网下载即可
  • 用C#开发的windows窗体应用程序 根据经纬度显示百度地图上的位置
  • C#开发实践宝典

    2018-06-20 23:06:56
    C#开发实践宝典,是一本好书,绝对完成,学习的好帮手
  • c#开发实例大全(基础版)+源码,太大不发上传,内附练习方式,有问题可直接练习,
  • C#开发Android应用实战
  • C#开发app资料合集

    2017-07-07 07:31:42
    使用VS中自带的C#开发app的资料,包括传值、datagridview等使用技巧以及代码参考
  • C#开发1200例(包括1,2卷)+ASP.Net MVC开发1200例+C#编程经典实例,全是经典中的经典书籍
  • C# 开发实例大全(基础卷).pdf
  • 用C#语言 xamarin.android 开发的 蓝牙打印功能,用vs2017开发的源码,还包括引用java jar 包
  • C#开发实战1200例(1)源码光盘,2个G的源码东西,内容必属精品,互相学习下。
  • C#开发实战1200例(第1、2卷Pdf)+(第1卷)源码 解压包内附带解压密码。
  • 由于《C#开发实例大全(提高卷)》随书光盘源码有1.69G,下载文件中附有百度网盘链接,若链接失效请联系内附QQ
  • 这个是周立功官网给出的USBCAN二次开发套件库。内含文件ControlCAN.dll等
  • C#开发实例大全(基础卷)》清晰扫描版,非常经典的书籍
  • 用C#开发基于自动化接口的OPC客户端

    千次阅读 2018-12-03 20:04:34
    OPC作为一整套接口、属性和方法的协议标准集,与具体的开发语言没有关系。 1、OPC客户端接口方式 开发OPC客户端程序,其访问接口方式有多种,根据官方提供的资料大约有如下几种方式: 使用OPCN...

    转至:

    OPC全称是Object Linking and Embedding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。OPC作为一整套接口、属性和方法的协议标准集,与具体的开发语言没有关系。

    1OPC客户端接口方式

    开发OPC客户端程序,其访问接口方式有多种,根据官方提供的资料大约有如下几种方式:

    • 使用OPCNetAPI,需要用到OPCNetAPI.dll,OPCNetAPI.Com.dll
    • 使用自动化接口,需要用到OPCDAAuto.dll
    • 使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,OpcRcw.Comn.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll

    对于像C++这样的语言来开发OPC客户端时,一般需要使用自定义接口的方式。而如果采用VB和C#这样的语言来开发OPC客户端时,一般就采用自动化接口。要使用OPC自动化接口,首先要引用OPCDAAuto.dll文件,并在开发环境中做好相关的引用配置。

    2、自动化接口简介

    自动化接口是OPC基金会组织为了方便并统一OPC客户端开发而发布的一个接口、属性和方法的协议集。其访问服务器的流程如下:

    自动化接口中共定义了6类对象:OPCServer对象、OPCBrowser对象、OPCGroups对象、OPCGroup对象、OPCItems对象、OPCItem对象。接下来简要描述一下这些对象的主要功能。

    1)、OPCServer对象

    由客户端创建的OPCServer自动化对象。然后客户端通过其方法实现连接到OPC数据访问自定义接口。OPCServer对象现在可以用来获取关于OPC服务器的一般信息,并创建和操作OPCGroup对象的集合。

    主要的属性:

    StartTime

    CurrentTime

    LastUpdateTime

    MajorVersion

    MinorVersion

    BuildNumber

    VendorInfo

    ServerState

    LocaleID

    Bandwidth

    OPCGroups

    PublicGroupNames

    ServerName

    ServerNode

    ClientName

    主要的方法:

    GetOPCServers

    Connect

    Disconnect

    CreateBrowser

    GetErrorString

    QueryAvailableLocaleIDs

    QueryAvailableProperties

    GetItemProperties

    LookupItemIDs

     

     

    2)、OPCBrowser对象

    OPCBrowser对象是在服务器中存在的分支或项目名称的集合。其是可选的。如果服务器不支持,将不会创建这个对象。

    主要的属性:

    Organization

    Filter

    DataType

    AccessRights

    CurrentPosition

    Count

    主要的方法:

    Item

    ShowBranches

    ShowLeafs

    MoveUp

    MoveToRoot

    MoveDown

    MoveTo

    GetItemID

    GetAccessPaths

    3)、OPCGroups对象

    OPCGroups是OPCGroup对象的集合,以及创建、删除和管理它们的方法。

    该对象还具有OPCGroup默认属性。当添加OPCGroups时,DefaultGroupXXXX属性设置其初始状态。可以更改默认值,以添加具有不同初始状态的opc组。更改默认值并不会影响已经创建的组。添加OPCGroup后,它的属性可以被修改。这减少了调用Add方法所需的参数数量。

    主要的属性:

    Parent

    DefaultGroupIsActive

    DefaultGroupUpdateRate

    DefaultGroupDeadband

    DefaultGroupLocaleID

    DefaultGroupTimeBias

    Count

     

     

    主要的方法:

    Item

    Add

    GetOPCGroup

    Remove

    RemoveAll

    ConnectPublicGroup

    RemovePublicGroup

     

     

    4)、OPCGroup对象

    OPC组为客户组织数据提供了一种方式。例如,组可能表示特定操作符显示或报告中的项。数据可以读写。基于异常的连接也可以在客户端和组中的项之间创建,可以根据需要启用和禁用。OPC客户机可以配置OPC服务器应该向OPC客户机提供数据更改的速率。

    主要的属性:

    Parent

    Name

    IsPublic

    IsActive

    IsSubscribed

    ClientHandle

    ServerHandle

    LocaleID

    TimeBias

    DeadBand

    UpdateRate

    OPCItems

    主要的方法:

    SyncRead

    SyncWrite

    AsyncRead

    AsyncWrite

    AsyncRefresh

    AsyncCancel

    5)、OPCItems对象

    这个对象还具有OPCItem默认的属性。当添加OPCItem时,DefaultXXXX属性设置其初始状态。可以更改默认值,以添加具有不同初始状态的OPCItems。当然,一旦添加了OPCItem,它的属性可以被修改。这减少了调用Add方法所需的参数数量。

    主要的属性:

    Parent

    DefaultRequestedDataType

    DefaultAccessPath

    DefaultIsActive

    Count

     

    主要的方法:

    Item

    GetOPCItem

    AddItem

    AddItems

    Remove

    Validate

    SetActive

    SetClientHandles

    SetDataTypes

    6)、OPCItem对象

    OPC项表示与服务器中的数据源的连接。与每个项目相关联的是一个值,质量和时间戳。值以变量的形式出现,质量类似于Fieldbus指定的值。

    主要的属性:

    Parent

    ClientHandle

    ServerHandle

    AccessPath

    AccessRights

    ItemID

    IsActive

    RequestedDataType

    Value

    Quality

    TimeStamp

    CanonicalDataType

    EUType

    EUInfo

     

    主要的方法:

    Read

    Write

     

    3、客户端的开发

    接下来我们基于C#开发OPC客户端。上面说明了自动化接口具体情况,我们需要进一步针对自己的具体应用编写代码。

    首先,封装一斜对象、用于存取相关的属性,如:OPC服务器信息(OPCServerInfo)、OPC数据项(OPCDataItem)、组属性(GroupProperty)等。对于组属性我们还需要赋予默认值。代码如下:

    public class OPCServerInfo
    
        {
    
            public DateTime StartTime { get; set; }
    
            public string ServerVersion { get; set; }
    
        }
    
     
    
        public class OPCDataItem
    
        {
    
            public object ItemName { get; set; }
    
            public object ItemValue { get; set; }
    
            public object Quality { get; set; }
    
            public object TimeStamp { get; set; }
    
        }
    
     
    
        public class GroupProperty
    
        {
    
            public bool DefaultGroupIsActive { get; set; }
    
            public float DefaultGroupDeadband { get; set; }
    
            public int UpdateRate { get; set; }
    
            public bool IsActive { get; set; }
    
            public bool IsSubscribed { get; set; }
    
     
    
            public GroupProperty()
    
            {
    
                DefaultGroupIsActive = true;
    
                DefaultGroupDeadband = 0;
    
                UpdateRate = 250;
    
                IsActive = true;
    
                IsSubscribed = true;
    
            }
    
        }

     接下来,为了使用方便我们封装了一个ClientHelper类用于实现相关的操作,应为在一个客户端应用中,该对象是唯一的我们为了使用方便将其声明为静态类,以便于使用。具体代码如下:

    public class ClientHelper
    
        {
    
            /// <summary>
    
            /// 获取可以使用的OPC服务器
    
            /// </summary>
    
            /// <param name="hostName">获取OPC服务器的主机名称</param>
    
            /// <returns>返回OPC服务器列表</returns>
    
            public static List<string> GetOPCServerName(string hostName)
    
            {
    
                try
    
                {
    
                    OPCServer OpcServer = new OPCServer();
    
                    object opcServers = OpcServer.GetOPCServers(hostName);
    
                    List<string> serverList = new List<string>();
    
                    foreach (string opcServer in (Array)opcServers)
    
                    {
    
                        serverList.Add(opcServer);
    
                    }
    
                    return serverList;
    
                }
    
                catch(Exception ex)
    
                {
    
                    throw ex;
    
                }
    
            }
    
     
    
            /// <summary>
    
            /// 连接到指定的OPC服务器
    
            /// </summary>
    
            /// <param name="serverName">服务器名称</param>
    
            /// <param name="serverIP">服务器IP</param>
    
            /// <returns>返回的OPC服务器</returns>
    
            public static OPCServer ConnectToServer(string serverName, string serverIP)
    
            {
    
                OPCServer opcServer = new OPCServer();
    
                try
    
                {
    
                    opcServer.Connect(serverName, serverIP);
    
                    if (opcServer.ServerState != (int)OPCServerState.OPCRunning)
    
                    {
    
                        opcServer.Disconnect();
    
                        return null;
    
                    }
    
                }
    
                catch
    
                {
    
                    opcServer.Disconnect();
    
                    return null;
    
                }
    
                return opcServer;
    
            }
    
     
    
            /// <summary>
    
            /// 获取OPC服务器的相关信息
    
            /// </summary>
    
            /// <param name="opcServer">OPC服务器对象</param>
    
            /// <returns>OPC服务器信息</returns>
    
            public static OPCServerInfo GetServerInfo(OPCServer opcServer)
    
            {
    
                OPCServerInfo serverInfo = new OPCServerInfo();
    
                serverInfo.StartTime=opcServer.StartTime;
    
                serverInfo.ServerVersion = opcServer.MajorVersion.ToString() + "." + opcServer.MinorVersion.ToString() + "." + opcServer.BuildNumber.ToString();
    
                return serverInfo;
    
            }
    
     
    
            /// <summary>
    
            /// 展开OPC服务器的节点
    
            /// </summary>
    
            /// <param name="opcServer">OPC服务器</param>
    
            /// <returns>返回展开后的节点数据</returns>
    
            public static OPCBrowser RecurBrowse(OPCServer opcServer)
    
            {
    
                OPCBrowser opcBrowser = opcServer.CreateBrowser();
    
                //展开分支
    
                opcBrowser.ShowBranches();
    
                //展开叶子
    
                opcBrowser.ShowLeafs(true);
    
                return opcBrowser;
    
            }
    
     
    
            public static OPCGroup CreateGroup(OPCServer opcServer, OPCItems opcItems, string opcGroupName, GroupProperty groupProperty)
    
            {
    
                try
    
                {
    
                    OPCGroup opcGroup = opcServer.OPCGroups.Add(opcGroupName);
    
     
    
                    opcServer.OPCGroups.DefaultGroupIsActive = groupProperty.DefaultGroupIsActive;
    
                    opcServer.OPCGroups.DefaultGroupDeadband = groupProperty.DefaultGroupDeadband;
    
                    opcGroup.UpdateRate = groupProperty.UpdateRate;
    
                    opcGroup.IsActive = groupProperty.IsActive;
    
                    opcGroup.IsSubscribed = groupProperty.IsSubscribed;
    
     
    
                    //opcGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(OpcGroupDataChange);
    
                    //opcGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);
    
                    //opcItems = opcGroup.OPCItems;
    
                    return opcGroup;
    
                }
    
                catch (Exception err)
    
                {
    
                    throw err;
    
                }
    
            }
    
        }

    最后就是使用前述的封装。 

     

    展开全文
  • c#开发Android应用实战

    千次下载 热门讨论 2012-12-25 17:29:29
    C#开发Android应用实战——使用Mono for Android和.NET/C# 全面透彻地讲解Android应用编程知识,分析如何结合使用C#和Mono来编写在Android设备系列上运行的应用程序。在这本由多位专家联袂撰写的必备精品书籍的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 432,264
精华内容 172,905
关键字:

c#开发

c# 订阅